您的位置:首页 > 运维架构 > Linux

linux版本的安装问题

2014-12-25 21:35 281 查看
拿着还是12年买的郭天祥的arm7开发板,重新学习uclinux相关内容,首先在虚拟机中安装redhat4,以前一直是井底之蛙,现在才知道别说redhat4了,就是redhat9都是老掉牙的东西了,apt-get for redhat4 没有,看到for redhat9有,就下了,结果安装教程不明朗确定,问题百出,遂放弃直接用ubuntu14 高级货。。。这说明还是要紧跟时代的步伐,老学些老掉牙的东西,不仅知识体系是旧的,而且很麻烦,学着很痛苦。

首先还是用虚拟机装的ubuntu14,装好后巨卡,也难怪,同时又win7和ubuntu运行,我这华硕破电脑担待不起,于是用U盘启动在d盘安装了ubuntu14 麒麟版本。果然比土的掉渣的redhat9 炫酷多了,很有苹果mac os 的感觉。小激动后,准备研究linux内核的第一步工作:即建立内核树,这个内核树到底是个什么概念,现在其实也没搞清楚,先不管了,毕竟知识是一步步学的,不要让前面太多分支的东西干扰主线,后面有基础了回过头来再学就轻松了。

百度,翻墙google,搞清基本步骤:

(1)$apt-get install build-essential kernel-package libncurses5-dev libncurses5
,把工具安装了,没管具体有啥用,先安了再说,还是那句话,对于初学者,如果抱着什么都想立马知道,会学得很痛苦,先把当前的事干好了再说;

(2)apt-get
install linux-source-2.6.32 下载内核,那个版本号可以搜下最新的;

(3)解压缩
用 tar -gxvf path(linux-source的路径);

(4)make
menuconfig ,save和load 都是.config

(5)开始编译
make -j4(笔记本双核)(忘了多久,反正从晚上7点多到第二天早上弄编译好了);

(6)make
bzImage 可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x ;

(7)make modules ;

(8)make modules_install 搞定 内核树建立好了

(9)选个目录建立一个linuxq文件夹,里面好放例子,比如helloworld驱动例子,需要hello.c
Makefile 两个文件,代码分别为:

//hello.c

#include <linux/init.h>

#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");

static int hello_init(void)

{

printk(KERN_ALERT "Hello, world\n");

return 0;

}

static void hello_exit(void)

{

printk(KERN_ALERT"Goodbye, cruel world\n");

}

module_init(hello_init);

module_exit(hello_exit);

//Makefile

obj-m := hello.o

KERNELDIR := /lib/modules/2.6.32-21-generic/build

PWD := $(shell pwd)

modules:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules

modules_install:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

clean:

rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions $(TARGET)

需要注意的是makefile的格式$(MAKE)前面要加个tab.

make 编译,不出现错误的话,用ls -al查看linux_modules目录下产生了如下文件:

hello.c hello.mod.c hello.o modules.order

hello.ko hello.mod.o Makefile Module.symvers

其中hello.ko就是可加载的模块文件

现在我们就可以将编译好的模块helloworld加载到内核中去了

#insmod ./hello.ko //这个命令把hello.ko加载到内核

#lsmod|grep hello //lsmod 这个命令可以查看当前所有的驱动模块,结果应该显示hello 680 0

#rmmod hello //这个命令是把hello这个模块移除掉

程序的输出结果可以在

/var/log/syslog文件中查看

Hello,World

Goodbye,cruel world

这是程序的输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: