linux内核中,在/drivers/char目录的Kconfig文件中加入自己编写的新驱动,make menuconfig却不显示的问题
来源:互联网 发布:阿里云的解决方案ppt 编辑:程序博客网 时间:2024/05/20 09:24
修改了一个同学编写的基于i2c接口的气压传感器sht21驱动,文件名SHT21.c,文件中将sht21注册成字符设备,现需要将驱动重新编译。
按照mini2440用户手册7.3.3节的步骤,将SHT21 module加入内核代码树并编译,
第一步:
编辑配置文件Kconfig,加入驱动选项,使之在make menuconfig 的时候出现
打开 linux-2.6.32.2/drivers/char/Kconfig 文件,找到下述片段:
config MINI2440_HELLO_MODULE tristate "Mini2440 module sample" depends on MACH_MINI2440 default m if MACH_MINI2440 help Mini2440 module sample.
然后直接复制一遍,照葫芦画瓢,稍作修改:
config MINI2440_SHT21_MODULE tristate "SHT21 driver for Mini2440" depends on MACH_MINI2440 default m if MACH_MINI2440 help SHT21 driver for Mini2440, a kind of baroceptor used i2c.
保存文件即可。
第二步:
打开 linux-2.6.32.2/drivers/char/Makefile,找到下面这个语句: obj-$(CONFIG_MINI2440_HELLO_MODULE) += mini2440_hello_module.o
依旧照葫芦画瓢,在此行的上面增加一行 obj-$(CONFIG_MINI2440_SHT21_MODULE) += SHT21.o
保存退出。
第三步:
在linux-2.6.32.2 的顶层目录位置运行一下make menuconfig 就可以在Device Drivers -> Character devices 菜单中看到刚才所添加的选项了,按下空格键将会选择为
<M>
,此意为要把该选项编译为模块方式;再按下空格会变为<*>
,意为要把该选项编译到内核中。
这是mini2440用户手册中的描述,但是,我按照上述步骤,进入Device Drivers -> Character devices 子菜单,却并未发现“SHT21 driver for Mini2440”的字样,甚至连手册中说的本该已经存在的”Mini2440 module sample”, “LED Support for Mini2440 GPIO LEDs”等选项也都没有。
于是回过头来仔细阅读Kconfig中的驱动描述,发现mini2440预先编写的驱动例程的config第三行都有一句话:depends on MACH_MINI2440
,查阅资料得知,只有在内核配置为mini2440模式的时候,带有depends on MACH_MINI2440
语句的模块才会在menuconfig中显示出来。
这时候想到,我的内核文件解压缩之后,并未对其做任何配置,因此内核默认一定不是为mini2440配置的。这一点从mini2440用户手册第六章,定制 Linux 内核及制作文件系统中得到了验证。
解决方法很简单,友善之臂已经针对不同的LCD输出分别制作了相应的内核配置文件,配置文件就放在内核根目录下,是一些名为config_mini2440_xxx的文件。
直接使用即可,方法是直接将config_mini2440_w35文件重命名为.config文件即可: #cp config_mini2440_w35 .config
这时候重新执行make menuconfig
,进入Device Drivers -> Character devices 子菜单,成功发现新加入的驱动模块“SHT21 driver for Mini2440”,问题解决。
第四步:
在内核顶层目录下,执行make modules,稍等片刻,就可以看到,linux-2.6.32.2/drivers/char目录下成功生成我们所需要的内核模块文件SHT21.ko
参考资料:
Linux kernel的Makefile和Kconfig以及Make menuconfig的关系
Kconfig和Makefile的修改
- linux内核中,在/drivers/char目录的Kconfig文件中加入自己编写的新驱动,make menuconfig却不显示的问题
- linux内核中,在/drivers/char目录的Kconfig文件中加入自己编写的新驱动,make menuconfig却不显示的问题
- 关于make menuconfig中有些内核选项不显示的问题
- 在menuconfig 菜单中添加自己编写的驱动选项
- linux内核中Kconfig及如何加自己的驱动
- linux内核中Kconfig及如何加自己的驱动
- linux内核中Kconfig及如何加自己的驱动
- linux内核中Kconfig及如何加自己的驱动
- linux内核中Kconfig及如何加自己的驱动
- Kconfig menuconfig .config Makefile之间的关系及如何在内核中添加驱动
- 编译linux内核时.config ,Kconfig, make menuconfig的联系
- Linux内核中Kconfig文件的作用
- 在linux2.6内核中加入自己的驱动
- Linux内核的Makefile和kconfig解读,如何在内核中添加自己的代码
- Linux内核的Makefile和kconfig解读,如何在内核中添加自己的代码
- 在linux内核中添加驱动 不使用模块化加入的方式
- 在openwrt文件系统中加入自己的目录文件
- 在linux内核驱动树中添加自己的驱动
- 进程池的实现
- 杭电acm第1005题Number Sequence
- CSS3属性笔记选择器(五)
- tomcat如何配置环境变量
- 终极解决方案 at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) 报空指针
- linux内核中,在/drivers/char目录的Kconfig文件中加入自己编写的新驱动,make menuconfig却不显示的问题
- 如何防止表单重复提交
- Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)来传递参数
- HDU 1575 Tr A(矩阵快速幂 水 入门)
- shell脚本实现俄罗斯方块
- 菜鸟的hadoop的学习笔记--HDFS笔记
- VC++6.0开端
- 移动开发-lua 日记 -- 20150514
- cocos2dx Sprite触摸监听