简介
目的
解决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。。但每次安装就出错。。。绝了
参考
- 深度Linux内核计划
- deepin linux–源码编译安装软件通用步骤
- 如何编译 Linux 内核 :单线程编译耗时长,而且粘贴的代码少了许多东西。。如何开启多线程编译在文章里
- Linux系统编译新内核、增加系统调用实验【Deepin版】 - szdmxg
- 为Deepin Linux编译内核 - 爱拼安小匠:使用内核源码自带的配置文件,手动配置,讲解十分细致到位
- 如何编译 Linux 内核 作者: Jack Wallen 译者: LCTT Luke| 2018-05-22 :我make的时候并没有回答啥问题。
- 【解决】深度操作系统Linux Deepin 20 内核5.10手动降级-附上大佬解决5.10中失去蓝牙的办法。
- Linux Deepin蓝牙更新内核后无法使用的问题的各种方法尝试-service\heitool\hciconfig\blueman
- make命令参数和选项大汇总
- 清除编译的内核源码文件 sdd220
make clean:清理大多数编译生成的文件,但会保留config文件等 make install 后再执行,不然 make install 会因为找不到需要安装的东西而重新make
make mrproper: 清理所有编译生成的文件、 config及某些备份文件,几乎只在第一次执行内核编译前才用这条命令
make distclean: mrproper、 patches以及编辑器备份文件
- Linux有问必答:如何在Linux上安装内核头文件 译者: LCTT geekp
- 内核头文件使用 wangliang888888:平时我们在编译应用程序的时候,不可避免的会使用内核头文件,比如v4l2,字符驱动等等。