Kconfig解析
編譯內核時用于配置的Kconfig文件
以內核中的ttyprintk.c為例,其位于/kernel-sources/dirver/char/ttyprintk.c
如何將其編譯進內核?
在char目錄下有Kconfig文件,其中有如下內容
tristate 表示該模塊可以選擇 Y N M(以.ko形式),后面為該模塊的描述,
如果是bool則表示該模塊只能選擇 Y Ndepends on EXPERT && TTY 表示依賴關系,其同時依賴EXPERT 和 TTY default n 表示默認為關閉help下面的內容為提醒信息,在menuconfig中找到該模塊,鍵入?可以查看help如下圖
如何編譯進內核?
當在menuconfig配置為yes后,會在.config中生成相關配置,以ttyprintk為例,在.config中會生成以下內容
CONFIG_TTY_PRINTK=y
在內核代碼中會有以下內容
#ifdef CONFIG_TTY_PRINTK
// 相關的代碼,當 CONFIG_TTY_PRINTK 被定義時編譯
#endif
在ttyprintk.c的同級Makefile中有
obj-$(CONFIG_TTY_PRINTK) += ttyprintk.o
CONFIG_TTY_PRINTK被定義為y,因此會編譯ttyprintk.o
添加自己的驅動代碼目錄和子目錄
如何添加自己的驅動代碼,結構如在
在char下添加test目錄,其中test.c為main函數文件,在Kconfig中配置如下
Makefile如下