在写第5篇的注册驱动的时候,发现还是要写一下这里,这里其实就围绕了Kconfig展开
make menuconfig 是图形化配置界面,Kconfig是真正背后修改的文件。
看一下linux的结构会发现,目录里有个Kconfig,而它包含了子目录下的Kconfig,子目录的Kconfig又包含了他的子目录的Kconfig。
到此其实应该就明白了,linux源码是分层的,每一层里都有一个Kconfig文件。
举个例子,老板手下有3个经理,每个经理手下有5个组长,每个组长手下有10个人。老板当然不会管理所有人(难管理+累),大家都管好自己的手下即可,这样也就管理了所有人。
make menuconfig就是从主目录的Kconfig(老板)开始搜索,一层一层(老板->经理->组长->组员)的搜下去,这样,整个linux就全部呈现在眼前了,我们裁剪linux,也就是选择需要的,剔除不要的。
在注册驱动的时候,需要定义的宏定义就是在本章节仿照已有的LEDS来仿写的。
一方面是为了配置宏定义,一方面也是在make menuconfig中添加选项。
因为仿写的是LEDS,LEDS是字符设备,路径是drivers/char,而我们需要修改的是字符设备里的Kconfig
vim drivers/char/Kconfig
搜索LEDS 然后仿写一个就行了,我这就叫MRYANG_CTL吧
config LEDS_CTL
bool "Enable LEDS config"
default y
help
Enable LEDS config
config MRYANG_CTL
bool "Enable MRYANG config"
default y
help
Study Kconfig
下面这个就是我仿写的,bool表示开关两个选项,还有三个选项的叫tristate,这个百度搜一下,都很简单。
这里的定义在注册设备时至关重要,请记住你定义的宏定义的名字…
=========================================================
东西比较简单,稍微记录一下,有空再来完整写。
以下只是个草稿
虚拟机Ubuntu版
linux内核参考:https://yq.aliyun.com/articles/594992?utm_content=m_50735
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.2.tar.xz
xz -d .tar.xz
tar -xvf .tar
cd linux
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
cp /boot/config-$(uname -r) .config
make menuconfig
ssh窗口要够大 不然显示不了会失败
/Device Drivers/Character devices
vim drivers/char/Kconfig
make menuconfig就有了