编译内核和创建源码树

来源:互联网 发布:交通流仿真软件 编辑:程序博客网 时间:2024/06/07 09:11

1.1        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目录。至此,内核编译完成。

 

1.2        Linux内核驱动编译的方法

1.        编译内核程序需要的条件:在linux上构建好源码树以及写好内核源代码;此方法测试于内核版本为2.6.32Linux系统上。

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文件中。

1.3        附:简单的Linux驱动程序

#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);