![使用默认配置编译内核](https://linux22.com/image/42900/%E4%BD%BF%E7%94%A8%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%E7%BC%96%E8%AF%91%E5%86%85%E6%A0%B8.png)
假设:
该平台:
anisha@linux-dopx:~/> uname -a
Linux linux-dopx 2.6.34-12-desktop #1 SMP PREEMPT 2010-06-29 02:39:08 +0200 x86_64 x86_64 x86_64 GNU/Linux
下载的内核是从 kernel.org 上下载的最新稳定内核。
- 我们在 的选项中保留默认值(不做任何更改)
make menuconfig
。 - 只需键入
make
、make install
、grub-update
,然后重新启动。
现在,根据这些假设,我们是否仍然需要对文件进行一些额外的更改或编译一些额外的驱动程序以确保无错误重新启动?
如果是,那么这些变化取决于什么?
编辑1:
anisha@linux-dopx:/> sudo /sbin/lspci -n
00:00.0 0600: 8086:29c0 (rev 10)
00:02.0 0300: 8086:29c2 (rev 10)
00:1b.0 0403: 8086:27d8 (rev 01)
00:1c.0 0604: 8086:27d0 (rev 01)
00:1c.1 0604: 8086:27d2 (rev 01)
00:1d.0 0c03: 8086:27c8 (rev 01)
00:1d.1 0c03: 8086:27c9 (rev 01)
00:1d.2 0c03: 8086:27ca (rev 01)
00:1d.3 0c03: 8086:27cb (rev 01)
00:1d.7 0c03: 8086:27cc (rev 01)
00:1e.0 0604: 8086:244e (rev e1)
00:1f.0 0601: 8086:27b8 (rev 01)
00:1f.1 0101: 8086:27df (rev 01)
00:1f.2 0101: 8086:27c0 (rev 01)
00:1f.3 0c05: 8086:27da (rev 01)
01:00.0 0200: 10ec:8136 (rev 01)
答案1
不建议裸露make menuconfig
。所需的配置取决于三件事:
- 正在使用的硬件
- 操作系统/发行版使用的功能
- 您使用的功能(文件系统、raid 等)
所以我认为推荐的“默认”配置是:
cd your_kernel_src
cp /boot/your-distribution-config .config
make localmodconfig
make menuconfig
也可以看看发行版的内核配置。第一段:
配置内核曾经是一个相当简单的过程,只需要了解需要支持的硬件即可。随着时间的推移,事情总体上变得更加复杂,但发行版添加了自己对特定内核功能的依赖集,而普通用户可能很难弄清楚这些依赖项。这导致 Linus Torvalds 提出了一个 RFC 提案,以添加特定于发行版的内核配置选项。
答案2
真实的硬件/发行版可能无法与 defconfig 正常工作
如上所述关于这个答案,发行版或硬件供应商未提供的任何内容很可能会以微妙或不太微妙的方式失败,例如:
- 您可能不会为某些重要的硬件构建驱动程序支持
- 发行版的软件包可能依赖于您未构建并失败的内核功能
此外,除了特定的配置之外,供应商在普通内核之上应用大型补丁集是很正常的,甚至 Ubuntu 也这样做。
特别是对于 Ubuntu / Debian,我已经描述了如何从源代码编译受支持的内核:https://askubuntu.com/questions/281763/is-there-any-prebuilt-qemu-ubuntu-image32bit-online/1081171#1081171在这种情况下,修改稳定的内核基础是您可以做的最明智的事情。
QEMU 与 defconfig 配合使用
不过,有一件做得很好的事情defconfig
,那就是在 QEMU 上启动,并在内核 v4.20、QEMU 2.12 上进行了测试。
这里有一个使用 Buildroot 的全自动示例。
如该链接所述,您需要以下选项才能从磁盘启动:
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BLK=y
尽管 initrd 不需要它们。
要交叉编译到不同的架构,例如 aarch64,您需要:
make ARCH=arm64 defconfig
但正如这里所解释的,虽然arm64确实在QEMU上启动,但它会生成一个超级臃肿的内核,并且您可能想要推出一些更小的东西,例如如此处所述。
具体是做什么的呢make defconfig
?
我们可以轻松查看详细构建中使用了哪个配置文件:
make V=1 defconfig
在 v4.19 上输出:
make -f ./scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig defconfig
scripts/kconfig/conf --defconfig=arch/x86/configs/x86_64_defconfig Kconfig
由此我们得出结论,所使用的文件必须是拱门/x86/configs/x86_64_defconfig。
也可以看看:https://stackoverflow.com/questions/41885015/what-exactly-does-linux-kernels-make-defconfig-do
make help
还显示了其他有趣的默认相关目标,例如alldefconfig
和 ,savedefconfig
这可能有用。
答案3
定义配置不是用于的文件名参数.config创建。
相反,defconfig 是一个 makefile目标一旦调用,make 将寻找要应用的配置,具体取决于拱在 make 调用之前提供的变量。
例子:
ARCH=arm make defconfig
将在寻找足弓/手臂的子文件夹XXX_defconfig文件,其中 XXX 确切名称被分配在拱门/$ARCH/Makefile对于每个架构。
例子:
拱/臂/Makefile:30:KBUILD_DEFCONFIG := multi_v7_defconfig
而不是本地文件夹文件定义配置将申请拱门/手臂/multi_v7_defconfig一个作为默认值.config