[Share Experiences] 编译deepin主线内核
Tofloor
poster avatar
fslong
deepin beta test group
2023-09-20 03:03
Author

今天给大家带来deepin主线内核编译的教程。

〇、写在前面

1、为什么要自己编译内核

官方内核是一个比较通用的版本,自己在编译内核的时候内核的脚本会根据自己电脑做一些配置,理论上跟自己的电脑更加匹配

我对比过官方的 .config文件,在执行 make menuconfig之后即使你啥都不改,某些配置项都跟官方的不太一样。

应该是有脚本控制了这块,导致一些区别。

deepin的主线内核会一直跟随linux最新版本迭代的,比源里的新,尤其是使用新硬件的朋友,非常需要这个。

2、为什么使用deepin主线内核

相比于linux官方内核,deepin内核会多一些 配置驱动这样跟我们的系统就更加匹配了。

我们自己用linux官方内核编译的内核,本质上跟搬运其他系统内核区别不算太大。

3、免责声明

本教程需要一定的动手能力,要求会以下技能:

  1. 懂得合理使用搜索引擎解决编译过程中遇到的各种幺蛾子
  2. 会解决依赖缺失
  3. 掌握基本的git用法
  4. 会手动安装、卸载内核

本教程只是我个人研究分享,老司机能承受风险的可以试试,出了啥意外,比如损毁硬件(理论上内核有问题,也可能导致的),我概不负责。

本教程只是我个人研究分享,老司机能承受风险的可以试试,出了啥意外,比如损毁硬件(理论上内核有问题,也可能导致的),我概不负责。

本教程只是我个人研究分享,老司机能承受风险的可以试试,出了啥意外,比如损毁硬件(理论上内核有问题,也可能导致的),我概不负责。

一、获取主线内核

deepin 主线内核的地址在:https://github.com/deepin-community/kernel

找一个剩余空间大于12g的地方,然后使用git拉下来主线内核

git clone [email protected]:deepin-community/kernel.git --depth=1 --branch=kernel-mainline

这里面加了 --depth=1是只拉去最新版本,后面 branch=kernel-mainline 这个 main-line就是主线内核的意思,当然这里还有uos的分支,我们今天不需要。

如果要编译6.4版本的内核,大家可以拉取另一个分支:

git clone [email protected]:deepin-community/kernel.git --depth=1 --branch=linux-6.4.y

运气好的时候速度还是不错的,一会就拉取完了。

拉取完之后会多这么一个文件夹:

image.png

二、配置文件

1、cd到刚才那个kernel文件夹中

image.png

2、拷贝现有系统的 .config文件

要获取 .config需要在root下。

sudo su

然后使用cp命令,复制想用的内核配置文件到当前文件夹,比如我就用的:

cp /boot/config-6.4.12-dppve-fslong+ .config

可以先输入 cp /boot/config,然后按 tab键代码补全,选中你想要的内核配置文件,后面第二个参数 .config是粘贴的名字。

然后使用 exit命令退出 root即可。

3、配置内核配置文件

使用 make menuconfig可以打开图形化配置文件程序,这个命令会自动加载我们刚才拷贝过来的 .config文件。

就这一步会对 .config进行针对性优化,生成的会是比较匹配自己电脑的配置。

个人建议新手就别改东西了,直接保存即可。

个人建议新手就别改东西了,直接保存即可。

个人建议新手就别改东西了,直接保存即可。

image.png

image.png

image.png

不出意外的话会是下面这个界面了:

image.png

三、编译内核

到这我们就可以编译内核了,我推荐编译成deb包的方式,虽然打包会消耗一些时间,但方便后续的安装、删除、分享

可能很多朋友怕编译内核的时候电脑发烫,这里有个小技巧,我们可以临时关闭cpu睿频功能。

关闭睿频之后,cpu就不那么烫了,也比较稳定,甚至没你打游戏时候占用高。

