linux开发の如何静态的将驱动模块编译进内核

2019-07-12 21:10发布

在解决这个问题之前,我们先搞明白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目录的文件才可以显示的选择。