如何使用支持多台机器硬件的localmodconfig构建自定义内核?


9

将服务器配置为运行单个任务(如设备)时,可能会需要构建自定义内核。例如节省磁盘空间。

Ubuntu Core 13.10 amd64根文件系统的下载量为38 MB,其中包括所需依赖项的“ linux-image-generic”元软件包将下载79 MB的档案,而kernel-image-xyz-generic软件包的大小仍为14 MB

对于构建从硬件不使用的模块中剥离的内核,该make localmodconfig命令是完成任务的正确工具。但是,运行构建和测试环境的虚拟机将加载与目标部署硬件不同的模块。和/或一段时间后,您的部署硬件可能会失效,并且使用了其他硬件。在发布内核更新的频率上,它可能变得太麻烦了,无法为每种不同的硬件配置构建自定义内核。

如何快速构建在几个不同硬件盒上运行的自定义Linux内核?

Answers:


11

make localmodconfig命令仍然是完成任务的正确工具。实际上make localmodconfig运行scripts/kconfig/streamline_config.pl

档案输入

读取streamline_config.pl(Perl)源代码时,有一个未公开说明的功能my $lsmod_file = $ENV{'LSMOD'};,该功能允许文件输入用于加载的模块检测,而不是lsmod命令的输出。

现场CD

因为localmodconfig使用输出lsmod来检测已加载的模块。我们在每种不同的硬件设置上运行Ubuntu Live CD,打开一个终端(Ctrl+ Alt+ T),运行lsmod并保存其输出。

连接输出

通过lsmod在剥离连续的标题行的同时串联输出文件,您可以快速创建一个涵盖所有必需内核模块的输入文件。我们想手动查看模块列表,并使用更手动的方法:

  1. $ cd linux-3.11.0/
    或转到您将运行make命令的目录

  2. $ lsmod > lsmod.txt
    用加载的模块创建一个文本文件

  3. $ nano lsmod.txt
    将打开nano文本编辑器,当然您可以使用自己喜欢的编辑器应用程序

  4. 将尚不存在的所需模块附加到该文件的底部(请参阅示例清单底部的示例),并在准备好后将其保存。
    注意:使用空格而不是制表符来匹配列制表符的位置。

  5. $ make LSMOD="lsmod.txt" localmodconfig
    这将告诉localmodconfig使用您的lsmod.txt文件作为已加载模块检测的输入

关于steamline_config.pl的作者Steven Rostedt,他建议在第5步中使用较短的符号。


关于要附加或不附加至lsmod.txt的示例(步骤4):

因为Intel D33217CK主板具有我们要阅读的Intel热传感器,所以我们添加以下行:

x86_pkg_temp_thermal   13810  0
intel_powerclamp       14239  0

但是我们不想在此硬件上运行虚拟机,这就是为什么我们跳过这些行:

kvm_intel             128218  0
kvm                   364766  1 kvm_intel

它在其Thunderbolt端口上连接了Apple(Broadcom)Gibabit以太网适配器,因此我们附加:

tg3                   152066  0
ptp                    18156  1 tg3
pps_core               18546  1 ptp

我们认为我们不需要卷镜像,因此不要添加:

dm_mirror              21715  0
dm_region_hash         15984  1 dm_mirror
dm_log                 18072  2 dm_region_hash,dm_mirror

而且我们也不需要图形输出(文本将在无头服务器上完成),因此我们不包括:

i915                  589697  3
i2c_algo_bit           13197  1 i915
drm_kms_helper         46867  1 i915
drm                   242354  4 i915,drm_kms_helper

对于另一台机器,我们还需要此Realtek以太网驱动程序:

r8169                  61434  0
mii                    13654  1 r8169
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.