本文參考文章地址:http://hi.baidu.com/donghaozheng/blog/item/02e1b231f0df64a25fdf0eea.html 本文參考友善之臂的MICRO2440用戶手冊 毛毛同學(xué)今天學(xué)習(xí)了驅(qū)動程序模塊的安裝與卸載,在這個過程中毛毛發(fā)現(xiàn),內(nèi)核的目錄中有許多的Kconfig、Makefile文件,但是毛毛不知道為什么需要這些文件,這些文件又是用來做什么的。下面我們就和陶毛毛同學(xué)一起來學(xué)習(xí)下這些文件的作用是什么。 Kconfig:一個文本形式的文件,其中主要作用是在內(nèi)核配置時候,作為配置選項。 .config:文件是在進(jìn)行內(nèi)核配置的時候,經(jīng)過配置后生成的內(nèi)核編譯參考文件。 Kconfig 1.先了解一下Kconfig的語法: 3. 目錄層次迭代 ---------------------------------------------------------------------------------------------- Makefile 頂層的Makefile文件讀取 .config文件的內(nèi)容,并總體上負(fù)責(zé)build內(nèi)核和模塊。Arch Makefile則提供補(bǔ)充體系結(jié)構(gòu)相關(guān)的信息。 s目錄下的Makefile文件包含了所有用來根據(jù)kbuild Makefile 構(gòu)建內(nèi)核所需的定義和規(guī)則。 Kbuild Makefile obj-y += foo.o 表示要由foo.c或者foo.s文件編譯得到foo.o并鏈接進(jìn)內(nèi)核,而obj-m則表示該文件要作為模塊編譯。 除了y,m以外的obj-x形式的目標(biāo)都不會被編譯。而更常見的做法是根據(jù).config文件的CONFIG_ 變量來決定文件的編譯方式(該變量如何起作用見文末另一篇文章的鏈接),如: 除了obj-形式的目標(biāo)以外,還有l(wèi)ib-y library庫,hostprogs-y 主機(jī)程序等目標(biāo),但是基本都應(yīng)用在特定的目錄和場合下。 例子說明: 下面我們以實例來說明這幾個文件的作用 Step1:編輯配置文件Kconfig,加入驅(qū)動選項,使之在make menuconfig 的時候出現(xiàn) 保存退出,這時在linux-2.6.32.2 目錄位置運(yùn)行一下make menuconfig 就可以在Device Step2:通過上一步,我們雖然可以在配置內(nèi)核的時候進(jìn)行選擇,但實際上此時執(zhí)行編譯內(nèi)核還是不能把mini2440_hello_module.c 編譯進(jìn)去的,還需要在Makefile 中把內(nèi)核配置選項和真正的源代碼聯(lián)系起來,打開linux-2.6.32.2/drivers/char/Makefile,如圖添加并保存退出:
Step3:這時回到linux-2.6.32.2 源代碼根目錄位置,執(zhí)行make modules,就可以生成我們所需要的內(nèi)核模塊文件 mini2440_hello_module.ko 了,如圖:至此,我們已經(jīng)完成了模塊驅(qū)動的編譯。 |
|