談論內核的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下)。

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


        主站蜘蛛池模板: 国产一区二区三区在线2021| 无码精品人妻一区二区三区漫画| 午夜福利国产一区二区| 亚洲熟妇无码一区二区三区| 国产精品自拍一区| 亚洲av福利无码无一区二区| 亚洲图片一区二区| 国产乱码精品一区二区三区中 | 久久99国产一区二区三区| 国产精品一级香蕉一区| 国产精品第一区揄拍无码| 免费人妻精品一区二区三区| 中日韩一区二区三区| 美女一区二区三区| 日韩人妻一区二区三区免费| 在线免费观看一区二区三区| 国产在线一区视频| 久久人妻内射无码一区三区| 麻豆AV无码精品一区二区| 一本一道波多野结衣AV一区| 国产美女av在线一区| 夜夜添无码试看一区二区三区| 亚洲av无码一区二区三区网站| 99精品国产高清一区二区麻豆| 亚洲爆乳精品无码一区二区 | 日韩精品免费一区二区三区| 无码少妇一区二区浪潮免费| 人妻体内射精一区二区三四| 国产成人一区二区三区视频免费| 波多野结衣的AV一区二区三区 | 国产精品成人一区无码| 69福利视频一区二区| 国产精品视频一区二区三区四| 四虎精品亚洲一区二区三区| 国产精品va一区二区三区| 在线日韩麻豆一区| 中文字幕乱码一区二区免费| 秋霞日韩一区二区三区在线观看 | 日韩精品免费一区二区三区| 国产一区二区在线| 高清国产精品人妻一区二区|