如何增加内核模块

Kconfig

1.先了解一下Kconfig的语法: 

一个典型的内核配置菜单如下: menu "Network device support"  config NETDEVICES          bool "Enable Net Devices"          depends on NET          default y         help                 This is help desciption。  ...  endmenu 

包含在menu/endmenu中的内容会成为Network device support的子菜单。每一个子菜单项都是由config来定义的。congfig下方的那些bool、depends on、default、help等为config的属性,用于定义该菜单项的类型、依赖项、默认值、帮助信息等。

 2. 补充说明一下类型定义部分:

 每个config菜单项都要有类型定义: bool布尔类型、 tristate三态(内建、模块、移除)、string字符串、 hex十六进制、 integer整型。 例如: config HELLO_MODULE  bool "hello test module"  bool 类型的只能选中或不选中,显示为[ ]; tristate类型的菜单项多了编译成内核模块的选项,显示为< > , 假如选择编译成内核模块,则会在.config中生成一个 CONFIG_HELLO_MODULE=m的配置,假如选择内建,就是直接编译成内核影响,就会在.config中生成一个 CONFIG_HELLO_MODULE=y的配置. hex十六进制类型显示为( )。

3. 目录层次迭代 

在Kconfig中有类似语句:source "drivers/usb/Kconfig"  用来包含(或嵌套)新的Kconfig文件,这样便可以使各个目录管理各自的配置内容,使不必把那些配置都写在同一个文件里,方便修改和管理。

下面我们以实例来说明这几个文件的作用

Step1:编辑配置文件Kconfig,加入驱动选项,使之在make menuconfig 的时候出现  打开 linux-2.6.32.2/drivers/char/Kconfig 文件,添加如图所示:

保存退出,这时在linux-2.6.32.2 目录位置运行一下make menuconfig 就可以在Device  Drivers Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选择为<M>,  此意为要把该选项编译为模块方式;再按下空格会变为<*>,意为要把该选项编译到内核中,  在此我们选择<M>,如图:

Step2:通过上一步,我们虽然可以在配置内核的时候进行选择,但实际上此时执行编译内核还是不能把mini2440_hello_module.c 编译进去的,还需要在Makefile 中把内核配置选项和真正的源代码联系起来,打开linux-2.6.32.2/drivers/char/Makefile,如图添加并保存退出:

Step3:这时回到linux-2.6.32.2 源代码根目录位置,执行make modules,就可以生成我们所需要的内核模块文件 mini2440_hello_module.ko 了,如图:至此,我们已经完成了模块驱动的编译。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

js获取url中?后的参数,修复移动版无法切换到电脑版的BUG

昨天,发布了《完美实现移动主题在 360 网站卫士缓存全开情况下的切换》一文,通过 JS 实现了主题在移动端访问时的自动切换,最后提到了可以在电脑版和移动版的 ...

3858
来自专栏pangguoming

mongo 3.0 备份和还原数据库 ,及too many positional arguments错误

在mongo 3.0的操作 备份示例 ./mongodump -h localhost -d liongo -o ./ 错误方式: ./mongorestore...

2903
来自专栏小樱的经验随笔

【批处理学习笔记】第二课:简单批处理命令(1)

1、echo 命令   打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo [批处理与联机处理]     批处理与联机处理     命令将显示...

3165
来自专栏州的先生

Python黑客:编写一个密码暴力攻击测试器

1242
来自专栏漫漫全栈路

node.js 学习笔记

node.js学习笔记 最近一直在折腾前端,为了方便前端学习,所以打算顺带捡一下之前看过一点的node.js,也就顺手MarkDown一个学习笔记。 no...

3467
来自专栏张戈的专栏

分享一个自写的Python远程命令和文件(夹)传输类

最近在跟一个自动化发布平台的建设事项,其中 Linux 系统的远程控制通道则由我独立开发完成,其中涉及到了 Linux 系统远程命令和文件传输操作。 因为之前写...

3687
来自专栏IMWeb前端团队

精通gulp常用插件

本文作者:IMWeb 林鑫 原文出处:IMWeb社区 未经同意,禁止转载 本文主要展示的是gulp常用插件的使用方法和用途,通过对插件的熟练运用达到...

2079
来自专栏开源优测

AutoLine源码分析之入口源码

AutoLine开源平台是一个开源自动化测试解决方案,基于RobotFramework进行二次开发,支持RobotFramework几乎所有的库。

953
来自专栏电光石火

yum安装出现No package nodejs available解决办法

今天我在用CentOS 6.5的yum命令安装的时候出现如下错误: Setting up Install Process No package vim avai...

23210
来自专栏静下来

Discuz管理员密码和UC密码忘记找回方法

今天去我的另外一个dz论坛,因为就是为了占个域名,先挂着。 由于时间太久,我都忘记密码了。试了几个都错误。 后来实在是想不起来了,没办法了,只能硬来了。 a...

35512

扫描关注云+社区