2.3内核配置实例
对于一个开发者来说,将自己开发的内核代码加入到Linux内核中,需要有3个步骤。
·首先,确定把自己开发代码放入到内核的位置;
·其次,把自己开发的功能增加到Linux内核的配置选项中,使用户能够选择此功能;
·最后,构建子目录Makefile,根据用户的选择,将相应的代码编译到最终生成的Linux 内核中去。
以下通过一个简单的例子--test driver,结合前面学过的知识,来说明如何向Linux内核中增加新的功能。
1.源代码目录结构
添加自己的源代码,将test driver文件夹放置在drivers/test/目录下,其目录结构如下:
2.配置文件说明
(1)drivers/test/Config.in文件。
由于test driver对于内核来说是新的功能,所以首先创建一个菜单TEST Driver。然后,显示“TEST support”,等待用户选择;接下来判断用户是否选择了TEST Driver,如果是(CONFIG_TEST=y),则进一步显示子功能:用户接口与CPU功能支持;由于用户接口功能可以被编译成内核模块,所以这里的询问语句使用了tristate(因为tristate的取值范围包括Y、n和m,m就是对应着模块)。
(2)arch/arm/config.in。
在文件的最后加入:source drivers/test/Config.in,将TEST Driver子功能的配置纳入到Linux内核的配置中。
3.Makefile文件说明
(1)drivers/test/Makefile文件。
drivers/test目录下最终生成的目标文件是test.a。由于在test.C和test-client.C中使用了EXPORT_SYMBOL输出符号,所以test.O和test-client.O位于export-objs列表中。然后,根据用户的选择(具体来说,就是配置变量的取值),构建各自对应的obj-*列表。由于TESTDriver中包一个子目录cpu,当CONFIG_TEST_CPU=y(即用户选择了此功能)时,需要将cpu目录加入到subdir-y列表中。
(2)drivers/test/cpu/Makefile文件说明。
(3)drivers/Makefile文件修改。
在drivers/Makefile中加入subdir-$(CONFIG_TEST)+=test,使得在用户选择TESTDriver功能后,内核编译时能够进入test目录。
(4)顶层Makefile文件修改。
在顶层Makefile中加入DRIVERS-$(CONFIG_TEST)+=drivers/test/test.a和DRIVERS-$(CONFIG_TEST_CPU)+=drivers/test/cpu/test_cpu.a。如果用户选择了TEST Driver,那么CONFIG_TEST和CONFIG_TEST_CPU都是Y,test.a和test_cpu.a就都位于DRIVERS-Y列表中,然后又被放置在DRIVERS列表中。在前面曾经提到过,Linux内核文件vmlinux的组成中包括DRIVERS,所以test.a和test_cpu.a最终可被链接到vmlinux中。
关于驱动程序源代码本处不再介绍。