Linux驅動的配置和編譯腳本

  在完成了驅動程序代碼的編寫之後,接下來的任務就是編譯。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
則對內核中所有配置爲模塊的驅動程序進行編譯了

 

發佈了31 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章