如何将驱动或模块编译进内核

如何将驱动或模块编译进内核

我们知道若要给linux内核添加模块(驱动)有如下两种方式:

1)动态方式:采用insmod命令来给运行中的linux加载模块。

2)静态方式修改linux的配置菜单,添加模块相关文件到源码对应目录,然后把模块直接编译进内核。

对于动态方式,比较简单,下面我们介绍如何采用静态的方式把模块添加到内核。

最终到达的效果是:在内核的配置菜单中可以配置我们添加的模块,并可以对我们添加的模块进行编译。

内核的配置系统组成

首先我们要了解Linux 2.6内核的配置系统的原理,比如我们在源码下运行“make menuconfig ”为神马会出现一个图形配置菜单,配置了这个菜单后又是如何改变了内核的编译策略滴。

内核的配置系统一般由以下几部分组成:

1Makefile分布在Linux内核源代码中的Makefile,定义Linux内核的编译规则。

2)配置文件(Kconfig)给用户提供配置选项,修改该文件来改变配置菜单选项。

3)配置工具包括配置命令解释器(对配置脚本中使用的配置命令进行解释),配置用户界面(提供字符界面和图形界面)。这些配置工具都是使用脚本语言编写的,如Tcl/TKPerl等。

其原理可以简述如下:这里有两条主线,一条为配置线索,一条为编译线索。配置工具根据kconfig配置脚本产生配置菜单,然后根据配置菜单的配置情况生成顶层目录下的.config,在.config里定义了配置选择的配置宏定义,如下所示:


如上所示,这里定义的这些配置宏变量会在Makefile里出现,如下所示:


然后make 工具根据Makefile里这些宏的赋值情况来指导编译。所以理论上,我们可以直接修改.configMakefile来添加模块,但这样很麻烦,也容易出错,下面我们将会看到,实际上我们有两种方法来很容易的实现。

如何添加模块到内核

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

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

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

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

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

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

不加自己目录的情况

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

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


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

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


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

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

添加自己目录的情况

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

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

Kconfig下添加的内容如下:


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

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

添加这一句就可以了。

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

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

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

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

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

好了,到这里如何给内核添加我们自己的模块或驱动就介绍完了。哈哈。。。


注:本文地址-http://blog.csdn.net/MARZ07101


  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值