ubuntu20 下从linux 5.14.0-1045 源码编译 linux-5.15.56 内核

ubuntu20 下从linux 5.14.0-1045 源码编译 linux-5.15.56 内核

原以为会是很简单的事,结果还是颇废一番周折。很多情况是没有遇到过得。所以这里记录一下。
问题记录的不全,简单的忽略了,不过也有复杂的没记录下来,例如关于模块签名后来就没有遇到。
有机会再补充,其它问题都写了处理方法,还是以自己的方法编译通过的。属于增量编译。
否则make deb-pkg 每次清除从头编译太浪费时间了。


小插曲: 网传的用apt source 下载源码, build-dep 方式此路不同。
我的初始编译内核是 Linux 5.14.0-1045-oem
不过我还是简要介绍一下遇到了什么问题。
------------------------------------------------------------
$sudo apt source linux-hwe-5.13-source-5.13.0
sh: 1: dpkg-source: not found
W: 由于文件'linux-hwe-5.13_5.13.0-52.59~20.04.1.dsc'无法被用户'_apt'访问,已脱离沙盒并提权为根用户来进行下载。 - pkgAcquire::Run (13: 权限不够)
E: 运行解包的命令“dpkg-source --no-check -x linux-hwe-5.13_5.13.0-52.59~20.04.1.dsc”出错。
N: 请检查是否安装了“dpkg-dev”软件包。

$ sudo apt install dpkg-dev


$ sudo apt build-dep linux-hwe-5.13-source-5.13.0
正在读取软件包列表... 完成
选择 linux-hwe-5.13 作为源代码包而非 linux-hwe-5.13-source-5.13.0
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
 builddeps:linux-hwe-5.13 : 依赖: libpci-dev 但是它将不会被安装
                            依赖: libudev-dev 但是它将不会被安装
                            依赖: dwarves (>= 1.19) 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

$ sudo aptitude build-dep linux-hwe-5.13-source-5.13.0
无法满足构建依赖:Build-Depends: debhelper-compat (= 10)
无法满足构建依赖:Build-Depends: libunwind8-dev
无法满足构建依赖:Build-Depends: dwarves (>= 1.19)
无法应用某些操作,中止

aptitude 也不能解决。此路已经不通了!!
也许应该是 apt install dwarves , 现在刚想到, 但我没有试验,因为后来我用标准源码编译通过了。
但是查看apt-cache showpkg dwarves 版本只是1.15, 还要源码安装dwarves? 放弃放弃!
------------------------------------------------------------

sudo make deb-pkg LOCALVERSION=-custom KDEB_PKGVERSION=$(make kernelversion) -j32


源码编译:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.56.tar.xz
先安装一些基本依赖,build-essential, flex,bison 等, 然后make menuconfig 存为.config

直奔deb-pkg 目标
sudo make deb-pkg LOCALVERSION=-custom KDEB_PKGVERSION=$(make kernelversion) -j32


问题1:
dpkg-checkbuilddeps: 错误: Unmet build dependencies: libssl-dev:native
dpkg-buildpackage: 警告: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: 警告: (使用 -d 参数来忽略)
make[1]: *** [scripts/Makefile.package:77:deb-pkg] 错误 3

是未安装该软件包. 提示的不准确。
sudo apt install libssl-dev


问题2:
dpkg-source: 警告: source directory 'linux-5.15.56' is not <sourcepackage>-<upstreamversion> 'linux-upstream-5.15.56'
dpkg-source: 警告: .orig 目录名 linux-5.15.56.orig 不符合 <package>-<upstreamversion> 的格式(理想名字为 linux-upstream-5.15.56.orig)

改名称。
mv linux-5.15.56 linux-upstream-5.15.56


问题3:
make[2]: *** [debian/rules:7:build-arch] 错误 2
dpkg-buildpackage: 错误: debian/rules binary subprocess returned exit status 2
make[1]: *** [scripts/Makefile.package:77:deb-pkg] 错误 2
make: *** [Makefile:1594:deb-pkg] 错误 2

make deb-pkg 不能增量编译, 出现错误报的不清楚,


揭开它的错误原因(debian/rules:7)
改为分步运行
sudo make KERNELRELEASE=5.15.56-custom ARCH=x86 KBUILD_BUILD_VERSION=5.15.56 -f ./Makefile intdeb-pkg -j32


问题4:
sh ./scripts/package/builddeb
arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support
cp: 无法获取'arch/x86/boot/bzImage' 的文件状态(stat): 没有那个文件或目录
make[1]: *** [scripts/Makefile.package:87:intdeb-pkg] 错误 1
make: *** [Makefile:1594:intdeb-pkg] 错误 2

所以关闭CONFIG_X86_X32 选项


先以bzImage为目标,这是默认目标
sudo make KERNELRELEASE=5.15.56-custom ARCH=x86 KBUILD_BUILD_VERSION=5.15.56 -f ./Makefile -j32


问题5. 小问题
/bin/sh: 1: zstd: not found
make[2]: *** [arch/x86/boot/compressed/Makefile:139:arch/x86/boot/compressed/vmlinux.bin.zst] 错误 127
make[2]: *** 正在删除文件“arch/x86/boot/compressed/vmlinux.bin.zst”
make[1]: *** [arch/x86/boot/Makefile:115:arch/x86/boot/compressed/vmlinux] 错误 2
make: *** [arch/x86/Makefile:257:bzImage] 错误 2
make: *** 正在等待未完成的任务....

