未加星标

Linux驱动之配置内核

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二04 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏
linux驱动之配置内核

2天前来源:CSDN博客

Linux在嵌入式系统中大受欢迎的一个重要因素就是开源,开源的特性决定了Linux内核可以根据个人的需求进行裁剪,裁剪内核就是根据你的硬件资源,将一些不需要的驱动裁剪掉,再把一些原本没有的驱动添加到内核,那么配置好的内核就适用于你特定的硬件平台。配置内核时,make zImage make menuconfig,还有 .config Kconfig Makefile文件,以讯为iTop-4412(三星exynos4412处理器)平台,捋一捋这些命令,文件的关系。

编译内核时,首先要在源码目录下执行make zImage,如果是刚解压完的源码,直接执行make zImage命令是不会成功的,因为源码目录下缺少了.config文件,这个文件是干嘛的,打开看一下就会发现,基本上是一些宏定义的赋值


Linux驱动之配置内核

那么这些宏在什么时候用呢,我们知道,执行make zImage后,会逐层的在各目录下执行make,执行make时,就会需要Makefile文件,以/driver/char目录下的Makefile文件为例


Linux驱动之配置内核

Makefile文件中,$是取值的意思,也就是取各个宏的值,那么这些宏的值在哪,就在.config文件中。这时候,如果这些宏的未定义,那么相应的驱动就不会被编译进内核,如果这些宏的定义为y,以上图最后一行代码为例,如果CONFIG_PRINTER这个宏在.config文件中有CONFIG_PRINTER=y,那么最后一行代码就等价于

obj -y += lp.o

那么对应的驱动就会被编译进内核,这也就是我们裁剪内核的手段,就是把相应的宏赋值为y或者未定义,来决定哪些驱动要编译进内核,哪些不编译。

那么这个文件是怎么来的,手动写?这个有点不太现实,因为驱动太多了,关键是手动写很容易出错。然后Linux就想了一个办法,make menuconfig图形化的配置界面。有了这个配置界面后,就可以用键盘来对内核进行配置,在源码根目录下执行make menuconfig就会出现配置界面。


Linux驱动之配置内核

这样我们就可以用空格来决定那些驱动要配置进内核,配置好了之后,保持退出,就会自动生成 .config文件。假设我们在上图中将Enable LEDS config这个菜单选中,那么就会在.config文件中出现这样一行代码

那么make menuconfig是怎么工作的呢,这些配置的菜单是怎么出现的,假如我自己要添加一个驱动,怎么才能让配置菜单出现在make menuconfig的选项中呢。这一连串的问题都是因为Kconfig这个文件,make menuconfig名令就是逐层的读取Kconfig文件,然后生成菜单,看一下/driver/char目录下的Kconfig文件


Linux驱动之配置内核

以上每五行为一组,第一行表示配置哪个宏,也就是说刚刚在上面描述的CONFIG_LEDS_CTL这个宏,最初就是在这里定义的。第二行告诉表示这个变量在配置界面中是bool值还是tristate,bool值在配置的时候只能配置为y或者未定义,tristate还可以选择为m,表示编译为模块。第三行表示该选项的默认值。第四行和第五行表示用户选择help时的帮助内容。

如果用一张图表示上面的关系,是这样的


Linux驱动之配置内核

那么假设现在有一个测试驱动名字为hello,假设驱动已经书写好了,保存在/driver/char/hello.c文件中,该如何把这个驱动编译进内核,根据上图中关系,首先要编辑/driver/char目录下的Kconfig文件,在这个文件中照葫芦画瓢,添加这样一句代码


Linux驱动之配置内核

保存退出后,在源码根目录下,执行make menuconfig进入到Device Driver-->Character devices就会看到刚刚添加的内容

默认状态下是选中的,因为我们在Kconfig文件中配置的default y 。这样我们保存退出后就会在.config文件中看到这个宏的值已经被赋值为y

那么这个宏被赋值为y有什么作用的,我们还需要修改一下/driver/char目录下的Makefile文件,在文件中也是照葫芦画瓢,添加这样一行代码

这样在编译的时候,我们的hello.c文件就最终编译进内核。

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

分页:12
转载请注明
本文标题:Linux驱动之配置内核
本站链接:http://www.codesec.net/view/524501.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(66)