談論內核的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一区二区| 久久精品午夜一区二区福利| 国产福利电影一区二区三区,亚洲国模精品一区 | 狠狠色婷婷久久一区二区三区 | 高清国产AV一区二区三区| 国产SUV精品一区二区88L| 99精品一区二区三区无码吞精 | 美女免费视频一区二区三区| 一色一伦一区二区三区| 麻豆AV一区二区三区久久| 熟妇人妻AV无码一区二区三区| 国产伦一区二区三区高清 | 亚拍精品一区二区三区| 亚洲国产成人一区二区三区| 中文字幕日韩一区二区三区不| 国产传媒一区二区三区呀| 精品国产亚洲第一区二区三区| 日韩在线一区二区| 性色AV一区二区三区天美传媒| 3d动漫精品啪啪一区二区中文| 日本成人一区二区| 久久久国产精品一区二区18禁| 日本精品高清一区二区| 色综合视频一区二区三区| 白丝爆浆18禁一区二区三区| 波多野结衣av高清一区二区三区| 在线视频亚洲一区| 国产品无码一区二区三区在线| 无码福利一区二区三区| 在线成人一区二区| 波多野结衣中文一区| 精品亚洲一区二区三区在线播放| 好爽毛片一区二区三区四| 亚洲色大成网站www永久一区 | 海角国精产品一区一区三区糖心 | 国产精品视频一区| 日韩在线视频不卡一区二区三区| 国内精自品线一区91|