关于ThinkBook 14+/16+ 2022 锐龙版及大部分6000系笔记本安装Linux键盘失灵的解决方案
热腾腾的炒米线
编辑于 2022年12月17日 22:26
收录于文集
共4篇

时隔这么久了,内核升级包已经释放。现在操作很简单,不用编译内核。

  • 针对Ubuntu: 

  1. 去 https://kernel.ubuntu.com/~kernel-ppa/mainline/ 找到您需要的版本(新于5.19.12)

  2. 下载 linux-image-X.Y.Z-generic-*.deb 和 linux-modules-X.Y.Z-generic-.deb 这样格式的两个安装包(不是每个版本都有,X.Y.X是版本号)

  3. 在终端这两个文件的目录下执行下列命令。

代码块
Shell
自动换行
复制代码
sudo dpkg --install *.deb
复制成功

又或者你可以直接使用

代码块
Shell
自动换行
复制代码
sudo apt-get upgrade linux-image-generic
复制成功

以上二选一,不出意外重启就可以了。

  • 其他系统类似,请查找互联网寻找更新内核的操作。

全文,终。


【注意】2022.8.20更新

patch作者(Chuanhong Guo)发布了v6版本补丁,支持所有AMD 锐龙 6000系列处理器用户。https://patchwork.kernel.org/project/linux-acpi/patch/20220712020058.90374-1-gch981213@gmail.com/

我该怎么解决?只看Part.1,并将上方链接作为提到的链接

以下是原文粉色为新增补充)


ThinkBook 14+/16+ 2022 锐龙版(Asus Zenbook S 13 OLED UM5302、Redmi Book Pro 15 2022 Ryzen)由于其独特的IRQ设计,键盘无法兼容原版Linux内核,其反应为键盘像所有键同时按住而卡住,事实的确如此(具体可见我之前的动态)。想要解决此问题,需要修改并重新编译Linux内核,不过好在已经有尚且能用的patch存在,不完美的原因后面会讲到。我环顾互联网,国内还基本没有完整的教程,故写此文。

前提条件,使用外接键盘(触摸板应该是能用的)安装好Linux(我以Ubuntu 22.04为例).Wi-Fi驱动安装教程很多,我就不多说了。我的TB 14+是RTL 8852BE(悲),以后有机会换成AX211.

Part.1-针对ThinkBook G4+/G6+ ARA(没错,小米等请看第二节)所有6000系处理器设备(v6版本之后)

1、首先打开这个网页,可以看到,这是一个内核补丁。

https://patchwork.kernel.org/project/linux-acpi/patch/20220618133712.8788-1-gch981213@gmail.com/(此处请使用文章开头所提到的链接,就是这个 https://patchwork.kernel.org/project/linux-acpi/patch/20220712020058.90374-1-gch981213@gmail.com/

点击"diff&#​34;按钮下载.diff格式的补丁备用  (建议你看完全文再下载,真的,不骗你)

2、打开www.kernel.org,下载你需要的内核(一定要下载tarball啊!!)。作为演示,我选用了6.0-rc1.不建议您使用非稳定版内核。

下载并解压到一个剩余空间>=25GB(我使用了20.0 GB)的地方。你可以使用图形界面完成解压,当然使用tar -zcvf也行。

3、进入解压后的内核文件夹,找到 linux-*.*.*/drivers/acpi/resource.c,记下路径,这是待修补的文件。打开终端,输入 patch 【resource.c路径】 【.diff文件路径】,按回车。此时,resource.c已经修补完毕,你可以打开找到400行左右,看到新增代码。当然你也可以手动修补。注意,16+用户需要把4改成6.  v6新增的内容不是这样的,您不必在意

可以看到新增代码(402~411 & 424)              v6新增的内容不是这样的,您不必在意

4、接下来开始编译内核。过程很简单,贴出一个大佬写的教程(您也可以不参考或参考他人,有问题也可以问我),https://zhuanlan.zhihu.com/p/378149586,他以Ubuntu演示,其他发行版类似。不过如果你在Step.5(2)执行出错,你可能需要使用“ sudo make modules ”。如果你按照他的“可能遇到的问题‍”依然有类似错误,请考虑按照下图清空另一对引号内的内容。内核编译还是比较简单的,报错多半是依赖程序没装好,复制信息必应一下。6800H还是挺厉害的,编译modules只用了19分钟(电池供电).PS. WSL2下更快,不知道巨硬和??做了什么PY交易(笑)

11134 & 11141

重启之后,你会惊奇地发现,你的键盘能用了!

女少,真实太 女少 了!(为了安全起见,我又用同样方法安装了5.15.61 LTS)

如果你使用v6版本补丁,至此应该完美解决问题了


Part.2-其他设备 和 追求完美的14+/16+用户(v6版本补丁之后,下文不再需要)

大致内容与第一节一致,只需要对“3、”进行简单修改。

我们都知道,每台笔记本都有主板型号,Linux内核通过识别主板从而实现特异化功能。也许你已经发现,上文所提供的补丁使用了LNVNB161216这个主板名称进行判断,然而了解Lenovo的朋友应该知道,联想到处都用这块主板!这意味这这个补丁会引起混乱。所以新的补丁在这里:https://patchwork.kernel.org/project/linux-acpi/patch/20220630022317.15734-1-gch981213@gmail.com/

这个补丁自带了对Lenovo ThinkBook 14 G4+ ARA、Asus Zenbook S 13 OLED UM5302、Redmi Book Pro 15 2022 Ryzen的支持,这些设备可以直接使用,不必看后文(当然想看也行)

对于其他设备,需要自写判断条件。在终端输入

代码块
Shell
自动换行
复制代码
sudo dmidecode
复制成功

,然后查找能够区别自己设备的条目,比如DMI_BOARD_NAME、DMI_PRODUCT_NAME,按照示例编写。


Part.3-补丁是如何解决这个问题的?

我之前提到,这些以Zen3+ 6000系为主的设备是以IRQ低电平作为触发信号的,因此补丁专为这些设备新定义的irq1_edge_low_shared这个“别名”,并用

代码块
clike
自动换行
复制代码
{ irq1_edge_low_shared, 1, ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_LOW, 1 }
复制成功

这行代码定义低电平触发。

你说:唉,为不管了,不写条件全部激活行不行?

.......行!只要你觉得优雅就行!

v6补丁并非这个原理,而是检测CPU从而直接跳过 irq_override.

总结

至此,整个解决方案及其原因应该都解释清楚了。当前最新内核(截至6.0-rc1)都没有完美支持,我们想要开箱直用还得等上游合并。不过我们也可以试试给厂商发反馈,要求他们从固件层面修复问题。

最后,感谢Chuanhong Guo提供内核补丁,也感谢您来阅读我写的屑文(如有不完善或错误的地方还请劳烦您评论指出,UP马上开学了,无法及时回复实在抱歉。后续补丁也许会更新,甚至合并到上游,那么这篇文章就完成它的使命了(笑))

感言,Windows是最好的Linux发行版(笑)