使用默认配置编译内核


8

假设:

  • 该平台:
    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
  • 只需输入makemake installgrub-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)

Answers:


7

不建议只是光秃秃的make menuconfig。所需的配置取决于三件事:

 the hardware being used
 the features used by the OS/distribution
 the features by you (file-systems, raid, ..etc)

因此,我认为推荐的“默认”配置为:

cd your_kernel_src
cp /boot/your-distribution-config .config
make localmodconfig
make menuconfig

另见发行版的内核配置。第一段:

配置内核曾经是一个非常简单的过程,只需要了解需要支持哪些硬件即可。随着时间的流逝,总体上情况变得越来越复杂,但是发行版在特定的内核功能上增加了自己的依赖关系集,这些依赖关系对于普通用户来说很难理解。这导致Linus Torvalds提出了RFC提案,以添加特定于发行版的内核配置选项。


1
简而言之:没有有效的“默认”或“只是Linus想要的”内核配置。如果您只是下载并编译而未进行任何配置,那么最终您将遇到损坏的和/或几乎没有功能的内核。
bahamat

默认配置就是这样。它曾经是Linus当时所运行的。获取您的发行版的配置,并将其用作起点。
vonbrand

感谢您的回答,我正在尝试阅读writing linux drivers2.6内核的书。我的Fedora 24配置对2.6内核有很多无效值。关于使用什么配置来安装2.6内核的任何建议?
gideon '16

3

实际的硬件/发行版可能无法与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确实可以在Q​​EMU上启动,但它会生成一个超级膨胀的内核,您可能希望推出一些更小的功能,例如此处所述

到底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

从中可以得出结论,使用的文件必须是arch / x86 / configs / x86_64_defconfig

另请参阅:https : //stackoverflow.com/questions/41885015/what-exactly-does-linux-kernels-make-defconfig-do

make help还显示了其他有趣的默认相关目标,例如alldefconfigsavedefconfig可能有用。

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.