Bootstrap

为Deepin编译Linux 5.10内核的悲伤故事经历:从入门到卸载

简介

目的

解决Linux Deepin在更新内核到5.10后无法使用蓝牙的问题。
硬件:联想小新13 Pro 2020 AMD R5 4600U
OS: win 10 + deepin 20

原因

尝试过的方法:

为什么打算用编译来解决这个问题?
其它方法我都尝试过了均无法解决。。。目前还剩下的希望来自 Deepin 升级1005后没有蓝牙或没有声音问题解决方案 kirin2020:重新编译内核解决。。
其实也可以更换OS,windwos目前十分稳定,fedora的kde和gnome版本都体验过live版,gnome丑的一批。。kde安装过程出错了。。

为什么讨厌它却又整体搞它?
讨厌是因为deepin-wine5自己打自己脸,一边挂着GPL3一边不开源deepin-wine5;一边是被论坛的人怼了有点不开心,吃一顿忘掉这件事,不要和三观不一样的人持久战,你说的都对。商店也是让人头大。喜欢是因为在很早深度就开始做linux OS了,而现在统信入局了,持观望态度
在这里插入图片描述或许我还不是一个资深的Linux Developer,只能在论坛里看看有啥能回答的,哪里有bug需要提交反馈issue,能解决OS重大问题的暂时没发现。。解决一些平时使用中的问题并发帖交流。

现在的样子

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载内核

选择内核

Linux 原装内核: https://www.kernel.org/ 可选择stable或者LTS
Linux内核各个发行版合集
Debian社区内核自行编译手书: https://kernel-team.pages.debian.net/kernel-handbook/ch-common-tasks.html#s-common-official
Ubuntu社区内核: https://ubuntu.com/kernel

Fedora社区内核(和Debian不是一个派系的): https://fedoraproject.org/wiki/Kernel

下载内核及相关工具

出于简单好找考虑,选一个开山鼻祖大神的原装内核吧,不要直接点击后面的tarball下载。。慢的想死
在这里插入图片描述
所以必须要找镜像站点下载,cdn已经考虑过这个问题了。当然也可以直奔清华镜像的linux kernel去下载,速度飞起

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.16.tar.xz

安装内核编译工具

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

下图是我分别从清华镜像和官方网站下的内核,官方下的tarball虽然体积小一点,但是下载速度不行。。。强烈建议cdn下载或者清华镜像
在这里插入图片描述

解压内核

说实话,看了不少帖子,很少有人说自己在哪个文件夹/路径下编译,那这里推测出这个在哪里并不重要。

tar xvzf linux-5.10.16.tar.gz
# 进入解压目录
cd linux-5.10.16

配置内核

内核的配置文件都在/boot目录下

在这里插入图片描述

可以向下面一样复制一份当前内核的配置文件作为参考,

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

但是我当前5.10.5内核并不靠谱,蓝牙没了,5.7.7的内核支持硬件都正常,因此我选择拷贝5.7内核配置
也可以通过git来对比两个文件发生了那些变化,最后没看出来啥,还是直接复制5.7内核配置吧。。
在这里插入图片描述

# 直接复制5.7内核配置
cp /boot/config-5.7.7-amd64-desktop .config

# 开始配置
make menuconfig

在这里插入图片描述

menuconfig的操作方法简单直观,在界面上部就已经列出了,改变选项值除了按“Y/N/M”三个键之外,还可用空格。可以键入问号(即Shift+问号键)来查看帮助,键入斜杠(/)来检索设置项。
值得注意的是,一些组件在编译时可以选择将其编译到内核中(显示为[]和<>)或是编译为模块(显示为[M]和)。编译到内核中就成为了内核的一部分;而编译成为模块则会被安装到指定的目录中,使用modprobe等工具加载。
https://www.jianshu.com/p/9fbdfd919fc0

1、启用蓝牙支持
内核中的蓝牙选项位于【Network Settings】 --> 【Bluetooth subsystem support】,先选中【Bluetooth subsystem support】,然后按”Y“,勾选它:
在Deepin系统中启用蓝牙支持,解决蓝牙指示灯亮但看不到有关的设置
2、启用特定类型蓝牙设备协议支持
【Bluetooth subsystem support】中有子菜单,按回车进入,如下所示:
在Deepin系统中启用蓝牙支持,解决蓝牙指示灯亮但看不到有关的设置
其中有几个选项,控制特定类型蓝牙设备协议的支持,一般全部启用
https://bbs.deepin.org/zh/post/208149

