使用默认配置编译内核

使用默认配置编译内核

가정:

  • 플랫폼:
    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

당신은 또한 볼 수 있습니다Distro의 커널 구성. 첫 번째 단락:

커널 구성은 지원해야 하는 하드웨어를 이해하기만 하면 되는 매우 간단한 프로세스였습니다. 시간이 지남에 따라 상황은 일반적으로 더 복잡해졌지만 배포판에는 특정 커널 기능에 대한 자체 종속성 세트가 추가되어 일반 사용자가 파악하기 어려울 수 있습니다. 이로 인해 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

관련 정보