iTop-4412的Linux驱动中重要的menuconfig操作和Kconfig、.config文件操作以及Linux内核配置裁剪笔记整理和及分析,不会让你失望的

想了好长时间不知道该怎么把这一部分整理一下,想着是把这部分和后边的设备注册以及驱动注册写到一起,纠结了半天还是觉得这个单独分开写吧。因为这部分是后期我们把一些驱动配置进去编译烧写进板子的基础。说白了就是我们一般做项目是不会像前边的驱动模块那样,把ko文件在板子上单独挂载的,而是直接在menuconfig中配置裁剪烧到内核中的。前一篇中驱动模块的方法也是为了自己测试调试而用的。不废话了,搞起!

首先呢,要想了解内核配置裁剪得先了解一下menuconfig的操作以及Kconfig和.config文件操作。三个要点如下:
㈠menuconfig的操作
㈡Kconfig和.config文件操作
㈢Linux内核配置裁剪(有了对前边两点的了解,再来理解这部分就容易了)

Linux编译器是通过.config文件来确认哪些代码需要编译进内核,哪些被裁剪掉不编译进内核的。而menuconfig是生产.config文件的一个工具;
㈠首先了解一下menuconfig的操作:
这里简单说一下界面中选择操作方法,上下左右键来选择滚动,Y和N来选上或者取消,还有就是空格也可以选上或取消;使用“空格”键选择具体驱动配置,有三种状态:
①“M”编译成模块(需要在编译文件里面特殊定义,后面介绍)
② “空”不编译状态
③“*”编译进内核
这里再提一下实现menuconfig的代码在内核文件的根目录下,名为scripts下(了解一下就行);
进入Linux内核解压的文件夹中输入make menuconfig,就可进入这个基于文本菜单的配置界面,首页如下:
在这里插入图片描述
首页有一个device drivers也就是设备驱动程序这一项,进入后找到Character devices(也就是字符设备)这一项进入,这个界面中就有一些字符设备的驱动,就拿LEDS来说吧,如下图:
在这里插入图片描述
选中的LEDS的话就把这一项编译进内核中了,取消的话反之。注意设置后退出的时候一定记得保存。

㈡Kconfig和.config文件操作
在Linux发展过程中,配置内核可以使用以下命令:
– #make config(基于文本的最为传统的配置界面,不推荐使用);
– #make menuconfig(基于文本菜单的配置界面)上边说的就是这个;
– #make xconfig(要求QT被安装);
– #make gconfig(要求GTK+被安装);
Kconfig文件也是通过脚本来编写的,前期会模仿着写就行,等有时间可以再琢磨琢磨,个人觉得没必要;在Linux内核文件中每一级中都有Kconfig文件。
在这里插入图片描述
上边是讯为手册中的driver目录下的Kconfig分析图片;由于我们是学设备驱动,所以看的是Linux内核文件根目录下drivers文件下的Kconfig文件,其实我没怎么细看这个图片,我认为的是上边就是一个树形的Kconfig关系图。一级一级的。看这个图不太好理解,也可以vim一下driver目录下的Kconfig文件看一下你就能理解了,这个文件里的东西其实就是前边基于文本菜单的配置界面(就是make menuconfig后出现的界面)里Device Drivers目录选的各个选项,如下:
在这里插入图片描述
然后我们进入character devices后就对应着/devices/char/Kconfig,我们vim一下/devices/char/Kconfig看一下这个文件来验证一下看看能不能找到前边那个LEDS部分,如下:
在这里插入图片描述
找到了,就是这个;那说明就是这段代码来设备menuconfig中的那个LEDS选项的。我们也可以仿照这个LEDS写一个(上边黄色圈起来的就是我仿照写的),然后保存退出,make menuconfig一下进到character devices下看看有没有怎们自己写的那个,如下图:
在这里插入图片描述
可以看到有这个选项了。你可以把自己添加的选项用空格键取消掉,返回/devices/char/Kconfig里看看自己写的是不是被注释掉了,你也可以把/devices/char/Kconfig下对应的这个选项删除了,在进到这个界面里看看在这个选项是不是消失了。这部分其实就是多操作,走一遍你就理解了。说白了Kconfig里对应的就是menuconfig中的各级的目录选项;
源码中带的config_for_xxx都是针对不同的操作系统或者功能裁减的.config文件。我觉得这句话看不看无所谓。
㈢Linux内核配置裁剪(有了对前边两点的了解,再来理解这部分就容易了)
上边那两个点理解了后,到这里基本没什么了。在理解和操作前边两点的时候,其实你就是在做内核裁剪的工作,到这里就是编译内核了,把编译生成的zImage文件单独烧写到开发板。然后就是看看是不是配置进内核了,来验证一下:
①zImage烧写到开发板后,重启开发板;
②在开发板输入ls /sys/devices/platform/(查看开发板有没有自动挂载好设备文件)
在这里插入图片描述
③发现有了,你也可以按照之前的操作再换个名字再添加一个,看看效果,顺便熟悉一下操作;
④本章就大功告成了。
⑤记得多操作,在你操作的时候就会慢慢理解,慢慢就没有陌生感了。不用特意去记,重要的是理解,只要你理解了,后边忘了你回头看一遍,次数多了就自然伸手就来。重要的事情说三遍,实践、实践、再实践!

又到了这个环节,请欣赏我的鸡汤时刻!一GO我嘞GOGO!!!!
送给阅读过这篇文章的人:人生如戏,每个人都是自己戏里的角儿,这世上不止你一个人有故事,所以不要苟求他人,也不要埋怨自己,取悦观众不如取悦自己。
下篇文章见。

发布了6 篇原创文章 · 获赞 3 · 访问量 99

猜你喜欢

转载自blog.csdn.net/weixin_38403894/article/details/105646440