简单的说我把蓝牙下所有能变成yes都变了yes,说实话,如果5.7的配置能正常,我这里为什么还要修改呢。。。阿哲。。
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述说实话没啥需要配置的,比较5.7的配置清单可以工作。。然后Save保存,然后exit退出

编译内核

-j后面的参数是线程数,我的cpu六核心12线程,6~12挑一个,比较系统也要占用cpu

# 多线程编译内核
make -j12

10:12-11:17
后来我第二次编译的时候选择24个线程数量,编译了25mins

在这里插入图片描述

安装模块和内核

大概十分钟吧

# 安装模块
sudo make modules_install

# 安装内核
sudo make install

# 安装头文件
sudo make headers_install

这个头文件不是很理解。。whatever,程序员嘛,那就安装头文件,虽然其他帖子里也没有这一步呗
Debian、Ubuntu、Linux Mint默认头文件在/usr/src下。

设置启动

# 启用新内核来作为引导
sudo update-initramfs -c -k 5.10.16

# 更新 grub
sudo update-grub

清理文件

编译清理
编译后,如果对内核源码进行了一些修改,或是同一个内核源码用来给多个设备进行编译,一般都需要进行一番清理。
sudo make clean
sudo make distclean
make clean只会清理编译输出的文件,如*.o(目标代码)、*.cmd(编译命令记录)等,而保留当前内核的配置文件,便于重新编译;而make distclean的清理则比较彻底,会将内核配置文件、内核配置程序的可执行文件等(如menuconfig的可执行文件)一并清除。
为Deepin Linux编译内核 - 爱拼安小匠](https://www.jianshu.com/p/9fbdfd919fc0)

清理之后可用空间大小增加了将近20G。。。

重启

重新启动之后应该会进入新内核的OS,但是我emm黑屏了。。裂开好吧
上次用apt安装5.4内核也是黑屏

卸载办法1

# 列出当前已经安装的内核
dpkg --get-selections| grep linux-image

# 卸载内核,purge参数会把相关的header也清除
sudo apt remove --purge linux-image-5.10.5-amd64-desktop+ 

# 刷新引导菜单
sudo update-grub

在这里插入图片描述
然后我发现我删除了5.10.5的???我现在用的就是这个啊。。。我去。。我要删的应该是5.10.16啊。。裂开
可是dpkg出来的结果压根就没有5.10.16让我选???可是更新grub里面就有??这就离谱
在这里插入图片描述
绝了,这样我还是会进入5.10.16的黑屏,解决办法 【解决】深度操作系统Linux Deepin 20 内核5.10手动降级-附上大佬解决5.10中失去蓝牙的办法。

grep menuentry /boot/grub/grub.cfg

在这里插入图片描述三个菜单项、第一个菜单项(对于0)里有两个子菜单(对应0、1)

sudo nano /etc/default/grub
# GRUB_DEFAULT="1> 1"

sudo update-grub

卸载办法2

由于上面的办法对我的5.10.16无效。。还把我的5.10.5错误卸载了。。于是便bing搜索内核安装在啥地方。。。/usr/lib/modules,然后手动删除,由于第二次对比了空间大小我发现只删除这个地方的5.10.16压根不彻底,磁盘空间就摆在那里。。。于是我突然想到了文件搜索功能。。
进入计算机-系统盘(我就给Deepin分了一个盘),然后搜索*5.10*,出现的结果按时间排序,如果是今天的时间,O(∩_∩)O哈哈~再见。就这样一下子释放20多G的空间
在这里插入图片描述

总结

虽然编译安装成功,但是黑屏,卸载办法也不能成功卸载,在dpkg或者apt里面压根就没有出现新内核。。虽然可以在启动项中发现。。清理文件的操作确实减小了不少空间,但是我第二次编译安装后再卸载时进行了空间对比,然后发现空间多出了十多G,我编译安装卸载了两次。。。。也就是多出了20G。。。才使我想出办法2释放空间。。虽然空间足够。。也想过压缩Deepin的空间在分出一个盘符装Fedora。。后来怕压缩影响deepin。。。就又从win下压了110g出来给fedora。。但每次安装就出错。。。绝了

参考

make clean:清理大多数编译生成的文件,但会保留config文件等 make install 后再执行,不然 make install 会因为找不到需要安装的东西而重新make
make mrproper: 清理所有编译生成的文件、 config及某些备份文件,几乎只在第一次执行内核编译前才用这条命令
make distclean: mrproper、 patches以及编辑器备份文件

;