Linux构建代码树
1. 查看本Linux内核版本
在shell界面上使用“uname -a”命令即可查出内核版本。如下图:
2. 下载内核源码
在shell界面执行命令:apt-get install linux-source-内核版本号
下载完成后,在/usr/src/下会有一个源代码压缩包,如上执行命令,会生成linux-source-内核版本号.tar.bz2文件。
如上图的版本号则执行:apt-get install linux-source-2.6.32,下载完成后在/usr/src/下会有一个源代码压缩包linux-source-2.6.32.tar.bz2文件。
3. 到/usr/src/下,解压压缩包:
tar jxvf linux-source-2内核版本号.tar.bz2,完成后会生成名为“linux-source-版本号”的文件夹,所有源码都在里面。
4. 现在开始编译内核了,编译需要很多时间:
到/usr/src/下的代码目录中,执行命令:
#编译配置文件
make oldconfig
#开始编译
make #也可以不用这一步
make bzImage #注意,此处“I”为大写的“I”
#执行完上面这三个命令,可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x。
make modules
make modules_install
执行结束之后,会在/lib/modules下生成新的目录/lib/modules/2内核版本号/。 在随后的编译模块文件时,要用到这个路径下的build目录。至此,内核编译完成。
Linux内核驱动编译的方法
1. 编译内核程序需要的条件:在linux上构建好源码树以及写好内核源代码;此方法测试于内核版本为2.6.32的Linux系统上。
2. 在与程序源代码相同的目录下创建Makefile文件,Makefile文件并非完全如下,具体的是看程序源代码如何写,一般的内核程序源代码的Makefile文件的内容可如下:
obj-m :=程序源代码名.o
KERNELDIR:= /lib/modules/2.6.20/build
PWD :=$(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD)modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD)modules_install
3. 在shell界面上执行命令:
make -C /lib/modules/2.6.32/build M=程序源代码所在文件夹的路径
执行此命令便开始编译内核代码了
4. 执行编译好了的内核程序
必须用root权限:insmod ./程序源代码名.ko
代码的输出:如果不出现在终端则会写进 /var/log/syslog文件中。
附: 简单的Linux驱动程序
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("DualBSD/GPL");
static inthello_init(void)
{
printk(KERN_ALERT "Hello,world\n");
return 0;
}
static voidhello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruelworld\n");
}
module_init(hello_init);
module_exit(hello_exit);