当然编译时间也会稍微久一点,如果是intel的cpu,可以使用下面命令关闭睿频:

sudo chmod 777 /sys/devices/system/cpu/intel_pstate/no_turbo
sudo echo '1' >> /sys/devices/system/cpu/intel_pstate/no_turbo

大家也不用担心时间会特别久,我测试过不关闭睿频我电脑35分钟编译完,关闭睿频大概45分钟编译完。

个人猜测不关闭睿频电脑发烫碰到温度墙之后也会降频

到了真正的编译阶段,反而就只有一行命令,这一行命令会生成四个deb包:

make bindeb-pkg -j8

上面的数字8代表8个进程编译,虽然我电脑只有6个核心,但我就喜欢j8编译,如果你核心更多的话数字可以改大点,更快一些。

这一步肯定会各种报错和幺蛾子,就需要大家根据报错情况看缺啥安装啥

这一步肯定会各种报错和幺蛾子,就需要大家根据报错情况看缺啥安装啥

这一步肯定会各种报错和幺蛾子,就需要大家根据报错情况看缺啥安装啥

直到不报错了,那么我们就静等编译完成即可。

四、安装内核

在漫长的等待之后,会在和kernel文件夹所在目录下生成四个deb包,一般情况下我们安装下面两个就可以了:

image.png

推荐使用apt命令安装,比如我这个就可以用下面命令安装:

sudo apt install ./linux-headers-6.5.3-dppve-fslong_6.5.3-gc669c1fa83b2-1_amd64.deb ./linux-image-6.5.3-dppve-fslong_6.5.3-gc669c1fa83b2-1_amd64.deb

你们就需要看自己打包成的是啥样的,然后自己安装。

安装完,重启选择新内核进入即可。

五、编译清理

还是cd到kernel文件夹内:

image.png

然后执行清理命令:

make clean

就能够释放我们刚才编译内核时候生成占用的空间。

六、内核更新

后面如果deepin主线内核更新了,为了干净还是重新挂机拉取吧,重新执行上面的**一、**二、三、四步。

七、写在最后

今天就分享到这,这些操作还是有一定风险性的,大家在操作时候一定要心细,不要犯错了。

Reply Favorite View the author
All Replies
2 / 2
To page
fslong
deepin beta test group
2023-10-07 02:07
#21

这个依赖安装之后再进行编译一样报同样的错误,怎么解决呢
image.png

应该是没装好吧,我没碰到过。

Reply View the author
deepin
2023-10-07 06:30
#22
fslong

应该是没装好吧,我没碰到过。

我查到是pahole这个命令是属于dwarves这个包了,所以我是安装dwarves这个安装包,想问一下你是不是也是安装dwarves这个安装包,还是说需要下载源码进行编译安装

Reply View the author
咿呀咿
deepin
2023-10-07 17:15
#23

我查到是pahole这个命令是属于dwarves这个包了,所以我是安装dwarves这个安装包,想问一下你是不是也是安装dwarves这个安装包,还是说需要下载源码进行编译安装

直接复制那一行,粘贴浏览器一艘就有了

Reply View the author
fslong
deepin beta test group
2023-10-10 02:20
#24
fslong

应该是没装好吧,我没碰到过。

你是依赖没装上,我特意弄了个wsl测试了下,这两个依赖是debian12的。

http://ftp.de.debian.org/debian/pool/main/libb/libbpf/libbpf1_1.1.0-1_amd64.deb

http://ftp.de.debian.org/debian/pool/main/d/dwarves/pahole_1.24-4.1_amd64.deb

依次安装前面两个就行了。

Reply View the author
Tent
deepin
2023-11-23 21:44
#25

我试过这样(uos下编译kernel.org下的新内核),现在用着倒是还算正常,不清楚有没有其他影响?——

我只是编着自用或装着玩儿,并且用不到debug调试,所以就修改.config文件,关掉了dbg包的编译和打包。

