Linux下把驱动编译进内核 -5

Posted 杨斌并

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux下把驱动编译进内核 -5相关的知识,希望对你有一定的参考价值。

Linux下把驱动编译进内核

1.source “drivers/redled/Kconfig”

  • 他会包含drivers/redled/这个路径下的驱动文件,方便我们对菜单进行管理

2.config LED_4412

  • 配置选项的名称,CONFIGLED 4412

3.tristate表示的驱动的状态,把驱动编译成模块,把驱动编译到内核,不编译 与之对应的还有bool分别是编译到内核,不编译

  • “Led Support for GPlO Led” make menuconfig显示的名字
  • A depends on B 表示只有在选择B的时候才可以选择A

4.比如我想直接去掉LED相关的去掉,我们直接改.config文件可以吗? 可以,但是不推荐。如果有依赖的话,直接修改.config是不成功的。

5.select

  • 反向依赖,改选项被选中时,后面的定义也会被选中。

6.help

  • This option enable support for led
  • 帮助信息

步骤 :

二. 如何添加模块到内核

实际上,我们需要做的工作可简述如下:

(1)将编写的模块或驱动源代码(比如是XXOO)复制到Linux内核源代码的相应目录。

(2)在该目录下的Kconfig文件中依葫芦画瓢的添加XXOO配置选项。

(3)在该目录的Makefile文件中依葫芦画瓢的添加XXOO编译选项。

可以看到,我们奉行的原则是“依葫芦画瓢”,主要是添加。

一般的按照上面方式又可出现两种情况,一种为给XXOO驱动添加我们自己的目录,一种是不添加目录。两种情况的处理方式有点儿不一样哦。

三. 不加自己目录的情况

(1)把我们的驱动源文件(xxoo.c)放到对应目录下,具体放到哪里需要根据驱动的类型和特点。这里假设我们放到./driver/char下。

  • ​ 创建hello 文件夹
  • ​ 将驱动helloworld.c 放到 该文件加下
  • ​ 然后创建Makefile文件
      obj-$(CONFIG_HELLO) += helloworld.o
  • 然后创建Kconfig文件
config HELLO
	tristate "hello world"
	help
	hello hello

(2)然后我们修改./driver/char下的Kconfig文件,依葫芦添加即可,如下所示:

source "drivers/char/hello/Kconfig"

Kconfig 中添加自己的驱动模块,以方便配置

注意这里的LT_XXOO这个名字可以随便写,但需要保持这个格式,他并不需要跟驱动源文件保持一致,但最好保持一致,等下我们在修改Makefile时会用到这个名字,他将会变成CONFIG_LT_XXOO,那个名字必须与这个名字对应。如上所示,tristate定义了这个配置选项的可选项有几个,help定义了这个配置选项的帮助信息,具体更多的规则这里不讲了。

(3)然后我们修改./driver/char下的Makefile文件,如下所示:

obj-y                           += hello/

Makefile中添加自己的驱动模块,以方便编译

这里我们可以看到,前面Kconfig里出现的LT_XXOO,在这里我们就需要使用到CONFIG_XXOO,实际上逻辑是酱汁滴:在Kconfig里定义了LT_XXOO,然后配置完成后,在顶层的.config里会产生CONFIG_XXOO,然后这里我们使用这个变量。

到这里第一种情况下的添加方式就完成了。

四. 添加自己目录的情况

(1)在源码的对应目录下建立自己的目录(xxoo),这里假设为/drivers/char/xxoo 。

(2) 把驱动源码放到新建的xxoo目录下,并在此目录下新建Kconfig和Makefile文件。然后给新建的Kconfig和Makefile添加内容。

Kconfig下添加的内容如下:

这个格式跟之前在Kconfig里添加选项类似。

Makefile里写入的内容就更少了:

添加这一句就可以了。

(3)第三也不复杂,还是依葫芦画瓢就可以了。

我们在/drivers/char目录下添加了xxoo目录,我们总得在这个配置系统里进行登记吧,哈哈,不然配置系统怎么找到们呢。由于整个配置系统是递归调用滴,所以我们需要在xxoo的父目录也即char目录的Kconfig和Makefile文件里进行登记。具体如下:

a). 在drivers/char/Kconfig中加入:source “drivers/char/xxoo/Kconfig”

b). 在drivers/char/Makefile中加入:obj-$(CONFIG_LT_XXOO) += xxoo/

添加过程依葫芦画瓢就可以了,灰常滴简单。

以上是关于Linux下把驱动编译进内核 -5的主要内容,如果未能解决你的问题,请参考以下文章

linux内核模块编译makefile

Linux模块编程框架

Linux驱动开发--设备驱动基础笔记 1

手动制作mini linux详细步骤—之一

Linux驱动实践:带你一步一步编译内核驱动程序

Linux驱动实践:带你一步一步编译内核驱动程序