在完成了驅動程序代碼的編寫之後,接下來的任務就是編譯。linux內核編譯的過程是通過內核源碼的根目錄和各子目錄中的Makefile分級管理的。其中根目錄的Makefile是最重要的,它可以看成是其他Makefile最初的入口。它負責定義所有與體系結構無關的變量和目標,讀取.config文件,並根據其信息最終生成vmlinux(elf格式的Linux內核)和modules(模塊)。make通過向下遞歸調用子目錄下的Makefile來編譯這兩個目標。
通常希望把驅動程序放在內核裏,在配置內核時可以自由裁剪。這需要對內核配置腳本Kbuild有一定得了解。具體可以參考內核源碼中的Documentation/kbuild目錄下的相關文檔
Kbuild是一組很容易使用的腳本。通常只需要關心個目錄下的兩個文件:Kconfig(2.6內核)和Makefile。
以hello模塊爲例
step1:代碼編寫
mini2440_hello_module.c 放置的位置/opt/FriendlyARM/mini2440/linux2.6.29/drivers/char
代碼如下
/**********************************************************************************************/
/*文件:mini2440_hello_module.c */
/*簡介:HelloWorld */
/***********************************************************************************************/
#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_module_init(void)
{
printk(KERN_ALERT"Hello,world/n");
return 0;
}
static void hello_module_exit(void)
{
printk(KERN_ALERT"Goodbye, world/n");
}
module_init(hello_module_init);
module_exit(hello_module_exit);
step2: 在char 目錄下打開Kconfig(可以理解爲是內核的配置腳本)
添加
config MINI2440_HELLO_MODULE
tristate "Mini2440/QQ2440 module sample"
depends on ARCH_S3C2440
default m if MACH_FRIENDLY_ARM_MINI2440
help
mini2440/QQ2440 module_sample
step 3:然後進入linux 2.6.29 目錄下
$make menuconfig
在出現的頁面下選擇device Drivers---> 回車
Character devices 回車
選中 Mini2440/QQ2440 module1 sample
按空格鍵進行切換到M
則配置完成
step 4 : drivers/char目錄下
打開Makefile文件
添加內容如下
obj-$(CONFIG_MINI2440_HELLO1_MODULE) += mini2440_hello1_module.o
step 5: 在linux 2.6.29目錄下
輸入命令 $make modules
則對內核中所有配置爲模塊的驅動程序進行編譯了