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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章