给 ubuntu 22.04 编译换上最新的 6.8 内核(生成 deb 包)

编译打包和其他
回复
sxgpic
帖子: 98
注册时间: 2013-12-13 6:57

给 ubuntu 22.04 编译换上最新的 6.8 内核(生成 deb 包)

#1

帖子 sxgpic » 2022-08-18 18:34

6.8 在2024年3月10日发布,以下更新用于编译 6.8 内核。

说明:
1、APFS 更新到0.3.8版本。
2、iso9660文件系统也直接编译进内核。
3、cjktty补丁、内核配置调整等与分隔线以下的 6.7 内核一致,详见 6.7 内核的说明。
4、新内核的新硬件驱动默认编译成模块。

linux 6.8 源代码:
https://cdn.kernel.org/pub/linux/kernel ... 6.8.tar.xz

编译内核所需要的配置文件:
linux-6.8.0.diff.zst.txt
(3.81 MiB) 已下载 19 次
编译:

代码: 全选

tar Jxf linux-6.8.tar.xz
mv linux-6.8 linux-6.8.0
mv linux-6.8.0.diff.zst.txt linux-6.8.0.diff.zst
zstd -d linux-6.8.0.diff.zst
cd linux-6.8.0
patch -p1 <../linux-6.8.0.diff
chmod +x debian/rules
chmod +x -R debian/scripts/*
debuild
第一遍执行 debuild 若提示缺某些包,用 sudo apt-get install --no-install-recommends xxx xxx 补齐后再次执行 debuild。
以后的各个 6.8.x 小版本,按分隔线以下 6.7 内核的办法,用 sed 依次把 6.8.0-3.10 和 6.8.0-3 及 6.8.0 替换掉即可。

================分割线,以下是旧的 6.7 内核================

6.7.2 内核2024年1月25日发布,以下更新用于编译 6.7.2:

编译 deb 包所需的配置文件及这个配置文件的调整说明:
1、添加 APFS 文件系统(2024年1月28日版本,与之前的相比有bug修复),可用于读取苹果 macOS 分区(实验性写入有风险,默认挂载时不开)。
2、以 Canonical 官方核配置为模板,原有配置选项基本与官方内核相同。
3、zswap 和 zram 的压缩方式改为 zstd 。
4、将 CONFIG_CONSOLE_LOGLEVEL_DEFAULT 和 CONFIG_CONSOLE_LOGLEVEL_QUIET 都调整为1。
5、增加了 cjktty 及相关终端CJK内核字体补丁,可直接在字符界面的 tty console 下显示 cjk 字符,例如汉字。
6、常用文件系统和块设备直接编译进内核: ext4、bcachefs、btrfs、xfs、reiserfs、jfs、vfat、exfat、ntfs3、udf、squashfs、overlayfs、fuse、loop、nbd

linux 6.7.2 源代码:
https://cdn.kernel.org/pub/linux/kernel ... 7.2.tar.xz
编译内核所需的配置文件:
linux-6.7.2.diff.zst.txt
(3.8 MiB) 已下载 22 次
下载以上两个,然后依次执行以下指令来编译:
(注意用于编译内核的磁盘需要至少30G空闲空间,否则空间不足会导致编译失败)

代码: 全选

tar Jxf linux-6.7.2.tar.xz
mv linux-6.7.2.diff.zst.txt linux-6.7.2.diff.zst
zstd -d linux-6.7.2.diff.zst
cd linux-6.7.2
patch -p1 <../linux-6.7.2.diff
chmod +x debian/rules
chmod +x -R debian/scripts/*
debuild
执行 debuild 时可能会提示你的系统缺一些编译内核需要用到的软件包,缺什么包就用 apt-get install --no-install-recommends 临时补上,记录下包名编译结束后再 apt-get autoremove --purge 卸载掉。全部满足后再次执行 debuild 即可开始编译,完成后得到以下几个包:

代码: 全选

linux-buildinfo-6.7.2-1-generic_6.7.2-1.28_amd64.deb
linux-cloud-tools-common-6.7.2_6.7.2-1.28_all.deb
linux-doc_6.7.2-1.28_all.deb
linux-headers-6.7.2-1_6.7.2-1.28_all.deb
linux-headers-6.7.2-1-generic_6.7.2-1.28_amd64.deb
linux-image-6.7.2-1-generic_6.7.2-1.28_amd64.deb
linux-libc-dev_6.7.2-1.28_amd64.deb
linux-modules-6.7.2-1-generic_6.7.2-1.28_amd64.deb
linux-source-6.7.2_6.7.2-1.28_all.deb
linux-tools-common-6.7.2_6.7.2-1.28_all.deb
linux-tools-host-6.7.2_6.7.2-1.28_all.deb
我们只需要安装以下几个:

代码: 全选

linux-image-6.7.2-1-generic_6.7.2-1.28_amd64.deb
linux-modules-6.7.2-1-generic_6.7.2-1.28_amd64.deb
linux-headers-6.7.2-1_6.7.2-1.28_all.deb
linux-headers-6.7.2-1-generic_6.7.2-1.28_amd64.deb
linux-libc-dev_6.7.2-1.28_amd64.deb
以后任意 6.7.X 小版本,可用 sed 依次把 6.7.2-1.28 和 6.7.2-1 及 6.7.2 替换成具体的小版本号,替换方法如下(以下三行命令依次执行,不能调换执行顺序):

代码: 全选

sed -i  's/6\.7\.2-1\.28/6\.7\.X-M\.D/g' linux-6.7.2.diff
sed -i  's/6\.7\.2-1/6\.7\.X-M/g' linux-6.7.2.diff
sed -i  's/6\.7\.2/6\.7\.X/g' linux-6.7.2.diff
mv linux-6.7.2.diff linux-6.7.X.diff
其中,X表示小版本号,M表示月,D表示日期,把X、M、D替换成实际的数字即可,例如2024年2月1日发布的6.7.3,这样子替换:

代码: 全选

sed -i  's/6\.7\.2-1\.28/6\.7\.3-2\.1/g' linux-6.7.2.diff
sed -i  's/6\.7\.2-1/6\.7\.3-2/g' linux-6.7.2.diff
sed -i  's/6\.7\.2/6\.7\.3/g' linux-6.7.2.diff
mv linux-6.7.2.diff linux-6.7.3.diff
以上编译的内核在文本终端下可正常显示中日韩UTF8文字,如果要实现在文本终端下输入汉字,建议执行以下操作:
# Enable Pinyin input method on tty consoles:

代码: 全选

sudo apt-get install --no-install-recommends uim-fep uim-pinyin
编辑 ~/.uim,内容如下:

代码: 全选

(define default-im-name 'anthy)
(define-key generic-on-key? '("<Control> "))
(define-key generic-off-key? '("<Control> "))
(define-key generic-next-candidate-key? '("." "down" "<IgnoreCase><Control>n"))
(define-key generic-prev-candidate-key? '("," "up" "<IgnoreCase><Control>p"))
编辑 /etc/profile 加入以下内容使登入tty文本终端时自动载入uim-fep输入法框架:

代码: 全选

TTY=`tty`
TTY=`basename "$TTY"`
case "$TTY" in
  tty0? | tty1? | tty? )
    uim-fep -u py
    ;;
  *)
    ;;
esac
================分割线,以下是旧的 6.6 内核================

6.6 内核2023年10月30日发布,以下更新用于编译 6.6.0:

linux 6.6 源代码:
https://cdn.kernel.org/pub/linux/kernel ... 6.6.tar.xz

编译方法同分隔线以下的 6.2 内核,内核配置也基本同 6.2 内核。
linux-6.6.0-compile.tar.xz
(1.76 MiB) 已下载 38 次
以后的 6.6.x小版本,搜索linux-compile-6.6.0.tar.xz内的所有文件,用 sed 把6.6.0替换成具体的小版本号即可。

================分割线,以下是旧的 6.2 内核================

6.2 内核2023年2月19日发布,我们可以从 https://kernel.org 下载回来,配置编译成 deb 包给 22.04 系统换上。

linux 6.2 源代码:
https://cdn.kernel.org/pub/linux/kernel ... 6.2.tar.xz

编译 deb 包所需的配置文件及这个配置文件的调整说明:
1、我们额外添加 APFS 文件系统,可用于读取苹果 macOS 分区,实验性写入最好不要尝试。
2、以 Canonical 官方5.x内核配置为模板,原有配置选项基本与官方内核相同。
3、zswap 和 zram 都采用 zstd 压缩。
4、将 CONFIG_CONSOLE_LOGLEVEL_DEFAULT 和 CONFIG_CONSOLE_LOGLEVEL_QUIET 都调整为1。
5、常用文件系统和块设备直接编译进内核: ext4、btrfs、xfs、reiserfs、jfs、vfat、exfat、ntfs3、udf、squashfs、overlayfs、fuse、loop、nbd
linux-meta-5.19.2.08.18.tar.xz
(17.33 KiB) 已下载 102 次
下载以上两个,然后依次执行以下指令来编译:

代码: 全选

tar Jxf linux-6.2.tar.xz
mv linux-6.2 linux-6.2.0
tar Jxf linux-6.2.0-compile.tar.xz
cp -a linux-6.2.0-compile/* linux-6.2.0/
tar czf linux-6.2.0_6.2.0.orig.tar.gz linux-6.2.0
cd linux-6.2.0
debuild
执行 debuild 时可能会提示你的系统缺一些编译内核需要用到的软件包,缺什么包就用 apt-get install --no-install-recommends 临时补上,记录下包名编译结束后再 apt-get autoremove --purge 卸载掉。全部满足后再次执行 debuild 即可开始编译,完成后得到以下几个包:

代码: 全选

linux-buildinfo-6.2.0-02-generic_6.2.0-02.22_amd64.deb
linux-headers-6.2.0-02_6.2.0-02.22_all.deb
linux-libc-dev_6.2.0-02.22_amd64.deb
linux-tools-common-6.2.0_6.2.0-02.22_all.deb
linux-cloud-tools-common-6.2.0_6.2.0-02.22_all.deb
linux-headers-6.2.0-02-generic_6.2.0-02.22_amd64.deb
linux-modules-6.2.0-02-generic_6.2.0-02.22_amd64.deb
linux-tools-host-6.2.0_6.2.0-02.22_all.deb
linux-doc_6.2.0-02.22_all.deb
linux-image-6.2.0-02-generic_6.2.0-02.22_amd64.deb
linux-source-6.2.0_6.2.0-02.22_all.deb
我们只需要安装以下几个:

代码: 全选

linux-image-6.2.0-02-generic_6.2.0-02.22_amd64.deb
linux-modules-6.2.0-02-generic_6.2.0-02.22_amd64.deb
linux-headers-6.2.0-02_6.2.0-02.22_all.deb
linux-headers-6.2.0-02-generic_6.2.0-02.22_amd64.deb
linux-libc-dev_6.2.0-02.22_amd64.deb
安装好以上新内核的 deb 包后,强迫症患者还可能需要几个meta包。下载
linux-6.2.0-compile.tar.xz
(1.75 MiB) 已下载 64 次
,解压进入 linux-meta-6.2.0.02.22 目录,执行 debuild 生成一大堆 deb 包,安装以下三个:

代码: 全选

linux-generic-hwe-22.04_6.2.0.02.22_amd64.deb
linux-headers-generic-hwe-22.04_6.2.0.02.22_amd64.deb
linux-image-generic-hwe-22.04_6.2.0.02.22_amd64.deb
需要注意的是,有些旧的 dkms 额外驱动可能还没有适配新的 6.2 内核,编译模块会出错,需要更新这些 dkms 驱动包。比如 v4l2loopback-dkms 需要升级到 0.12.7-2ubuntu2~22.04.1,broadcom-sta-dkms 需要升级到 6.30.223.271-23~22.04.1,等等。

================分割线,以下是旧的 5.19.2 内核================

主线内核 5.19.2 于今天发布,从 https://kernel.org 下载回来,配置完毕编译成 deb 包给 22.04 系统换上。

相比于 5.15.x ,新内核有一些对新机器和新硬件支持的改进,编译配置都选上,另外顺便添加了对苹果 APFS 文件系统的支持。相比于 https://kernel.ubuntu.com/~kernel-ppa/mainline/ 的测试内核,配置上做了细节调整,比如 zswap 和 zram 都采用 zstd 压缩,其他跟旧内核一致的配置选项基本跟 ubuntu 正式版的 5.15.x 保持一致,但将 CONFIG_CONSOLE_LOGLEVEL_DEFAULT 和 CONFIG_CONSOLE_LOGLEVEL_QUIET 都调整为1,关闭讨厌的 console 信息输出,在启动时不会出现一大堆文字滚屏,看起来更美观些。新内核配置补丁,包含 deiban 目录和 debian.master 目录以及 apfs 驱动:
linux-5.19.2-ubuntu22.04.patch.zst.txt
(1.72 MiB) 已下载 97 次
去掉 .txt 后缀得到 linux-5.19.2-ubuntu22.04.patch.zst ,用 zstd 解压:

代码: 全选

zstd -d linux-5.19.2-ubuntu22.04.patch.zst
https://kernel.org 下载 linux-5.19.2.tar.xz 回来:

代码: 全选

tar Jxf linux-5.19.2.tar.xz
cd linux-5.19.2
patch -p1 <../linux-5.19.2-ubuntu22.04.patch
chmod +x debian/rules
chmod +x -R debian/scripts/*
debuild
如果提示缺什么包就用 apt-get install --no-install-recommends 临时补上,记录下包名编译结束后再 apt-get autoremove --purge 卸载掉。编译过程中有两三个无关紧要的询问,直接回车过,编译完得到以下几个包:

linux-buildinfo-5.19.2-08-generic_5.19.2-08.18_amd64.deb
linux-cloud-tools-common-5.19.2_5.19.2-08.18_all.deb
linux-doc_5.19.2-08.18_all.deb
linux-headers-5.19.2-08_5.19.2-08.18_all.deb
linux-headers-5.19.2-08-generic_5.19.2-08.18_amd64.deb
linux-image-5.19.2-08-generic_5.19.2-08.18_amd64.deb
linux-libc-dev_5.19.2-08.18_amd64.deb
linux-modules-5.19.2-08-generic_5.19.2-08.18_amd64.deb
linux-source-5.19.2_5.19.2-08.18_all.deb
linux-tools-common-5.19.2_5.19.2-08.18_all.deb
linux-tools-host-5.19.2_5.19.2-08.18_all.deb

安装以下五个即可:
linux-image-5.19.2-08-generic_5.19.2-08.18_amd64.deb
linux-modules-5.19.2-08-generic_5.19.2-08.18_amd64.deb
linux-headers-5.19.2-08-generic_5.19.2-08.18_amd64.deb
linux-headers-5.19.2-08-generic_5.19.2-08.18_amd64.deb
linux-libc-dev_5.19.2-08.18_amd64.deb

注意 linux-image-5.19.2-08-generic_5.19.2-08.18_amd64.deb 和 linux-modules-5.19.2-08-generic_5.19.2-08.18_amd64.deb 相互依赖,得手动同时安装,执行两次

代码: 全选

dpkg -i linux-image-5.19.2-08-generic_5.19.2-08.18_amd64.deb linux-modules-5.19.2-08-generic_5.19.2-08.18_amd64.deb
然后再安装其他三个包:

代码: 全选

dpkg -i linux-headers-5.19.2-08-generic_5.19.2-08.18_amd64.deb linux-headers-5.19.2-08-generic_5.19.2-08.18_amd64.deb linux-libc-dev_5.19.2-08.18_amd64.deb
另外如果想要更新几个 meta 包到最新版,下载这个
linux-5.19.2-ubuntu22.04.patch.zst.txt
(1.72 MiB) 已下载 97 次
在安装好以上新内核的 deb 包后,解压进入 linux-meta-5.19.2.08.18 目录,执行 debuild 生成一大堆 deb 包,安装以下三个:
linux-image-generic-hwe-22.04_5.19.2.08.18_amd64.deb
linux-headers-generic-hwe-22.04_5.19.2.08.18_amd64.deb
linux-generic-hwe-22.04_5.19.2.08.18_amd64.deb

重启用新内核引导,一切OK,卸载掉所有 5.15.x 相关的包。
注意博通无线网卡驱动 broadcom-sta-dkms、虚拟摄像头驱动 v4l2loopback-dkms 都得手动升级到最新版才能支持 5.19 内核,在 ubuntu 仓库里下载 22.10 的包在 22.04 里装上即可。broadcom-sta-dkms 必须要更新到 6.30.223.271-20 或以上,v4l2loopback-dkms 必须要更新到 0.12.7-2ubuntu1 或以上,下载连接:

broadcom-sta-dkms_6.30.223.271-20_all.deb
v4l2loopback-dkms_0.12.7-2ubuntu1_all.deb
附件
linux-meta-6.2.0.02.22.tar.xz
(17.3 KiB) 已下载 64 次
上次由 sxgpic 在 2024-03-11 19:06,总共编辑 24 次。
sxgpic
帖子: 98
注册时间: 2013-12-13 6:57

Re: 给 ubuntu 22.04 编译换上最新的 5.19.2 内核(生成 deb 包)

#2

帖子 sxgpic » 2022-09-02 16:06

主线内核小版本更新很快,但变化不大,主要是bug修复,对于这些新的小版本,直接把 linux-5.19.2-ubuntu22.04.patch 里的小版本号替换掉就可以套用,例如 5.19.x :

代码: 全选

mv linux-5.19.2-ubuntu22.04.patch linux-5.19.x-ubuntu22.04.patch
sed -i 's/5.19.2-08.18/5.19.x-xx.xx/g' linux-5.19.x-ubuntu22.04.patch
编译时可能会有少数几个新的配置项询问,手动选一下。

更新:
linux-5.19.8-debian.patch.zst.txt
(1.72 MiB) 已下载 96 次
回复