在解决这个问题之前,我们先搞明白linux究竟是怎样管理源码中上万个文件的。
我们看Linux源码的目录,十分科学,基本上看到目录就可以猜到里面放的什么,那怎么把文件连接起来,靠的就是Kconfig,它可以告知Makefile那些编译那些不编译。
第一步:在driver目录下新建一个my_dr/hello目录,主要存放自己编写的内核驱动代码。当执行make menuconfig 时,能够找到自己编写的代码。
目录如图所示:
第二步:编辑hello目录下的Kconfig,Makefile文件如下图:
左边为Kconfig文件,右边是Makefile文件,如果变量CONFIG_HELLO为真或假,则判断是否编译hello.c为hello.o,CONFIG_HELLO变量值来自于.config文件的配置。.config文件的配置又来源于通过Kconfig文件的显式选择,在Kconfig文件中config为配置关键词,HELLO为配置项,tristate为三态选择器
第三步:编译my_dr目录下的Kconfig和Makefier
上图是Kconfig,对于这个文件来说,必须要建立一个菜单,对应各个对应的驱动程序,可以方便找到子目录下的Kconfig资源
最后一步:找到driver目录下的Kconfig,在里面添加 “source drivers/my_dr/Kconfig”
在当前目录的Makefile中添加 “obj-y +=my_dr/”
有时候我们会看到"obj-$(CONFIG_CATOR) +=gator/"这样的表述,意思是只有配置了CONFIG_CATOR变量gator目录的文件才可以显示的选择。