Linux内核源码中广泛分布着两种文件:Kconfig和Makefile,那么这两种文件的作用具体是什么呢?
Makefile文件:
先说Makefile吧,Linux内核中Makefile主要分为以下几类:
1)Linux/Makefile(http://lxr.linux.no/linux+v2.6.36/Makefile):控制Linxu内核源码整体的编译选项,包括汇编器、c语言编译器的选择、引用.config文件等。
2).config文件:在编译Linxu内核时,运行完make menuconfig命令后,会产生一个.config文件,里面包含了用户选择的模块编译开关。
3)Linux/arch目录下的Makefile:包含与体系结构相关的选项。
4)Linux/script目录下的Makefile:一些Makefile通用的规则。
5)Kbulid Makefile:这种Makefile文件是Linux内核源码中最常见的一种Makefile文件,它的语法为:
obj-y或obj-m或obj-x += 目标文件.o
目标文件-objs := 目标文件1.o 目标文件2.o 目标文件3.o
这样就把三个目标文件1.o、目标文件2.o、目标文件3.o编译生成了一个目标文件.o。
(obj-y是编译进内核的,obj-m是被编译成模块、obj-x是不被编译进内核)
Kconfig文件:
当你使用make menuconfig编译内核的时候,会产生很多编译选项让用户选择,那么这些编译选项是怎么产生的呢?
make menuconfig命令使用Kconfig文件生成.config文件,然后.config文件会被Makefile引用,Kconfig文件的语法是:
例如:
menuconfig USB_SUPPORT bool "USB support" depends on HAS_IOMEM default y
---help--- This option adds core support for Universal Serial Bus (USB). You will also need drivers from the following menu to make use of it
endmenu
USB_SUPPORT是菜单选项,bool是菜单选项的类型,一般有bool、tristate等,bool表示[],只能选择编译进内核或不编译进内核、
tristate表示<>,可以选择编译成模块。
(通过查看Kconfig文件我们就可以选择自己感兴趣的内核源码去阅读,这样可以事倍功半)。