[Share Experiences] 编译打包deb内核
Tofloor
poster avatar
青稚
deepin
2023-05-07 04:06
Author

如果配置高可以考虑Vmbox编译,话不多说,开始教程。
1.开启源码仓库
为了可以使用 apt build-dep linux 自动安装编译所需的依赖,需要先为 apt 配置源码仓库
2.编辑 /etc/apt/sources.list,有些发行版(如Ubuntu)默认将 deb-src 开头的源码仓库注释掉了,只需要取消注释就可以了;而 UOS没有,所以UOS要编译就得添加:
echo "deb-src https://home-packages.chinauos.com/home plum main contrib non-free" >> /etc/apt/sources.list
3.安装需要的依赖

4.编辑 /etc/apt/sources.list 后执行sudo apt update

5.浏览器下载内核源码,(也可以安装 wget 下载内核源码包:sudo apt install -y wget)

6.自动下载编译所需的依赖执行命令:sudo apt build-dep -y linux
开始编译
7.下载需要的源码
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.3.1.tar.xz(wget下载方式,浏览器下载就不过多描述了)

8.解压文件,这里用命令解压,也可以用压缩软件解压

tar -xf linux-6.3.1.tar.xz

9.进入解压目录,也可以用文件管理打开目录后,打开终端

cd linux-6.3.1/

10.复制内核配置文件

cp /boot/config-"$(uname -r)" .config

11.编译deb

make deb-pkg -j4(根据自己CPU线程数修改j8,j11等)

12.我们只需要 linux-headerslinux-image 开头的两个 deb 文件,名字中带有 dbg,是调试内核用的。

13.双击 deb 文件安装,或者 sudo dpkg -i *.deb 安装

14.如果提示缺少git仓库,在编译内核目录输入以下命令

git init

git add .

git commit -m "1"

15.如果编译快完成提示zstd报错,咱们不要慌。

执行sudo aptitude install zstd

之后重新输入命令编译就可以了,不用担心之前的编译数据丢失。

16.完结

Reply Favorite View the author
All Replies
2 / 2
To page
浪云
deepin
2023-07-06 18:51
#21

有没有可能箱定制PE那样

只有打勾几个自己的配置单就可以定制出自己内核的程序

Reply View the author
raspbian
deepin
2024-02-08 16:41
#22

请问第三步 安装所需依赖 具体是哪些软件呢?

Reply View the author
青稚
deepin
2024-02-08 16:43
#23
raspbian

请问第三步 安装所需依赖 具体是哪些软件呢?

sudo apt build-dep -y linux

Reply View the author
raspbian
deepin
2024-02-08 20:01
#24
青稚

sudo apt build-dep -y linux

我按照这个方法编译 并且安装了deb包 到最后一步重启的时候 重启后播放完开机动画就卡在哪里了 没有任何显示

电脑是小米准系统 12代cpu

这有可能是什么问题导致的?

排除了一下问题 无法加载dm

cli模式下 /目录占用100% 什么也安装不了

之前没遇到这种问题 不知道如何下手

是我傻了

排除了无数种可能

最后才发现

真的是硬盘满了

pF3EK4x.png

Reply View the author
186******75
deepin
2024-04-12 12:39
#25

10.复制内核配置文件

cp /boot/config-"$(uname -r)" .config

这一步你的自己电脑配置,你打的包会很少,只能在自己的电脑上用,不能分发的,到别人电脑上就没有用了。我也打了但是只有十几M,自己电脑可以启动的。

Reply View the author
青稚
deepin
2024-04-12 15:22
#26
186******75

10.复制内核配置文件

cp /boot/config-"$(uname -r)" .config

这一步你的自己电脑配置,你打的包会很少,只能在自己的电脑上用,不能分发的,到别人电脑上就没有用了。我也打了但是只有十几M,自己电脑可以启动的。

这个是复制当前使用内核的config,那个内核只能在你自己的设备上使用,所以编译出来的内核也是如此。

Reply View the author
186******75
deepin
2024-04-12 17:14
#27
青稚

这个是复制当前使用内核的config,那个内核只能在你自己的设备上使用,所以编译出来的内核也是如此。

那怎么编译通用内核打包了?

Reply View the author
186******75
deepin
2024-04-13 07:04
#28

make deb-pkg -j4执行后,所有的全按回车,最后出现error: creating source package requires git repository
make[2]: *** [scripts/Makefile.package:38:check-git] 错误 1
make[2]: *** 正在等待未完成的任务....
Not a git repository
To compare two paths outside a working tree:
usage: git diff [--no-index]

就退出了,问怎么解决这个错误问题?

Reply View the author
青稚
deepin
2024-04-13 07:30
#29

V23编译内核省略自动下载编译所需的依赖执行命令:sudo apt build-dep -y linux

改为编译所需的依赖执行命令:sudo apt install libncurses5-dev openssl libssl-dev build-essential pkg-config libc6-dev bison flex libelf-dev zlibc minizip libidn11-dev libidn11 qttools5-dev liblz4-tool

sudo apt install git wget fakeroot ncurses-dev xz-utils bc zstd debhelper

如果提示源内没有依赖不用管,不需要安装。

Reply View the author
青稚
deepin
2024-04-13 07:44
#30
186******75

make deb-pkg -j4执行后,所有的全按回车,最后出现error: creating source package requires git repository
make[2]: *** [scripts/Makefile.package:38:check-git] 错误 1
make[2]: *** 正在等待未完成的任务....
Not a git repository
To compare two paths outside a working tree:
usage: git diff [--no-index]

就退出了,问怎么解决这个错误问题?

仔细看贴是关键:

14.如果提示缺少git仓库,在编译内核目录输入以下命令:

git init

git add .

git commit -m "1"

注意:如果没有用过git先输入(可以不修改直接输入:

git config --global user.name "Your Name"

git config --global user.email "[email protected]"

Reply View the author
青稚
deepin
2024-04-13 07:48
#31
186******75

那怎么编译通用内核打包了?

提取其他内核的config在deepin上面编译。

下载其他内核的image,解包用压缩软件,找到里面的boot目录,那里面就有config。

不推荐使用ubuntu的config编译,deepin开不了机。

Reply View the author
186******75
deepin
2024-04-13 11:13
#32
青稚

都n就可以了,如果你有动手能力建议自己根据情况调整模块。

如果 手动按n和回车,这个很花时间呀?

Reply View the author
186******75
deepin
2024-04-13 11:40
#33

shell

scripts/config --disable DEBUG_INFO
Reply View the author
青稚
deepin
2024-04-13 16:23
#34
186******75

如果 手动按n和回车,这个很花时间呀?

不是很花时间,直接回车就行,它就是默认推荐的选项了。

Reply View the author
raspbian
deepin
2024-07-05 23:33
#35
DebuggerX
  1. 禁用DEBUG_INFO可以极大减少编译所需的时间和空间,也就是避免生成那个很大的dbg.deb
  2. 可以利用github action去自动化编译

具体可以参考我的这篇博客:

https://www.debuggerx.com/2021/08/17/Using-github-actions-to-build-kernel-deb-packages/

我看了你这个教程 有一个疑问 如果GitHub上和我要编译内核的Linux发行版的gcc版本不一致会不会产生问题

Reply View the author
2 / 2
To page