Linux编译内核

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

发布了30 篇原创文章 · 获赞 11 · 访问量 5万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章