2. 下载内核源码:www.kernel.org/pub/linux/kernel/,先查看linux内核版本:$uname -r,我的版本是3.6.10-4.fc18.i686,所以我进入v3.x下载版本linux-3.6.10.tar.gz,我在/home下新建一个目录kernel,然后把下载的内核源码解压到新建的目录下。
3.切换到root权限下,在解压好的目录linux-3.6.10下:$make distclean
4.找到/boot目录下带config文件,我的是config -3.6.10-4.fc18.i686.PAE,将其复制到解压的linux-3.6.10目录下,重命名为.config。可以在该目录下用命令:ls -a 查看。
5. #make menuconfig,注意这时终端的窗口必须足够大,不然会出错,弹不出界面。成功界面
选择最后有两项:load a alternative kernel configuration...
save a alternative configuration...
选择load an alternate configuration保存,然后在选择save alternate configuration再保存退出,并退出配置环境。
6. #cd /home/kernel/linux-3.6.10
#make
这里一定是root权限下运行,这个过程一般是2个小时左右。
7.#make bzImage
8.#make modules
9.#make modules_install
10.#make install
所有编译都完成啦。
我在/home目录下创建了一个新的目录program用来放程序。在/program下创建2个文本hello.c 和Makefile,Makefile的M必须大写,不然之后会找不到这个文件。
#vi 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);
#vi Makefile命令
obj-m := hello.o
KERNELDIR := /lib/modules/3.6.10-4.fc18.i686/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)
注意:$(MAKE) 和rm前面不是空格,只能用tab键。
成功的话,我们在程序目录下用ls 命令就能 看到programmodules目录下产生了如下文件:
hello.c hello.mod.c hello.o modules.order
hello.ko hello.mod.o Makefile Module.symvers
其中hello.ko就是可加载的模块文件。
#insmod ./hello.ko 加载hello.ko到内核中
#lsmod |grep hello 查看当前所有驱动模块
#rmmod hello 移除hello模块
程序的输出结果我们可以用命令:cat /var/log/messages |tail -6 查看。
结束。