【转】Kconfig,Makefile 和 .config
原文網(wǎng)址:http://blog.csdn.net/nxh_love/article/details/11846861
最新在做Sensor驅(qū)動(dòng)移植的時(shí)候,發(fā)現(xiàn)了Android driver 中有Kconfig,Makefile文件。在查看編譯后的文件時(shí),又發(fā)現(xiàn)還存在.config文件。自己對(duì)這幾個(gè)文件不明白,用度娘來(lái)整理下網(wǎng)友對(duì)這幾個(gè)文件的理解。
? ? ? ? 分布在各目錄下的Kconfig構(gòu)成了一個(gè)分布式的內(nèi)核配置數(shù)據(jù)庫(kù),每個(gè)Kconfig分別描述了所屬目錄源文件相關(guān)的內(nèi)核配置菜單。在內(nèi)核配置make menuconfig(或xconfig等)時(shí),從Kconfig中讀出配置菜單,用戶配置完后保存到.config(在頂層目錄下生成)中。在內(nèi)核編譯時(shí),主Makefile調(diào)用這個(gè).config,就知道了用戶對(duì)內(nèi)核的配置情況。Kconfig就是對(duì)應(yīng)著內(nèi)核的配置菜單。假如要想添加新的驅(qū)動(dòng)到內(nèi)核的源碼中,可以通過(guò)修改Kconfig來(lái)增加對(duì)我們驅(qū)動(dòng)的配置菜單,這樣就有途徑選擇我們的驅(qū)動(dòng),假如想使這個(gè)驅(qū)動(dòng)被編譯,還要修改該驅(qū)動(dòng)所在目錄下的Makefile。
Kconfig
? ? 先來(lái)看下一個(gè)相對(duì)完整的Kconfig文件:
?
[html]?view plaincopy1.語(yǔ)法:
? ? ? ? ? ?config ? symbol
? ? ? ? ? ? ? ? ? ? ? ? ?options
? ? ? ? ? ?symbol是一個(gè)新的標(biāo)記的菜單項(xiàng),options是在這個(gè)新的菜單項(xiàng)下的屬性和選項(xiàng)。
?
2.菜單結(jié)構(gòu):
? ? ? ? ? 配置文件描述了菜單選項(xiàng),每行都是以一關(guān)鍵字開頭(除了幫助信息)。下面的關(guān)鍵字結(jié)束一菜單選項(xiàng):
? ? ? ? ?- config
? ? ? ? - menuconfig
? ? ? ? - choice/endchoice
? ? ? ? - comment
? ? ? ? - menu/endmenu
? ? ? ? - if/endif
? ? ? ? - source
2.options類型定義:
? ? ? ? 每個(gè)config菜單項(xiàng)都要有類型定義:bool布爾類型、 tristate三態(tài)(內(nèi)建、模塊、移除)、 string字符串、 hex十六進(jìn)制、 integer整型。
? ? ? ? 例如:
[html]?view plaincopy? ? ? ? ?bool類型的只能選中或不選中,tristate類型的菜單項(xiàng)多了編譯成內(nèi)核模塊的選項(xiàng),如果選擇編譯成內(nèi)核模塊,則會(huì)在.config中生成一個(gè)CONFIG_CALI_NONEE=m的配置,如果選擇內(nèi)建,就是直接編譯成內(nèi)核影響,就會(huì)在.config中生成一個(gè)CONFIG_CALI_NONE=y的配置.
3.依賴型定義depends on或requires
? ? ? ? ? ?指此菜單的出現(xiàn)與否依賴于另一個(gè)定義
? ? ? ? ? 這個(gè)例子表明SENSORS_LSM303D這個(gè)菜單項(xiàng)只I2C有效。
4.select與depends on是相反的邏輯關(guān)系。
? ? ? ? ? ?A depends on B
? ? ? ? ? ?那么只有在B選中才能選A
? ? ? ? ? ?A select B
? ? ? ? ? 那么只要選中A就會(huì)選中B
5.幫助性定義
? ? ? ? ? ?只是增加幫助用關(guān)鍵字help或者---help---,"---help---" 和 "help" 在實(shí)現(xiàn)的作用上沒有區(qū)別,"---help---" 有助于將文件中的配置邏輯與給開發(fā)人員的提示分開。
6.prompt?--輸入提示
Makefile
1.頂層的Makefile文檔讀取 .config文檔的內(nèi)容,并總體上負(fù)責(zé)build內(nèi)核和模塊。
2.Arch Makefile則提供補(bǔ)充體系結(jié)構(gòu)相關(guān)的信息。?
3.scripts目錄下的Makefile文檔包含了任何用來(lái)根據(jù)kbuild Makefile 構(gòu)建內(nèi)核所需的定義和規(guī)則。
? ? ? ? ? ? 其中.config的內(nèi)容是在make menuconfig的時(shí)候,通過(guò)Kconfig文檔配置的結(jié)果,在/Documentation/kbuild目錄下有詳細(xì)的介紹有關(guān)kernel makefile的知識(shí)。
舉個(gè)例子:
假設(shè)想把G-sensor LSM303D驅(qū)動(dòng)code加載到工程中,配置內(nèi)核時(shí)該怎么辦呢?
1:將您寫的lsm303d.c 文檔添加到/driver/misc/ 目錄下。
2:修改/driver/misc/ 目錄下的kconfig文檔:
3:修改該目錄下makefile文檔。
添加code:
從上述分析知道CONFIG_SENSORS_LSM303D 是從.config 中讀出的。
4.配置kernel下configs/XXXX_defconfig文件
添加code:
當(dāng)您編譯內(nèi)核時(shí),將會(huì)讀取.config文檔,當(dāng)發(fā)現(xiàn)CONFIG_SENSORS_LSM303D=y,系統(tǒng)在調(diào)用/driver/misc下的makefile 時(shí),將會(huì)把 lsm303d.o 加入到內(nèi)核中。即可達(dá)到您的目的。
?
?
主要參考文章:http://blog.sina.com.cn/s/blog_4a377e150100c896.html
轉(zhuǎn)載于:https://www.cnblogs.com/wi100sh/p/4613584.html
總結(jié)
以上是生活随笔為你收集整理的【转】Kconfig,Makefile 和 .config的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php面向对象中的魔术方法中文说明
- 下一篇: cordova 学习笔记