建议先看完后面的问题,把相关包安装上再操作,不然很麻烦
修改并重编内核
查看内核版本
假设我们有个debian系统,uname -a如下,5.10.0-26-amd64是debian版本号,5.10.197-1是内核版本号
root@XXX:/tmp/linux-5.10.197# uname -a
Linux XXX 5.10.0-26-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64 GNU/Linux
所以我们应该找的是5.10.197-1内核
下载对应源码
http://deb.debian.org/debian/pool/main/l/linux/
在这可以找到对应的源码版本
使用dget方式
apt install devscripts
dget http://deb.debian.org/debian/pool/main/l/linux/linux_5.10.197-1.dsc
直接下载
找到对应的源码和debian文件直接下载
其中linux_5.10.197.orig.tar.xz就是内核源码,linux_5.10.197-1.debian.tar.xz中是debian的一些配置和内核patch之类的
解压
tar -xf linux_5.10.197.orig.tar.xz
tar -xf linux_5.10.197-1.debian.tar.xz
##解压出来应该是两个目录一个debian目录,一个linux-5.10.197目录,把debian目录放到linux-5.10.197/下
mv debian linux-5.10.197/
安装必要包
(前面那些行不知道是不是必要的,是当时搞ubuntu的时候需要的,就先安装上了)
sudo apt-get install libncurses5-dev openssl libssl-dev -y
sudo apt-get install build-essential openssl -y
sudo apt-get install pkg-config -y
sudo apt-get install libc6-dev -y
sudo apt-get install bison -y
sudo apt-get install flex -y
sudo apt-get install libelf-dev -y
sudo apt-get install zlibc minizip -y
sudo apt-get install libidn11-dev libidn11 -y
sudo apt install dwarves -y
sudo apt-get install imagemagick graphviz dvipng python3-venv fonts-noto-cjk latexmk librsvg2-bin texlive-lang-chinese texlive-xetex -y
pip install -r ./Documentation/sphinx/requirements.txt
sudo apt install quilt -y
应用patch
cd linux-5.10.197
export QUILT_PATCHES=debian/patches
quilt setup debian/patches/series #初始化
quilt push -a #应用
quilt applied #查看应用状态,如果patch已经全部应用上了则成功
修改
这里可以直接对内核源码进行修改
小修验证一些内容的话就直接修改源码就好了
如果正规的修改应该还是打patch的方式,应该是写入debian/patches/series这个然后把patch放到对应的地方(我没试过猜的)
配置内核
debian/rules debian/control
构建内核
debian/rules binary
安装新内核
制作好的内核就在上一级目录中,比如linux-image-5.10.0-26-amd64-unsigned_5.10.197-1_amd64.deb
不过需要先把就内核卸载掉,如果是相同版本的内核的话
dpkg --purge --force-depends linux-image-5.10.0-26-amd64
dpkg -i linux-image-5.10.0-26-amd64-unsigned_5.10.197-1_amd64.deb
问题
构建内核时报错
loading translations [en]... done
WARNING: while setting up extension sphinx.addnodes: node class 'meta' is already registered, its visitors will be overridden
Sphinx version error:
可能是sphinx这些版本太低了,更新一下
pip install --upgrade sphinx sphinxcontrib-applehelp
构建内核时报错
Sphinx parallel build error:
AttributeError: module 'docutils.nodes' has no attribute 'reprunicode'
make[4]: *** [Documentation/Makefile:119: xmldocs] Error 2
make[3]: *** [Makefile:1712: xmldocs] Error 2
可能是docutils不兼容,升级一下
pip install --upgrade docutils
升级还不行的话,可以看看docutils版本是不是在0.21及以上了?
https://github.com/sphinx-doc/sphinx/issues/12340
这里提到0.21版本中删掉了reprunicode属性,因此可以重新安装0.20版本来解决此问题
pip install docutils==0.20
构建内核时出错
filterdiff --remove-timestamps --strip=1 --addoldprefix=a/ --addnewprefix=b/ | \
xz -c >debian/build/linux-patch-5.10-rt.patch.xz || \
(rm -f debian/build/linux-patch-5.10-rt.patch.xz; exit 1)
diff: source_none/patches: recursive directory loop
diff: source_none/quilt_patches: recursive directory loop
diff: source_rt/quilt_series: No such file or directory
diff: source_rt/series: No such file or directory
make[2]: *** [debian/rules.real:141: debian/build/linux-patch-5.10-rt.patch.xz] Error 1
make[2]: Leaving directory '/tmp/linux-5.10.197'
make[1]: *** [debian/rules.gen:414: binary-indep] Error 2
make[1]: Leaving directory '/tmp/linux-5.10.197'
make: *** [debian/rules:47: binary-indep] Error 2
这是因为rt的patch有些问题
看上去是这样,打包debian的deb时其实会产生两个不同的deb,一种none(大多数就是用这个),一种rt(加了real time补丁的)。。。但其实,看上去我们并不需要对rt补丁进行打包,这个可以看一下我们的内核是不是通用的那种
##如下,可见5.10.0-26-amd64中没有带rt字样,说明是none生成的
root@XX:/tmp/linux-5.10.197# uname -a
Linux XX 5.10.0-26-amd64 #1 SMP Debian 5.10.197-1 (2023-09-29) x86_64 GNU/Linux
##那么rt内核是什么样子的呢?如下,版本后面带着rt
root@XX:/tmp/linux-5.10.197# apt list linux-image* |grep rt
linux-image-5.10.0-25-rt-amd64/oldstable-security 5.10.191-1 amd64
linux-image-5.10.0-27-rt-amd64/oldstable-security 5.10.205-2 amd64
linux-image-5.10.0-29-rt-amd64-dbg/oldstable-security 5.10.216-1 amd64
linux-image-5.10.0-29-rt-amd64-unsigned/oldstable-security 5.10.216-1 amd64
linux-image-5.10.0-29-rt-amd64/oldstable-security 5.10.216-1 amd64
linux-image-5.10.0-30-rt-amd64-dbg/oldstable,oldstable-security 5.10.218-1 amd64
linux-image-5.10.0-30-rt-amd64-unsigned/oldstable,oldstable-security 5.10.218-1 amd64
linux-image-5.10.0-30-rt-amd64/oldstable,oldstable-security 5.10.218-1 amd64
linux-image-5.10.0-31-rt-amd64-dbg/oldstable-security 5.10.221-1 amd64
linux-image-5.10.0-31-rt-amd64-unsigned/oldstable-security 5.10.221-1 amd64
linux-image-5.10.0-31-rt-amd64/oldstable-security 5.10.221-1 amd64
所以这就好解决了,rt我们直接不编了就可以了
直接vim debian/rules.gen然后把ALL_FEATURESETS = ‘none rt’中的rt去掉
然后clean并重新编译
debian/rules clean
debian/rules binary
构建内核时报错
Can't exec "/tmp/linux-5.10.197/debian/linux-cpupower.install": No such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 1538.
dh_install: error: cannot run debian/linux-cpupower.install: No such file or directory
解决,,可以看这里
https://askubuntu.com/questions/982078/install-non-executable-files-with-dh-install/1047319#1047319
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=901715
是因为这是 dh-install 的一个bug,dh_install tries to run files listed in my “.install” file instead of adding them when the “.install” file has executable permissions.
chmod -x debian/*.install
构建内核时报错
cp debian/lib/python/debian_linux/*.py debian/linux-support-5.10.0-26/usr/share/linux-support-5.10.0-26/lib/python/debian_linux
dh_python3
bash: line 1: dh_python3: command not found
解决
apt-get install dh-python
构建内核时报错
/bin/sh: 1: bc: not found
make[5]: *** [/tmp/linux-5.10.197/./Kbuild:24: include/generated/timeconst.h] Error 127
make[4]: *** [/tmp/linux-5.10.197/Makefile:1232: prepare0] Error 2
解决
apt install bc
构建内核时报错
13\002; } > arch/x86/boot/compressed/vmlinux.bin.lz4
/bin/sh: 1: lz4c: not found
make[6]: *** [/tmp/linux-5.10.197/arch/x86/boot/compressed/Makefile:138: arch/x86/boot/compressed/vmlinux.bin.lz4] Error 127
make[6]: *** Deleting file 'arch/x86/boot/compressed/vmlinux.bin.lz4'
解决
apt install liblz4-tool
构建内核时报错
/bin/sh: 1: rsync: not found
make[4]: *** [/tmp/linux-5.10.197/Makefile:1354: headers_install] Error 127
make[4]: Leaving directory '/tmp/linux-5.10.197/debian/build/build-tools/headers-tools'
解决
apt install rsync
构建内核时报错
/usr/bin/ld: cannot find -liberty
collect2: error: ld returned 1 exit status
解决
apt install libiberty-dev
构建内核时报错
/bin/sh: 2: asciidoctor: not found
make[4]: *** [Makefile:290: /tmp/linux-5.10.197/debian/build/build-tools/tools/perf/perf-annotate.1] Error 127
解决
apt install asciidoctor -y
构建内核时报错
make[5]: Entering directory '/tmp/linux-5.10.197/tools/bpf/bpftool/Documentation'
Makefile:44: *** "rst2man not found, but required to generate man pages". Stop.
make[5]: Leaving directory '/tmp/linux-5.10.197/tools/bpf/bpftool/Documentation'
解决
apt install python3-docutils -y
构建内核时报错
configure: error: Missing /usr/include/libudev.h
make[3]: *** [/tmp/linux-5.10.197/debian/rules.d/tools/usb/usbip/Makefile:15: all] Error 1
解决
apt install libudev-dev -y
构建内核时报错
checking whether to use the libwrap (TCP wrappers) library... yes
checking for hosts_access in -lwrap... not found
make[3]: *** [/tmp/linux-5.10.197/debian/rules.d/tools/usb/usbip/Makefile:15: all] Error 1
解决
apt install libwrap0-dev
构建内核时报错
/build-tools/tools/power/cpupower/utils/helpers/amd.o -c utils/helpers/amd.c
utils/helpers/amd.c:8:10: fatal error: pci/pci.h: No such file or directory
8 | #include <pci/pci.h>
| ^~~~~~~~~~~
compilation terminated.
make[4]: *** [Makefile:214: /tmp/linux-5.10.197/debian/build/build-tools/tools/power/cpupower/utils/helpers/amd.o] Error
解决
apt install libpci-dev
构建内核时报错
/tmp/linux-5.10.197/tools/power/x86/turbostat/turbostat.c:33:10: fatal error: sys/capability.h: No such file or directory
33 | #include <sys/capability.h>
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
make[4]: *** [<builtin>: turbostat] Error 1
解决
apt install libcap-dev
构建内核时报错
Can't exec "debian/linux-image-5.10.0-26-amd64-dbg.lintian-overrides": No such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 2595.
dh_lintian: error: cannot run debian/linux-image-5.10.0-26-amd64-dbg.lintian-overrides: No such file or directory
容易猜到和https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=901715
可能是一个问题,都是不应该执行的内容有执行权限了,所以给它去掉执行权限
chmod -x debian/linux-image-5.10.0-26-amd64-dbg.lintian-overrides
构建内核时报错
Can't exec "debian/linux-image-5.10.0-26-cloud-amd64-dbg.lintian-overrides": No such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 2595.
dh_lintian: error: cannot run debian/linux-image-5.10.0-26-cloud-amd64-dbg.lintian-overrides: No such file or directory
同上
chmod -x debian/linux-image-5.10.0-26-cloud-amd64-dbg.lintian-overrides
构建内核时报错
dh_installman
Can't exec "/tmp/linux-5.10.197/debian/linux-cpupower.manpages": No such file or directory at /usr/share/perl5/Debian/Debhelper/Dh_Lib.pm line 1538.
dh_installman: error: cannot run debian/linux-cpupower.manpages: No such file or directory
同上
chmod -x debian/linux-cpupower.manpages
构建内核时报错
dh_install --sourcedir=/tmp/linux-5.10.197/debian/cpupower-tmp
dh_install: warning: Cannot find (any matches for) "[i386" (tried in /tmp/linux-5.10.197/debian/cpupower-tmp, debian/tmp)
dh_install: warning: Cannot find (any matches for) "amd64" (tried in /tmp/linux-5.10.197/debian/cpupower-tmp, debian/tmp)
dh_install: warning: Cannot find (any matches for) "x32]" (tried in /tmp/linux-5.10.197/debian/cpupower-tmp, debian/tmp)
dh_install: warning: linux-cpupower missing files: [i386 amd64 x32]
dh_install: error: missing files, aborting
忽略了,这时候我的linux-image已经编译完了哈哈
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 857879363@qq.com