Pro*_*kup 9 make kernel-modules linux-kernel
将服务器配置为运行单个任务(如设备)时,可能需要构建自定义内核。例如节省磁盘空间。
Ubuntu Core 13.10 amd64 根文件系统是38 MB 的下载,其中包含所需依赖项的“linux-image-generic”元包将下载79 MB的档案,而 kernel-image-xyz-generic 包的大小仍然是14 MB .
要构建从硬件不使用的模块中剥离的内核,该make localmodconfig命令是完成这项工作的正确工具。但是,运行构建和测试环境的虚拟机加载的模块与目标部署硬件不同。和/或一段时间后,您的部署硬件可能会停产,并使用不同的硬件。并且在内核更新发布的频率上,为每个不同的硬件配置构建自定义内核可能会变得太麻烦。
如何快速构建运行在几个不同硬件盒上的自定义 Linux 内核?
Pro*_*kup 11
该make localmodconfig命令仍然是该工作的正确工具。事实上make localmodconfig运行scripts/kconfig/streamline_config.pl。
在阅读streamline_config.pl(perl)源代码时,有一个未公开的功能my $lsmod_file = $ENV{'LSMOD'};允许加载模块检测的文件输入而不是lsmod命令的输出。
因为 localmodconfig 使用输出lsmod来检测加载的模块。我们在每个不同的硬件设置上运行Ubuntu的的Live CD,打开一个终端(Ctrl+ Alt+ T),运行lsmod和保存它的输出。
通过lsmod在剥离连续的头行的同时连接输出文件,您可以快速创建一个包含所有所需内核模块的输入文件。我们喜欢手动查看模块列表并使用更手动的方法:
$ cd linux-3.11.0/
或转到您将运行 make 命令的目录
$ lsmod > lsmod.txt
使用您加载的模块创建一个文本文件
$ nano lsmod.txt
将打开nano文本编辑器,当然你可以使用你最喜欢的编辑器应用程序
将所需的尚未存在的模块附加到此文件的底部(例如,请参见此 anwer 的底部),并在准备好后保存。
注意:使用空格而不是制表符来匹配列制表符位置。
$ make LSMOD="lsmod.txt" localmodconfig
这将告诉 localmodconfig 使用您的 lsmod.txt 文件作为加载模块检测的输入
关于 Steven Rostedt - steamline_config.pl 的作者 - 在步骤 5 中建议使用更短的符号。
因为 Intel D33217CK 主板有我们想读取的 Intel 热传感器,所以我们附加以下几行:
x86_pkg_temp_thermal 13810 0
intel_powerclamp 14239 0
Run Code Online (Sandbox Code Playgroud)
但是我们不想在这个硬件上运行虚拟机,这就是我们跳过这些行的原因:
kvm_intel 128218 0
kvm 364766 1 kvm_intel
Run Code Online (Sandbox Code Playgroud)
它有一个 Apple (Broadcom) Gibabit 以太网适配器连接到它的 Thunderbolt 端口,所以我们附加:
tg3 152066 0
ptp 18156 1 tg3
pps_core 18546 1 ptp
Run Code Online (Sandbox Code Playgroud)
我们认为我们不需要卷镜像,因此不添加:
dm_mirror 21715 0
dm_region_hash 15984 1 dm_mirror
dm_log 18072 2 dm_region_hash,dm_mirror
Run Code Online (Sandbox Code Playgroud)
而且我们也不需要图形输出(文本将在无头服务器上进行),因此我们不包括:
i915 589697 3
i2c_algo_bit 13197 1 i915
drm_kms_helper 46867 1 i915
drm 242354 4 i915,drm_kms_helper
Run Code Online (Sandbox Code Playgroud)
对于另一台机器,我们还需要这个 Realtek 以太网驱动程序:
r8169 61434 0
mii 13654 1 r8169
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8780 次 |
| 最近记录: |