这样只会生成linux-image、linux-header、linux-libc-dev这3个deb包,好处是整个编译打包流程能节省大约一半时间。

操作方法是,把/boot/config-x.x.x复制为.config之后,再修改.config:

sed -ri 's/^(CONFIG_DEBUG_INFO.*)=y/\1=n/' .config

然后再执行编译和打包:

#LOCALVERSION设置为-xxx,从新内核启动后,uname -r执行后会输出6.5.8-xxx
#KDEB_PKGVERSION设置为$(make kernelversion)-xxxx,生成的deb包的版本号为6.5.8-xxxx
#添加olddefconfig参数,避免交互式询问
make olddefconfig bindeb-pkg -j$(nproc) LOCALVERSION=-amd64-desktop-new KDEB_PKGVERSION=$(make kernelversion)-1
Reply View the author
fslong
deepin beta test group
2023-11-23 22:00
#26

没啥影响,基本正常的。

Reply View the author
jiutian123
deepin
2023-11-30 02:02
#27
fslong

现在github还行,运气好有大几百kb/s,运气不好的话就慢一点了,也得有几十kb/s。

我的拉取脚本限定了拉取最新的一个版本和只拉取主线分支,速度还是可以接受的。

差不多抽根烟的功夫就能下来。

后续更新也只需要 git pull,只拉取更新了的,不用全都拉取,应该不会太慢。

make[4]: *** [Makefile:359:__build_one_by_one] 错误 2
make[3]: *** [debian/rules:25:build-arch] 错误 2
dpkg-buildpackage: error: make -f debian/rules binary subprocess returned exit status 2
make[2]: *** [scripts/Makefile.package:146:bindeb-pkg] 错误 2
make[1]: *** [/media/nsz/_dde_data/linux-6.6.3/linux-6.6.3/Makefile:1538:bindeb-pkg] 错误 2
make: *** [Makefile:234:__sub-make] 错误 2

到最后提示这个错误sob

Reply View the author
fslong
deepin beta test group
2023-11-30 07:44
#28
jiutian123

make[4]: *** [Makefile:359:__build_one_by_one] 错误 2
make[3]: *** [debian/rules:25:build-arch] 错误 2
dpkg-buildpackage: error: make -f debian/rules binary subprocess returned exit status 2
make[2]: *** [scripts/Makefile.package:146:bindeb-pkg] 错误 2
make[1]: *** [/media/nsz/_dde_data/linux-6.6.3/linux-6.6.3/Makefile:1538:bindeb-pkg] 错误 2
make: *** [Makefile:234:__sub-make] 错误 2

到最后提示这个错误sob

应该还有别的报错,往前找找。

Reply View the author
哦豁
deepin
2024-02-12 15:27
#29
It has been deleted!
咿呀咿
deepin
2024-06-10 21:07
#30

楼主,我按教程来的,后面报错,但找不到解决方法。

image.png输出.txt 配置.txt

拉最新的,搭配config-6.9.1-dppve-fslong.txt

Reply View the author
fslong
deepin beta test group
2024-06-11 12:34
#31
咿呀咿

楼主,我按教程来的,后面报错,但找不到解决方法。

image.png输出.txt 配置.txt

拉最新的,搭配config-6.9.1-dppve-fslong.txt

得改配置文件,关掉内核模块签名。

百度一下这个报错,有相关的解决方案,具体改的大概是有signed的几个项,看到了我知道,现在说不上来。。

Reply View the author
咿呀咿
deepin
2024-06-11 19:58
#32
fslong

得改配置文件,关掉内核模块签名。

百度一下这个报错,有相关的解决方案,具体改的大概是有signed的几个项,看到了我知道,现在说不上来。。

找到原因了,是缺少lz4😌,配置文件不会不敢改,根据你的回复去问ai,知道怎么看日志,才发现的。其实输出文件也有,但我没看仔细(忘了搜索功能)。🙇‍♂️

Reply View the author
2 / 2
To page