談論內核的Makefile,Kconfig和.config文件

        有許多Linux內核源文件。

        我不了解Makefile,Kconfig和.config之間的關系。

        我不了解內核編譯系統。

        如果在編譯和修改內核時遇到問題,我將無法開始。

        我不知道如何編譯寫入內核的驅動程序或如何配置內核。

        這些問題都與Makefile,Kconfig和.config有關。

        讓我們簡要地談一下Makefile,Kconfig和.config。

        希望能激發您的靈感。

        三個角色:簡單地說,去餐廳點餐:Kconfig是菜單,Makefile是練習,.config是您點的食物。

        Makefile:文本文件,一種編譯源文件的方法。

        Kconfig:一個文本文件,內核的配置菜單。

        .config:編譯內核所基于的配置。

        三個Makefile引用的語法:linux-3.4.2 / drivers / Makefile功能:用于定義將哪些內容編譯為模塊,執行哪些條件編譯等。

        子目錄Makefile包含在頂部的Makefile中。

        (1)直接編譯obj-y + = xxx.o表示xxx.o由xxx.c或xxx.s編譯并直接編譯到內核中。

        (2)條件編譯obj-$(CONFIG_HELLO)+ = xxx.o確定是否根據.config文件的CONFIG_XXX將文件編譯到內核中。

        (3)模塊編譯obj-m + = xxx.o表示xxx被編譯為模塊,即在執行make模塊時將其編譯。

        2. Kconfig每個config菜單項都有類型定義:布爾類型,三態(內置,模塊,已刪除),字符串字符串,十六進制十六進制,整數整數。

        功能:確定在進行menuconfig時顯示的菜單項,請參閱:linux-3.4.2 / drivers / leds / kconfig:config LEDS_S3C24XX三態“ Samsung S3C24XX GPIO LED的LED支持”。

        取決于LEDS_CLASS是否啟用對LED的支持該ARCH_S3C24取決于與Samsung S3C24XX系列CPU(例如S3C2410和S3C2440)上的GPIO線連接的ARCH_S3C24。

        LEDS_S3C24XX:配置選項的名稱,前綴“ CONFIG_”。

        被省略。

        Tristate:指示該項目是被編程到內核還是模塊中。

        顯示為:如果選擇編譯為內核模塊,則將在.config中生成CONFIG_HELLO_MODULE = m的配置,如果選擇Y,則將其直接編譯到內核中,并使用CONFIG_HELLO_MODULE =的配置項y將在.config中生成。

        Tristate之后的字符串是在make menuconfig期間顯示的配置項目的名稱。

        布爾:只能選擇或不選擇此類型。

        它在make menuconfig中顯示為[],這意味著它不能配置為模塊。

        取決于:此選項取決于另一個選項。

        僅選擇從屬項時,將出現在當前配置項目的提示消息,并將當前配置項可以被設置。

        選擇:反向依賴性。

        選擇此選項時,將同時選擇在選擇之后定義的項目。

        help:幫助信息。

        目錄層次結構迭代:Kconfig中有一個類似的語句:源“ drivers / usb / Kconfig”,用于包含(或嵌套)新的Kconfig文件,因此每個目錄都可以管理其自己的配置內容,因此沒有必要將這些配置寫入同一文件中,可以方便地進行修改和管理。

        3. .config參考:linux-3.4.2 / .config通過分析前兩個文件,.config的含義很明確:內核編譯參考文件,檢查其中的內容以了解哪些驅動程序被編譯到內核中。

        有3種配置內核的方法(選擇一種):(1)make menuconfig(2)make xxx_defconfig(3)直接修改.config注意:如果直接修改.config,它可能不會生效,因為某些配置可能具有依賴關系,Make將根據依賴關系檢查規則,有時直接修改.config無效,因此不建議直接修改它。

        上面的內容可能有點抽象,下面的示例說明了這一點:編寫一個簡單的入口函數以輸出hello world驅動程序并將其編譯到內核中。

        步驟:(1)在驅動程序目錄中創建一個新的hello文件夾,該文件夾實現了hello.c,Makefile和Kconfig。

        hello.c:#include #include #include static int first_drv_init(void){printk(“ ------------------ hello world!-------- ------------"); return 0;} static void first_drv_exit(void){printk(“ ------------------退出hello world!------------- -------");} module_init(first_drv_init); module_exit(first_drv_exit); MODULE_LICENSE(“ GPL”);生成文件:obj-$(CONFIG_HELLO)+ = hello.o Kconfig:配置HELLO Tristate“ Hello World for fengyuwuzu”幫助幫助配置HELLO確定名稱:CONFIG_HELLO。

        fengyuwuzu的Hello World:確定make menuconfig時顯示的名稱(2)修改上層的Makefile和Kconfig(在Linux-3.4.2 / drivers下)。

        產品知識/行業、品牌資訊


        主站蜘蛛池模板: 亚洲香蕉久久一区二区三区四区| 亚洲一区二区三区影院| 亚洲片一区二区三区| 亚洲国产日韩在线一区| 国产一区二区在线|播放| 亚洲午夜在线一区| 波多野结衣AV无码久久一区| 国产中的精品一区的| 无码人妻aⅴ一区二区三区| 亚洲av成人一区二区三区 | 国产精品99无码一区二区| 国产精品福利一区二区| 国产午夜福利精品一区二区三区 | 无码日本电影一区二区网站| 亚洲综合无码AV一区二区 | 精品日产一区二区三区手机| 亚洲国产综合无码一区二区二三区| 日韩一区二区三区电影在线观看| 精品午夜福利无人区乱码一区| 无码人妻AV免费一区二区三区| 东京热无码一区二区三区av| 亚洲AV成人精品日韩一区18p| 日本精品一区二区三区视频| 无码人妻一区二区三区免费| 成人精品一区二区电影| 亚洲爆乳精品无码一区二区| 在线欧美精品一区二区三区| 人妖在线精品一区二区三区| 国产香蕉一区二区精品视频| 亚洲熟妇无码一区二区三区| 精品人伦一区二区三区潘金莲| 一区二区三区福利视频免费观看| 天堂国产一区二区三区| 麻豆天美国产一区在线播放| 91大神在线精品视频一区| 91video国产一区| 亚洲AV日韩综合一区| 国产无人区一区二区三区| 精品不卡一区中文字幕| 久久免费视频一区| 亚洲国产一区二区三区青草影视 |