# [AIdrifter CS 浮生筆錄](https://hackmd.io/s/rypeUnYSb) <br> Kconfig ## 文件作用 ```shell Kconfig ---> (每個源碼目錄下)提供選項 .config ---> (源碼頂層目錄下)保存選擇結果 Makefile---> (每個源碼目錄下)根據.config中的內容來告知編譯系統如何編譯 ``` ## How to use it ? ### Step 1 配置kconfig - 在driver目錄下面新建目錄 ```shell mkdir driver/test ``` - 在test directory創`kconfig` ```make config TEST bool "Test driver" help this is for test !! ``` ### Step2 配置makefile - 在test directory創`Makefile` ```shell obj-$(CONFIG_TEST) += test.o ``` ```shell Obj-$(CONFIG_選項名) += xxx.o /*當CONFIG_選項名=y時,表示對應目錄下的xxx.c將被編譯進內核 當CONFIG_選項名=m時對應目錄下的xxx.c將被編譯成模塊*/ ``` ### Stpe 3 配置上層目錄的makefile與kconfig - 在上一層目錄的kconfig中 - 將test文件夾的kconfig加入search 目錄 ```make menu "Device Drivers" source "drivers/test/kconfig" ``` - 在上一層目錄的makefile中 ```make # # makefile for linux kernel device drivers. # obj-y += irqchip/ obj-y += bus/ obj-y += test/ ``` ## Kconfig語法介紹 ### Choice multiple items ```make choice --->表示選擇列表 prompt "Default I/O scheduler" //主目錄名字 default DEFAULT_CFQ //默認CFQ help Select the I/O scheduler which will be used by default for all block devices. config DEFAULT_DEADLINE bool "Deadline" if IOSCHED_DEADLINE=y config DEFAULT_CFQ bool "CFQ" if IOSCHED_CFQ=y config DEFAULT_NOOP bool "No-op" endchoice ```