Ubuntu git内核存储库
debian/
每个版本的单个git存储库中都跟踪包含配置和内核树的元数据:http : //kernel.ubuntu.com/git/ubuntu/ubuntu-bionic.git/
然后,存储库为每个内核程序包都有一个标签,例如在我的Ubuntu 18.04中,我有该程序包linux-image-4.15.0-36-generic
,我猜测它对应于标签:Ubuntu-4.15.0-36.39
。
https://help.ubuntu.com/community/Kernel/Compile解释了如何编译内核,以及如何配置内核以及如何将配置合并到最终配置中。
所有的配置似乎debian.master/config/ARCH
都包含以下内容:
config.common.ubuntu
config.common.ports
amd64/config.common.amd64
amd64/config.flavour.generic
amd64/config.flavour.lowlatency
所以我想这linux-image-4.15.0-36-generic
将合并config.common.ubuntu
,config.common.amd64
和config.flavour.generic
。
进行合并的脚本似乎是debian / scripts / misc / kernelconfig,其中包含注释:
# Merge configs
# We merge config.common.ubuntu + config.common.<arch> +
# config.flavour.<flavour>
待办事项:还有一个 debian.master/config/annotations
文件,其中似乎包含每个拱门的每个配置的值,该如何使用?
有人应该通过某种方式在详细模式下运行构建脚本来确认所有这些,但是我现在很懒,可以使用以下命令进行构建:
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-bionic.git linux
cd linux
git checkout Ubuntu-4.15.0-36.39
fakeroot debian/rules clean
debian/rules updateconfigs
fakeroot debian/rules build-generic
然后,我确认这将产生与本地相同的配置:
diff debian/build/build-generic/.config /boot/config-4.15.0-36-generic
请注意,Ubuntu内核git repo在上游Linux之上也有成千上万个补丁,因此仅获得正确的配置将不足以重现行为。
我们还可以通过查看启动的开始来三重检查构建的内核是否与打包的内核匹配dmesg
,该启动包含:
[ 0.000000] Linux version 4.15.0-36-generic (buildd@lgw01-amd64-031) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 (Ubuntu 4.15.0-36.39-generic 4.15.18)
在配置 .deb
正如其他人所提到的,最终的完整配置也位于以下位置:
/boot/config-4.15.0-36-generic
对应于每个Linux内核映像:
/boot/vmlinuz-4.15.0-36-generic
因此,对于其他版本,我们可以找到它们来自哪个包:
dpkg -S /boot/config-4.15.0-36-generic
这使:
linux-modules-4.15.0-36-generic: /boot/config-4.15.0-36-generic
然后您可以.deb
从https://packages.ubuntu.com/bionic-updates/linux-modules-4.15.0-36-generic下载
并解压缩以获取配置:
mkdir config
cd config
wget http://mirrors.kernel.org/ubuntu/pool/main/l/linux/linux-modules-4.15.0-36-generic_4.15.0-36.39_amd64.deb
ar x linux-modules-4.15.0-36-generic_4.15.0-36.39_amd64.deb
tar -xvf data.tar.xz
cat ./boot/config-4.15.0-36-generic
在Ubuntu 18.04中测试。
/boot-config-*
比起尝试模仿在构建时自动生成软件包的向导,要抓取软件包并提取其更为容易。很遗憾,没有一种方法可以在线上从文件包中抓取一个文件(或存在吗?)