簡單內核模塊編譯

一般而言,驅動開發者會在內核源代碼的drivers 目錄內的相應子目錄中增加新設備驅動 的源代碼或者在arch/arm/mach-xxx 下新增加板級支持的代碼,同時增加或修改Kconfig 配置 腳本和 Makefile 腳本,那麼如何添加了?

在前面搭建了arm虛擬開發板,使用的內核是3.16的版本。

內核代碼的編寫都有一般的固定格式,基本包括模塊加載,卸載和GPL協議等,下面是一個簡單的內核模塊代碼hello.c:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>


static int __init hello_init(void)
{
    printk(KERN_INFO"Hello World\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO"Exit Module\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

將此代碼放置到內核源碼 drivers/i2c 目錄下

修改Make file 添加hello的編譯選項

然後到內核根目錄下編譯內核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- O=./out_vexpress_3_16 LOADADDR=0x60003000 uImage -j8

編譯完成後,可以在 out_vexpress_3_16/deivers/i2c下看到hello.o 的文件。

把新生成的uImage 放到tftp文件夾下,啓動虛擬開發板,可以看到在啓動打印的部分有

說明編寫的內核模塊已經加載。

這樣寫的內核模塊不規範,在make menuconfig 時,無法配置hello 模塊不編譯,爲了能在menuconfig 配置時有hello模塊的配置,需要秀給Kconfig,添加如下內容

其中 config 後面內容爲Makefile配置hello.o 等號前面顯示的內容,即配置選項,boolean爲menuconfig配置界面顯示的內容。default 是一個bool內型的變量,Y 編譯,N不編譯,M編譯爲模塊,即.ko文件,在此例中沒有M的配置。bool 後面的內容爲界面顯示選項後面的減短說明。help爲幫助信息。

配置後保存,然後make menuconfig 查看是否 有hello 的配置

若要是menuconfig配置的選項加載到內核編譯環境中去,還要修改Makefile的文件,將原先的y變爲$(HELLO_WORLD)

但這樣在原內核文件中添加文件不利於以後代碼的管理和優化,可以做到把自己寫的代碼單獨放置到一個文件中

在內核源碼的driver目錄下建立test的文件夾,樹形目錄爲

 在內核中添加目錄和子目錄時,需要爲新增的目錄和子目錄添加Kconfig 和 Makefile 文件,而且新增目錄的父目錄的Kconfig 和Makefile 也需要修改,以便新增的文件能被引用。

在test目錄下添加Kconfig

# Test driver Configuratioon

menu "TEST Driver"
comment "TEST Driver"

config CONFIG_TEST
    bool "TEST support"

config CONFIG_TEST_TWO
    tristate "Test two interface"
    depend on CONFIG_TEST

endmenu

 爲了使這個Kconfig起作用,修改上層目錄的Kconfig.增加

source "drivers/test/Kconfig" 

腳本中的source 意味着應用新的Kconfig文件。

同樣在test目錄下添加Makefile文件

#Makefile for TEST

obj-$(CONFIG_TEST) += test_three.o 
obj-$(CONFIG_TEST_TWO) += test_two.o

obj-$(CONFIG_TEST_ONE) += test_one/

 在test_one下添加Makefile

#Makefile for TEST—ONE

obj-$(CONFIG_TEST_ONE) += test_one.o

 修改test父目錄下的Makefile,添加如下腳本

obj-$(CONFiG_TEST) += test/

添加完畢後test目錄結構爲

回到內核根目錄,make menuconfig查看

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章