0 前言
新到的Thinkbook 14+ AMD 6800h 到手后迫不及待的试图安装双系统Win11+Archlinux
由于是新笔记本新CPU,在安装过程中出现了许多问题,特意记录一下。
1. 安装windows11
出厂windows带了太多捆绑软件,包括但不限于联想管家等。本人选择重新安装
-
使用rufus将windows11镜像烧录至U盘制作系统启动盘
-
启动阶段按
F12
(不需要按住Fn
)进入启动选项,选择USB启动 -
windows安装一路点点点就好
-
安装驱动
由于windows镜像中不包含螃蟹无线网卡的驱动,在安装系统连接网络部分选择连接网线(这款笔记本居然有网口)。
当然也可以选择进入系统后安装驱动,驱动由联想官方提供,下载后直接安装即可
-
设置中文输入法
安装系统后发现微软拼音不出现候选词,而是直接敲回车后出现文字
解决方法:在键盘中其启用旧版微软拼音,具体操作流程如下
设置 -> 时间和语言 -> 语言&区域 -> Microsoft拼音 -> 常规 -> 兼容性 -> 使用以前版本的微软拼音输入法
2. 安装Archlinux
2.1 系统安装
Arch Linux系统安装过程整体上与archlinux 简明教材一致,主要差别在于我使用sysemd-boot作为bootloader进行系统的引导,没有采用原文中较为臃肿的grub2进行系统引导。
需要改变的地方
-
EFI分区挂载点不同
原文在基础安装 步骤8将EFI分区挂载到系统镜像
/boot/efi
,要持续更新内核,建议将 ESP 挂载到/boot
,安装内核时会自动复制到/boot
目录下. 如果没将 ESP 挂载到/boot
,需要手动将内核和 initramfs 复制到 ESP1
2
3
4
5
6mount -t btrfs -o subvol=/@,compress=zstd /dev/nvmexn1pn /mnt # 挂载 / 目录
mkdir /mnt/home # 创建 /home 目录
mount -t btrfs -o subvol=/@home,compress=zstd /dev/nvmexn1pn /mnt/home # 挂载 /home 目录
mkdir -p /mnt/boot # 创建 /boot/efi 目录
mount /dev/nvmexn1pn /mnt/boot # 挂载 /boot/efi 目录
swapon /dev/nvmexn1pn # 挂载交换分区 -
bootloader不同
原文在基础安装 步骤17使用grub进行引导,由于不需要引导legacy或者其他的系统,我选择仅支持EFI启动的systemd-boot作为bootloader,具体步骤如下
-
安装 systemd-boot EFI 启动管理器
1
2esp=/boot #EFI分区挂载点
bootctl --path=$esp install -
启动菜单配置
启动菜单文件位于
$esp/loader/loader.conf
,内容示例如下1
2
3
4default arch.conf
timeout 4
console-mode max
editor no -
增加启动选项
如果存在的话,bootctl 会自动为 “Windows Boot Manager (Windows 启动管理器)” (
\EFI\Microsoft\Boot\Bootmgfw.efi
), “EFI Shell” (\shellx64.efi
) 和 “EFI Default Loader” (\EFI\Boot\bootx64.efi
)增加启动选项. 但并不会为其他EFI应用程序创建启动选项,所以需要进行进一步设置. 如果你是和Windows 组成双重启动,建议禁用 Windows 中的"快速启动" 选项.为archlinux增加启动选项,新建文件
$esp/loader/entries/arch.conf
内容如下,实际上就是kernel的启动参数
1
2
3
4
5title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options root=PARTUUID=14420948-2cea-4de7-b042-40f67c618660 rw rootflags=subvol=@
-
4. reboot 重启即可进入进入系统选择界面进入系统
2.2 内置键盘失灵
ThinkBook 14+/16+ 2022 锐龙版(AMD 锐龙 6000系列处理器 )由于其独特的IRQ设计,键盘无法兼容原版Linux内核,其反应为键盘像所有键同时按住而卡住,想要解决此问题,需要打上path进行修改并重新编译Linux内核
这里采用ABS(Arch Build System)进行自定义kernel的编译(既然archlinux提供了好用的构建系统,为何不用呢:) )
主要步骤参考Kernel/Arch Build System,这里贴出自己的全部过程
-
新建编译目录
1
2mkdir -p ~/build
cd ~/build -
安装asp 和base-devel
1
sudo pacman -S asp base-devel
-
获取原始内核作为自己编译kernel的基础
1
2asp update linux #由于网络问题我无法更新,不影响
asp export linux执行完后查看目录树应该是这样
1
2
3
4
5
6
7
8
9
10
11
12.
└── linux
├── config
├── keys
│ └── pgp
│ ├── 647F28654894E3BD457199BE38DBBDC86092693E.asc
│ ├── A2FF3A36AAA56654109064AB19802F8B0D70FC30.asc
│ ├── ABAF11C65A2970B130ABE3C479BE3E4300411886.asc
│ └── C7E7849466FE2358343588377258734B41C31549.asc
└── PKGBUILD
3 directories, 6 files -
下载需要打上的补丁,并放在与PKGBUILD同级目录下(改为patch后缀是因为ABS会自动为后缀为patch进行打补丁)
1
2cd linux
wget https://patchwork.kernel.org/project/linux-acpi/patch/20220712020058.90374-1-gch981213@gmail.com/raw -O irq.patch #下载diff文件并重命名为irq.patch(你也可以手动的下载diff文件) -
修改PKGBUILD文件
找到
pkgbase
修改为自定义软件包的名称1
pkgbase=linux-test
如果你想要直接替换原有的kernel,就可以不改。改了之后你要更新引导加载程序的配置文件,为新的内核和initramfs映像添加新的引导菜单项。
找到
source
数组(18行左右)添加需要打的patch1
2
3
4
5source=(
"$_srcname::git+https://github.com/archlinux/linux?signed#tag=$_srctag"
irq.patch # 下载的补丁
config # the main kernel config file
)为提高编译速度,可采用多线性并行编译,找到build(63行左右),修改,可以自己选择线程数,还可以参考Kernel/Arch Build System的2.1避免创建文档
1
2
3
4build() {
cd $_srcname
make all -j 16
} -
生成新校验和
1
2sudo pacman -S pacman-contrib
updpkgsums -
编译
1
2sudo pacman -S pahole cpio xmlto python-sphinx python-sphinx_rtd_theme graphviz imagemagick texlive-latexextra #安装必要依赖
makepkg -s --skippgpcheck -
安装
编译完成后,
build/linux
文件夹中应有两个包,分别是内核和内核的头文件。进行安装(会在/boot下生成initramfs-linux-test和vmlinuz-linux-test)1
pacman -U linux-test-5.19.19-x86_64.pkg.tar.zst linux-custom-headers-5.8.12-x86_64.pkg.tar.zst
-
为新的kernel配置启动项,见本文2.1中的增加启动选项
-
如果更换了内核,别忘了把之前在原来内核的软件重新装一遍,比如说桌面环境,我发现后续在新内核安装的程序在桌面应用程序找不到,重新安装一下kde就好了
2.3 网卡驱动
安装8852be驱动
2.4 无法播放声音
声卡驱动有,但是无法播放声音,缺失alas固件
解决方法
1 | sudo pacman -S sof-firmware alsa-ucm-conf |