添加zstd

sudo apt-get install zstd

sudo make KERNELRELEASE=5.15.56-custom ARCH=x86 KBUILD_BUILD_VERSION=5.15.56 -f ./Makefile -j32
这里编译通过了.

再乘胜追击:以intdeb-pkg 为目标
sudo make KERNELRELEASE=5.15.56-custom ARCH=x86 KBUILD_BUILD_VERSION=5.15.56 -f ./Makefile intdeb-pkg -j32

发现已经编译出了pkg
linux-headers-5.15.56-custom_5.15.56_amd64.deb
linux-image-5.15.56-custom_5.15.56_amd64.deb
linux-image-5.15.56-custom-dbg_5.15.56_amd64.deb
linux-libc-dev_5.15.56_amd64.deb


安装pkg:
sudo dpkg -i linux-image*.deb linux-headers*.deb

linux-libc-dev.deb 都是一些头文件,就不用安装了。

验证:
修改/etc/default/grub
改为如下形式: 即将STYLE=hidden 注释掉,TIMEOUT从0改为有值。从而可以选择我们的内核。
GRUB_DEFAULT=0
#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=10

经测试无误,很高兴它通过了。
是啊,曾经有很多次加载内存影像就死机的事情也过去了。

******************************************************** 分割线***************************************

下面我重新总结一下编译过程:请按此步骤实验!

我把编译内核分为4个步骤,下载,配置,编译内核,编译包,具体如下:

1. 下载:
------------------------------------------------------------
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.56.tar.xz
------------------------------------------------------------

2. 生成.config
------------------------------------------------------------
  make menuconfig
------------------------------------------------------------
  然后exit, 会在当前目录生成.config 文件


3.  生成内核影像bzImage, 很慢, 我的16个内核,所以用 -j32
-----------------------------------------------------------------------------------------------
sudo make KERNELRELEASE=5.15.56-custom ARCH=x86 KBUILD_BUILD_VERSION=5.15.56 -f ./Makefile -j32
-----------------------------------------------------------------------------------------------
  会有如下错误.
  make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'.  Stop.
  Makefile:1886: recipe for target 'certs' failed
  Makefile:1885: *** [certs] Error 2

运行以下2条命令
scripts/config --disable SYSTEM_TRUSTED_KEYS
scripts/config --disable SYSTEM_REVOCATION_KEYS

这两条命令实际上会把.config 中的配置选项改成
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_REVOCATION_KEYS=""
不用脚本,用手动改效果也是一样的.

修改完成后,重新输入上边运行命令
会有一个提示,默认敲回车即可.
   X.509 certificates to be preloaded into the system blacklist keyring (SYSTEM_REVOCATION_KEYS) [] (NEW)

编译完成后,显示
LD [M]  sound/usb/snd-usbmidi-lib.ko
LD [M]  sound/usb/usx2y/snd-usb-us122l.ko
LD [M]  sound/usb/usx2y/snd-usb-usx2y.ko
LD [M]  sound/virtio/virtio_snd.ko
LD [M]  sound/x86/snd-hdmi-lpe-audio.ko
LD [M]  sound/xen/snd_xen_front.ko

再重复一编,为的是确认一下, 因为是增量编译,所以这次会很快完成.
sudo make KERNELRELEASE=5.15.56-custom ARCH=x86 KBUILD_BUILD_VERSION=5.15.56 -f ./Makefile -j32
  DESCEND objtool
  CALL    scripts/atomic/check-atomics.sh
  CALL    scripts/checksyscalls.sh
  CHK     include/generated/compile.h
  CHK     kernel/kheaders_data.tar.xz
Kernel: arch/x86/boot/bzImage is ready  (#1)

4.  生成安装包文件intdeb-pkg, 很慢!
 ---------------------------------------------------------------------------------------------------------
  sudo make KERNELRELEASE=5.15.56-custom ARCH=x86 KBUILD_BUILD_VERSION=5.15.56 -f ./Makefile intdeb-pkg -j32
 ---------------------------------------------------------------------------------------------------------

 如果你碰到如下错误,那是因为你第3步没有完成.
  UPD     include/config/kernel.release
  sh ./scripts/package/builddeb
  cp: 无法获取'System.map' 的文件状态(stat): 没有那个文件或目录
  scripts/Makefile.package:87: recipe for target 'intdeb-pkg' failed
  make[1]: directory '/home/hjj/source/linux-upstream-5.15.56'
  make[1]: *** [intdeb-pkg] Error 1
  Makefile:1594: recipe for target 'intdeb-pkg' failed
  make: directory '/home/hjj/source/linux-upstream-5.15.56'
  make: *** [intdeb-pkg] Error 2
  如果第3步完成, 则 arch/x86/boot/bzImage 会生成。同时编译目录下System.map, vmlinux都会生成

最后输出:
dpkg-deb: 正在 '../linux-libc-dev_5.15.56_amd64.deb' 中构建软件包 'linux-libc-dev'。
dpkg-deb: 正在 '../linux-image-5.15.56-custom_5.15.56_amd64.deb' 中构建软件包 'linux-image-5.15.56-custom'。
dpkg-deb: 正在 '../linux-image-5.15.56-custom-dbg_5.15.56_amd64.deb' 中构建软件包 'linux-image-5.15.56-custom-dbg'。

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值