将驱动编译进Linux内核

核心配置文件

  • .config:该文件位于Linux内核源代码顶层目录,为隐藏文件。用于配置Linux内核中的模块。在.config文件中可以对Linux驱动进行三方面的配置:编译成驱动模块文件、编译进内核和从内核去除。可以手工修改,也可以使用make menuconifg命令用菜单方式进行配置。
  • Kconifg:该文件主要用于定义make menuconifg命令的显示的菜单,除此之外,Kconifg文件还可以导入位于其他目录的Kconifg文件。make命令通过Kconfig文件的递归引用,可以找到Linux内核中的所有Kconfig文件,从而建立一个完整的配置菜单。
  • Makefile:一般与Kconfig同时出现。每有一个Kconfig文件,就必须有一个Makefile文件。该文件用于指定如何编译Makefile文件所在目录的源代码。

例:由于word_count属于字符驱动,所以可以使用如下步骤加入Linux内核源代码树

第1步:将word_count.c文件放入Linux内核源代码

将word_count.c文件放入< Linux内核目录 >/driver/char目录中。

第2步,修改Kconfig文件

打开/root/kernel/goldfish/driver/char/Kconifg 文件,找到endmenu,在endmenu前面添加如下代码。

conifg WORD_COUNT
    bool "word_count driver"
    help
        this is a word count driver. It can get a word count from /dev/wordcount

每一个具体的模块都会对应一个Shell变量来保存该模块的3个编译行为(生成.ko文件、编译进内核或从内核中去除)。conifg后面的字符串将作为Shell变量名的后半部分,前半部分是CONFIG_(所以是CONIFG_WORD_COUNT),该值会保存在.config中。

第3步,修改Makefile文件

打开/root/goldfish/drivers/char/Makefile文件。在任意位置插入如下内容

obj-$(CONFIG_WORD_COUNT)    += word_count.o

obj-后面使用了第2步产生的CONFIG_WORD_COUNT变量,而不是使用固定的值。make命令在编译Linux内核时会将该变量替换成相应的值.

第4步,设置.config文件

.config可以通过手工配置,也可以通过make menuconfig在菜单中进行配置。这里采用菜单配置的方法。进入内核顶层目录,执行make menuconfig显示配置菜单,并进入“Device” > “Character devices”子菜单,找到“wordcountdriver”菜单项,按空格将该菜单项前设置成星号(*)。然后退出并保存。

第5步,编译Linux内核

使用make命令进行编译。

编译之后的/dev/word_count可能没有读写权限。如果要改动/dev/一些设备的权限,可以把chmod 777写在init.rc文件中。但是要注意写的位置,不能太早执行,不能写在early-init段内,因为那时/dev/的设备节点还没有被创建。

原文地址:https://www.cnblogs.com/dddlion/p/3310787.html