1、内核裁剪的思路

首先,输入命令 make menuconfig进入配置菜单;
然后,退出且保存配置;
保存成功后,在linux源码根目录下.config文件根据menueconfig的配置生成对应的宏定义;
最后,编译内核时候,编译器会根据.config文件里的宏定义进行内核裁剪。

2、对menuconfig菜单的探讨

(1)它的菜单是怎么形成的?
首先,利用make menuconfig命令进入菜单并不是什么神秘的东西,菜单的实现是在 scripts目录下,也就是说,这个菜单是通过脚本来实现的。

每个菜单项都是由Kconfig文件实现。

(2)Kconfig文件有什么作用?
在menuconfig首页,我们可以找到 Device Drivers选项。
linux内核裁剪的“秘密”
紧接着,我们可以进入linux源码目录下的drivers文件夹,打开Kconfig文件。我们可以看到 menu "Device Drivers",这就对应了上面菜单所显示的名称。menu就是用来定义下一级的菜单。当我们进入"Device Drivers"菜单后,将进入下一级菜单。下一级的菜单,同样由Kconfig文件组成。Kconfig文件的位置也已经确定了,如下图所示。

linux内核裁剪的“秘密”

(3)假如我们想在menuconfig里添加一个HelloWorld字符模块选项,那该怎么办?

首先,打开文件 linux-4.4.214/drivers/char。
然后,仿写一段配置代码。然后保存。定义为tristate,可以配置三种状态。
linux内核裁剪的“秘密”
最后,开打配置菜单查看情况。Device Drivers->Character devices。默认是选上了。
linux内核裁剪的“秘密”
在linux源码目录下的.config文件中,可以找到HELLO模块的宏定义。
linux内核裁剪的“秘密”
当HELLO模块取消后的状态如下:
linux内核裁剪的“秘密”

3、关于menuconfig的操作

  • 搜索
    界面输入 ”/“ ,输入查找关键词,输入”回车“即可搜索

  • 使用空格键选择具体驱动配置,有三种状态
    ”M“编译成模块(需要在编译文件里特殊定义)
    ”空“不编译状态
    ”*“编译进内核

  • 退出
    不保存退出
    保存退出

相关文章: