☰
2018款MacBook Pro装Arch Linux双系统与T2适配实践
2026/10/27 4:13:33 网站建设 项目流程

1. 为什么 2018 款 MacBook Pro 装 Arch Linux 双系统值得折腾

先说结论:2018 款 MacBook Pro 安装 Arch Linux 双系统这件事,难的不是装系统,难的是让这台机器上的键盘、触控板、网卡、扬声器在 Linux 下正常出声出字。这两件事的难度差了一个数量级,很多人卡在第一步就放弃了,其实真正劝退人的是第二步。我自己在这台机器上来回折腾过好几轮,从最初对着黑屏一筹莫展,到后来能稳定日常使用,中间踩的坑足够写一篇长文,索性把过程完整梳理一遍。

先把话说在前面,这台机器有个绕不开的核心角色——T2 安全芯片。它把 SSD 控制器、摄像头、音频、指纹、键盘触控板控制器这堆外设都收编到了自己门下,导致标准 Linux 内核根本认不出这些硬件。你在普通 PC 上插着 U 盘按 F12 就能装系统,在这台机器上,你会发现启动到安装介质之后,lsblk里根本看不到内置硬盘——因为那块 NVMe 是由 T2 接管的。所以任何讲"2018 款 MacBook Pro 装 Arch Linux"的教程,如果不先讲清楚 T2 这层,基本等于没说。

这篇内容适合几类人:手上有这台机器、想保留 macOS 做一些特定软件的活儿、同时希望有一个干净可控的 Linux 开发环境的人;已经会装普通 Linux 装机、但第一次碰 T2 硬件、被各种"设备不工作"搞得一头雾水的人;以及还没动手、想先摸清楚到底有哪些坑、值不值得花时间的人。如果你只是想体验一下 Linux,我劝你直接虚拟机或者外接 SSD 走起,别拿主力机开刀。

我个人的使用场景很朴素:日常写代码、跑容器、看文档,少数时候需要 macOS 处理一些图形和文档工作。这个组合决定了我的需求——双系统要稳,切换要快,Linux 那边不需要 100% 的硬件功能齐全,但键盘、触控板、WiFi、声音、休眠恢复这几项必须有。下面所有内容都围绕这个目标展开,不会追求"把摄像头和指纹也搞通"这种目前基本不现实的事。

2. 整体方案设计:先把路选对,再动手

2.1 三种折腾路线,先选一条

在动手之前,必须先在脑子里把路线定下来。常见的三种玩法,成本和风险完全不同,我列出来做个对比,你按自己的情况挑。

方案做法优点缺点适合谁
内置盘双分区缩小 APFS 容器,在同一块 SSD 上划出 Linux 根分区便携,不用带外设,性能满血分区操作有数据风险,macOS 大版本更新可能重置启动设置想当主力双系统用的人
外置 SSD 安装Linux 全部装在外接盘上,内置盘一点不动风险极低,随时拔盘,macOS 干净需要带个小硬盘,走 USB 带宽,休眠容易出问题第一次尝试、不想冒险的人
虚拟机在 macOS 里跑虚拟化零风险,切换最快性能打折,无法测试真实硬件驱动只是体验、跑轻量任务的人

我最终选了内置盘双分区。理由很实际:这台机器本来就没多少外接口,出个门还要挂个硬盘盒,日常体验会大打折扣;而分区风险这件事,只要备份做足、步骤核对清楚,是可控的。

2.2 分区方案的取舍:ESP 到底共不共用

这是设计阶段最关键的一个决策。EFI 系统分区(ESP)是引导程序的落脚地,macOS 默认会创建一个,通常是/dev/nvme0n1p1,容量 200MB 到 300MB 之间。问题在于,T2 机型的启动管理器只认内置 SSD 上的 ESP,你把引导程序写到外接盘的 ESP 上,按 Option 键不一定认。所以主流的做法有两种:

  • 共用 macOS 的 ESP:好处是简单,不用动分区表;坏处是 200MB 空间很紧张,塞下引导程序之后基本放不下内核和 initramfs。解法是把 ESP 只用来放引导器的 EFI 二进制,内核单独放到一个/boot分区上去。
  • 新建独立 ESP:在 APFS 容器后面划出一块 FAT32 分区标记为 ESP。好处是空间充裕、与 macOS 解耦;坏处是有些机器上启动管理器对多 ESP 的识别不稳定,可能出现"能看到但进不去"的情况。

我最后走的是共用 ESP + 独立/boot的方案。原因很直接:稳。多 ESP 的方案我试过,在系统更新之后出现过引导项消失的情况,排查起来很浪费时间。共用一个 ESP,把引导器装进去,再用引导器自己去加载/boot里的内核,逻辑清晰,出问题也好定位。

2.3 引导器选型:rEFInd 比 GRUB 省心

引导器这块我试过 GRUB 和 rEFInd,最后留在 rEFInd 上。GRUB 功能全,但在这台机器上有两个小麻烦:一是grub-install偶尔会往 NVRAM 里写东西,而 T2 机型对 NVRAM 的管理比较特殊,写得不好会多出一堆无效启动项;二是 GRUB 的配置文件改起来需要重新生成,不如 rEFInd 那种"放在目录里自动扫描"的模式直观。

rEFInd 的优势是零配置也能用:装到 ESP 的EFI/refind/目录下,它会自动扫描所有分区的内核和 macOS 的引导器,出图形菜单让你选。对于双系统场景,这个体验非常舒服。缺点是对内核参数的自定义不如 GRUB 灵活,但这个可以用内核命令行文件补上。

注意:不管选哪个引导器,都不要去改动 macOS 自己的EFI/APPLE目录,动了之后 macOS 可能起不来,修复过程相当麻烦。

2.4 内核方案:一定要用带 T2 补丁的版本

这是最容易被忽略、也最容易让人半途而废的一点。原版 Arch 内核在这台机器上能开机,但开完机你会发现键盘不响应、触控板没反应、WiFi 搜不到、扬声器一声不吭。不是因为坏了,是因为这些外设在 T2 架构下走的是非标准路径,需要专门的驱动补丁。

社区里有维护一套针对 T2 硬件的内核补丁和配套固件包,常见包名的前缀是apple-,比如提供 SPI 键盘触控板支持的模块、提供音频编解码器支持的补丁、提供固态硬盘访问能力的补丁。实际操作中的思路是:安装官方linux包保证有个能用的内核,同时把带补丁的内核作为主力内核装上去,用引导器选择启动。

这里有个非常关键的前提,我要单独强调:安装介质本身也得是带补丁的。标准 Arch ISO 启动之后lsblk看不到内置硬盘,你连分区都做不了。所以第一步就应该去社区找一份已经打好 T2 补丁的安装镜像,或者自己在能正常工作的机器上把补丁打进 ISO 里。这个前置动作省掉后面至少两小时的无用功。

3. 动手前的准备工作:备份、启动安全性与安装介质

3.1 备份这件事,别嫌麻烦

我知道所有人都说备份,所有人都不做,然后所有人都在翻车之后后悔。分区这一步是真的会丢数据的,尤其是缩小 APFS 容器这个操作,本身时间很长(我那块 512G 的盘缩了将近四十分钟),中间如果断电或者强行中断,容器结构可能损坏。

我的做法是双保险:用时间机器把整个系统完整备份到一个外接硬盘上,另外把个人的文档、代码、密钥这些单独再拷一份到另一块盘或者网盘。密钥文件我额外导出了一份放在 U 盘里,因为有些开发用的私钥丢了真的要重新申请,很折腾。

另外还有几件 macOS 侧的收尾工作,动手前一起做掉:退出所有云同步服务,关闭文件保险箱(FileVault),关闭"查找我的设备"相关的锁定功能。文件保险箱不关,后面在 Linux 侧读分区会非常麻烦,还要处理加密卷的挂载逻辑,纯属给自己找事。

3.2 关闭启动安全性并允许外部启动

这一步必须在 macOS 的恢复模式里做,正常系统里找不到入口。流程大概是这样:

  1. 关机,按住Command + R开机,进入恢复模式。
  2. 顶部菜单栏找到"启动安全性实用工具"(若是带 T2 的机型,这个选项一定存在)。
  3. 选择内置启动盘,把安全启动级别从"完整安全性"改成"无安全性"。
  4. 勾选"允许从外部介质启动"。
  5. 输入管理员密码确认,重启。

为什么必须做这一步?因为 T2 默认只允许签名的、可信的引导程序运行。你自己编译或者下载的引导器没有签名,在这套机制下会被直接拦掉,表现为"选了启动盘但黑屏两秒又回到原系统"。我第一次装的时候就卡在这儿,找了半天以为是 U 盘写坏了,其实是安全启动拦的。

提醒:macOS 做固件级别的大版本升级之后,这项设置有可能被重置回默认值。所以每次 macOS 大更新之后,如果你发现 Linux 进不去了,第一反应应该是回恢复模式看看这个开关是不是又被打开了。

3.3 制作安装介质

需要一个 8G 以上的 U 盘,最好 USB 3.0 的。写入方式有两种:

# macOS 下用 dd 写入,注意先确认盘符,别写错盘 diskutil list diskutil unmountDisk /dev/disk2 sudo dd if=t2-arch.iso of=/dev/rdisk2 bs=4m status=progress diskutil eject /dev/disk2

注意rdisk那个r别漏,走裸设备写入速度快好几倍。写完之后不要格式化,不要动它。如果 dd 不想用,图形化的写盘工具也可以,选"镜像写入"模式,不要选"解压复制"。

写完 U 盘,插上机器,开机的瞬间按住 Option 键不放,等启动管理器出现。如果在这个界面里能看到你的 U 盘图标(通常显示为 EFI Boot),说明安全性设置那步做对了;如果按了没反应,回去重新检查 3.2。

4. 磁盘分区实操:动刀之前先把数算清楚

4.1 用 diskutil 缩小 APFS 容器

分区这一步我建议尽量在 macOS 里完成前半段,因为 macOS 自带的diskutil对 APFS 容器的处理最稳妥,在 Linux live 环境里直接动 APFS 反而容易出问题。

先看磁盘结构:

diskutil list

输出的结构大概是:/dev/disk0下面依次是 EFI 分区(200MB 左右)、APFS 容器(占了绝大部分空间)、可能还有恢复分区在容器内部。容器里面装着 macOS 系统卷、数据卷、恢复卷等等。

我的计划是给 Linux 留 120G,剩下的留给 macOS。这个数字怎么定的?把 macOS 侧目前的实际占用看了一下(大概 90G),加上未来增长余量,给它留 350G 左右,剩下 120G 给 Linux 根分区,够跑容器和一堆开发环境了。盘小的话建议至少给 Linux 留 60G,低于这个数字装完 Arch 再加日常软件会很快见底。

缩小容器的命令核心是diskutil apfs resizeContainer:

# 把 APFS 容器缩到 380G,剩下的空间腾出来 diskutil apfs resizeContainer disk0s2 380g

这个操作会跑很久,屏幕上会有进度条。中途千万别断电、别拔电源、别点取消。我那块盘缩了将近四十分钟,全程插着电源,泡了杯茶在旁边等。缩完之后diskutil list里会看到容器后面多出一块"free space",那块就是留给 Linux 的。

4.2 在 Linux live 环境里划分分区

从 U 盘启动进入 live 环境,第一件事是确认能不能看到内置盘:

lsblk nvme list

如果能看到nvme0n1和上面的一堆分区,说明你用的镜像带 T2 补丁,可以继续。看不到的话,换镜像,不要在这里浪费时间研究。

分区用cgdisk或者fdisk都行,我喜欢cgdisk的交互界面。要划的东西有三样:

  • 一个/boot分区,建议 1G,ext4 格式,放内核和 initramfs。
  • 一个根分区,把剩下的空间全给它,btrfs 或者 ext4。
  • swap 我不建议单独分区,用zram更划算,后面会说。

/boot给 1G 的理由:这台机器要有多个内核(官方内核 + 带补丁内核),再加上各自的 initramfs,每个内核加镜像大概 100M 出头,两个内核来回切换,加上 fallback 镜像,1G 是比较舒服的余量。给 512M 也够用,但每次内核更新都得手动清旧版本,烦。

分区类型标记上要注意:/boot用普通的 Linux 文件系统类型,根分区也是。不要把这两块标记成 EFI 系统分区,否则启动管理器会把它当成候选启动项,菜单会变乱。

4.3 共享 ESP 空间不足时怎么办

这是我在第二次重装时遇到的坑。macOS 的 ESP 如果是 200MB 的,装完 rEFInd(大约 10MB)之后其实还有空间,但如果引导器目录里带了一堆主题图片、驱动文件,很容易撑爆。ESP 满了的表现很隐蔽:引导器装的时候没报错,但实际文件没写进去,启动的时候直接掉回 macOS。

先看看剩余空间:

df -h /boot/efi # 在 chroot 之后执行

如果只剩个位数 MB,就要清理了。最常见的废文件是旧的引导器目录、备份文件、以及EFI/BOOT/BOOTX64.EFI之外的冗余副本。清理原则:只保留 macOS 的EFI/APPLE和你自己的引导器目录,其余不认识的一律先备份到别处再删。

真要扩容 ESP,就得动分区表,把 ESP 后面紧邻的空间并进去。这种做法对 APFS 容器位置有要求,操作风险不低,我不推荐新手尝试。更稳的路子就是前面说的:ESP 只放引导器,内核放/boot。这样 ESP 的占用能压到 20MB 以内,基本一辈子不会满。

5. 安装 Arch 与配置 T2 专用内核

5.1 联网、挂载与 pacstrap

live 环境默认没有网络,得先连上。有线网卡不存在,只能走 WiFi。T2 机型的 WiFi 在 live 环境里能不能用,取决于镜像带没带固件;我用的那份镜像是带了的,iwctl直接就能连:

iwctl station wlan0 scan station wlan0 get-networks station wlan0 connect 你的网络名 exit

连上之后ping一下确认,然后按顺序挂载。注意根分区和/boot是分开的:

mount /dev/nvme0n1p5 /mnt # 根分区,盘符按实际来 mkdir -p /mnt/boot mount /dev/nvme0n1p4 /mnt/boot # /boot 分区 mkdir -p /mnt/boot/efi mount /dev/nvme0n1p1 /mnt/boot/efi # 共享的 ESP

挂载顺序别搞错,先根后 boot 再 efi,否则后面genfstab生成的挂载表会乱。挂完之后确认一下:

lsblk -f

看MOUNTPOINTS那一列是不是三个目录各就各位。这一步我用红笔在纸上画过一遍,因为一旦挂错,后面 chroot 进去修改的就不是目标系统,很容易把 live 环境搞乱。

装基础系统的时候,我建议一次性把常用工具带上,省得后面反复联网:

pacstrap /mnt base base-devel linux linux-firmware \ vim git networkmanager sudo zram-generator \ btrfs-progs efibootmgr refind

base-devel一定要装,后面编译 DKMS 模块(T2 的那些驱动基本都是 DKMS 形式)离不开它。linux-firmware是基础固件包,虽然 T2 机型的很多固件得单独搞,但这个包该装还是要装。

5.2 fstab、chroot 与基础配置

生成挂载表:

genfstab -U /mnt >> /mnt/etc/fstab cat /mnt/etc/fstab

这一步务必肉眼检查一遍,重点看/boot和/boot/efi两行是不是都写进去了,UUID 对不对。我曾经因为/boot没写进 fstab,导致装完内核后重启直接进不了系统,白折腾一下午。

然后 chroot 进去:

arch-chroot /mnt

进去之后按常规流程走:时区、本地化、主机名、root 密码、创建用户。这里有一个和 macOS 双系统强相关的点:硬件时钟要设成本地时间模式。

timedatectl set-local-rtc 1 --adjust-system-clock

原因很实际:macOS 默认把硬件时钟当本地时间用,Linux 默认当 UTC 用。不改的话,两边来回切换,时间永远差 8 小时,日历、证书、构建缓存全都会出问题。改成本地时间模式之后,两边就一致了。虽然这不符合"标准做法",但在双系统场景下是最省心的选择。

5.3 安装带 T2 补丁的内核

这一步是整个安装的核心。思路是:把社区维护的软件源加进来,从里面装带补丁的内核和配套固件。

具体仓库地址和包名会变,我不在这里写死,你去社区文档里拿最新的源配置。大致流程是:

  1. 编辑/etc/pacman.conf,在末尾加上源的地址和签名配置。
  2. 导入源的签名公钥,pacman-key --init之后pacman-key --add再--lsign-key。
  3. 刷新包数据库,安装带补丁的内核包(名字里通常带t2字样)和对应的头文件包,以及固件包。

装完之后/boot里会多出几套vmlinuz和initramfs文件。这个时候要检查 bootloader 配置能不能找到它们,先别急着重启。

内核参数也需要针对这台机器调整,编辑/etc/kernel/cmdline或者引导器的配置文件,加上:

intel_iommu=on iommu=pt

为什么加这个?T2 的那些驱动模块依赖 IOMMU 的直通能力来做 DMA 访问,不加这两个参数,键盘触控板的驱动加载了但不工作,表现就是"模块在,设备节点也有,就是按了没反应"。这个坑我排查了很久,dmesg里能看到模块加载成功,但 SPI 总线上没有任何数据往来,最后翻社区文档才找到这两行参数。

mkinitcpio.conf里的MODULES建议显式加上 T2 相关的几个模块(具体名字看驱动包文档),这样能保证开机早期就加载,键盘在建文件系统检查之前就能用。另外HOOKS里用systemd那套,比udev稳一点。

6. 硬件适配逐个攻破

6.1 键盘与触控板:驱动在,参数不对也白搭

这两样东西是内建的 SPI 设备,靠 T2 驱动套件里的 SPI 控制器驱动来带。装好驱动、加好 IOMMU 参数之后,键盘通常在开机几秒后就能用。触控板稍微麻烦一点,需要libinput加上对应的固件文件。

验证方法:

dmesg | grep -i spi libinput list-devices

libinput list-devices里能看到触控板设备,说明内核层面通了。如果能看到设备但手势不好用,那是用户态配置的问题,在桌面环境的输入设置里调触摸板速度和多指手势就行,不用再折腾驱动。

一个实测细节:触控板的力度感应(Force Touch)在 Linux 下是模拟的,没有真正的压感分级,点按的手感会比 macOS 下"硬"一些。这是硬件协议层面的差异,接受就好,别在这上面浪费时间。键盘背光可以通过写/sys/class/leds/下的亮度节点控制,但重启不保留,需要写个 systemd 服务在开机时设一次。

6.2 无线网卡与蓝牙:固件必须从 macOS 那边借

这台机器的无线网卡是博通方案,Linux 下的开源驱动能用,但缺固件。固件怎么来?两个途径:一是驱动包自带的固件包,二是自己从 macOS 分区的系统目录里提取。前者省事,后者适合驱动包还没覆盖的时候。

装好固件之后:

ip link

能看到wlan0就成了一半,然后nmcli device wifi list扫一下,能扫到信号就彻底通了。如果ip link里只有lo,检查dmesg | grep -i brcm,通常是固件文件没找到或者名字对不上。

蓝牙稍麻烦,因为它同样走 T2 的通道。装上bluez和bluez-utils,systemctl enable --now bluetooth,然后bluetoothctl里scan on试一下。我这台机器上蓝牙能扫到设备,也能配对耳机,但偶尔在休眠恢复后会失效,重新systemctl restart bluetooth就好了,属于可接受的小毛病。

6.3 音频、摄像头与指纹:接受现实

音频这块,能出声,但要花点功夫。机器用的是 Cirrus Logic 的编解码芯片,需要驱动包里的补丁版 HDA 驱动。装好之后alsamixer里会多出一堆控件,关键是要把扬声器相关的通道逐个打开并调高,默认状态全是静音的,很多人以为没驱动,其实是音量全关了。

我的做法是把alsamixer里所有以Speaker开头的通道都拉到 80% 以上,然后speaker-test -c 2验证。耳机口和扬声器切换基本正常,麦克风也能用,只是降噪效果不如 macOS 下的处理。

摄像头和指纹,坦白说,目前基本没法用。摄像头走的是 T2 内部通道,社区驱动还在很早期的阶段;指纹传感器更是完全封闭。我的处理方式是干脆不纠结,需要视频会议就切回 macOS,两分钟的事。在双系统场景下,接受"不是所有硬件都要在 Linux 下能用"这个前提,能省掉 80% 的挫败感。

6.4 电源管理:休眠是最大的雷区

这是我最想提醒的一块。T2 机型的睡眠/唤醒在 Linux 下一直不太稳,表现是合盖之后唤不醒、或者唤醒后键盘失灵、或者电量异常掉。我试过多套方案,最后的选择是:禁用挂起和休眠,只保留屏幕熄灭。

systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

这个决定听着粗暴,但实际体验下来是最稳的。笔记本合盖就熄屏,不进入系统级睡眠,电量会有少量消耗(一晚上大概掉 5% 到 8%),换来的是"打开就能用,从不翻车"。对一台定位是工作机的设备来说,这个取舍很值。

温度和风扇靠lm_sensors加对应的内核模块,配置完之后sensors能看到 CPU 各核心温度和风扇转速。实测在编译大型项目的时候,风扇会转起来,温度能压在 85 度以内,散热逻辑基本正常。电池信息需要额外的电池驱动模块,装好之后upower -i能看到循环次数和健康度,我这台用了几年,健康度掉了不少,这个数据看着挺扎心的。

7. 引导菜单与双系统切换的日常维护

7.1 添加 EFI 启动项

chroot 环境里把 rEFInd 装到共享 ESP:

refind-install --root /boot/efi

装完之后检查/boot/efi/EFI/refind/目录下有没有refind_x64.efi,再看看/boot/efi/EFI/refind/refind.conf里有没有开启自动扫描。rEFInd 默认会扫所有分区的vmlinuz和 macOS 的引导文件,基本不用改配置。

如果要手动加启动项,用efibootmgr:

efibootmgr -c -d /dev/nvme0n1 -p 1 \ -L "Arch Linux" -l '\EFI\refind\refind_x64.efi'

-p 1指的是 ESP 所在的分区号,这个一定要对。写完之后efibootmgr -v看一眼列表,确认新条目在,且顺序合理。如果 macOS 排在前面,用efibootmgr -o调整启动顺序。

日常切换的方式:开机按住 Option 键,出现启动管理器,选 macOS 或者 rEFInd(进去之后再选 Arch)。习惯了其实不慢,全程三秒。不想按键的话,把 rEFInd 设成默认启动,它会给你一个图形菜单选 macOS 还是 Linux。

7.2 时间、NVRAM 与 macOS 更新后的复位

双系统日常使用中,有三个反复出现的小维护点,我列成清单,遇到问题按这个顺序查:

现象大概率原因处理方式
两个系统时间差 8 小时硬件时钟模式不一致Linux 侧timedatectl set-local-rtc 1
macOS 更新后进不去 Linux启动安全性被重置为完整回恢复模式重新设为"无安全性"
启动管理器里 Linux 项消失NVRAM 被系统重写用 live 环境重新efibootmgr写入
引导进 Linux 后黑屏内核参数或驱动包版本不匹配换备份内核启动,回滚驱动包

关于 macOS 更新,我的习惯是:每次 macOS 大版本升级之前,先在 Linux 侧确认能正常启动,升级完之后第一时间回恢复模式检查启动安全性设置。这个动作两分钟,能避免很多"更新完发现半边系统进不去"的尴尬。另外升级前最好看一下社区有没有人反馈兼容问题,别人踩过的坑没必要自己再踩一遍。

还有一点值得说:内核和驱动包的版本要"成对"更新。我吃过一次亏,只更新了内核没更新驱动包,结果驱动模块编译不过,开机后键盘直接不工作,只能拿外接 USB 键盘救急。所以更新策略是:先更新驱动包,再更新内核,中间不要重启,让 DKMS 一次性把模块编译完,最后统一重启。这个顺序看起来不起眼,但能少很多事。

8. 踩坑实录与排查速查表

8.1 几个印象深刻的翻车现场

第一个坑是"看不到硬盘"。第一次用标准镜像启动,lsblk里干干净净,我当时以为是 U 盘没写好,重写了三次才发现问题在镜像本身不带 T2 补丁。教训:动手前先确认镜像版本,这一步能省掉两小时。

第二个坑是"键盘在 live 环境能用,装完系统不能用"。原因是 chroot 之后我忘了把 T2 驱动包一起装进新系统,只装了内核。live 环境本身自带驱动,所以有错觉。教训:live 环境能用 ≠ 新系统能用,装完必须 chroot 进去确认驱动包在位。

第三个坑是"ESP 写满导致引导器装了个寂寞"。refind-install全程没报错,重启直接进 macOS。查了半天发现 ESP 只剩 3MB 可用,文件写失败但静默跳过了。教训:装完引导器一定ls一下目标目录,确认文件真实存在。

第四个坑最隐蔽:"驱动加载成功但设备不工作"。dmesg一片祥和,模块都在,设备节点也在,就是按键盘没反应。最后定位到 IOMMU 参数没加,DMA 通道没建立起来。教训:T2 驱动对内核参数有硬性要求,别照着别人的配置文件抄一半。

8.2 故障排查速查表

症状优先排查常用命令
live 环境看不到内置盘镜像是否带 T2 补丁lsblk、nvme list
装完开机黑屏无输出内核参数、引导器配置路径journalctl -b -1(用 live 环境 chroot 查)
键盘无响应驱动包是否安装、IOMMU 参数dmesg | grep -i spi、lsmod
触控板能动但没有多指手势用户态配置libinput list-devices
WiFi 扫不到信号固件文件缺失dmesg | grep -i brcm、ip link
扬声器无声混音器通道被静音alsamixer、speaker-test -c 2
合盖后唤不醒挂起机制不兼容禁用 sleep 相关 target
双系统时间差 8 小时硬件时钟模式timedatectl

排查的通用思路我总结成三步:先看dmesg有没有报错,再确认模块和设备节点在不在,最后才怀疑配置和参数。大部分人一上来就改配置文件,其实问题往往在更底层。另外一个实用技巧:保留一个能正常启动的旧内核作为备份,出问题时在引导菜单里选它进去修,比拿 U 盘救场方便太多了。

8.3 折腾完之后我的几点体会

这套双系统我用了挺长时间,现在的状态是:键盘触控板 WiFi 声音正常,睡眠功能关闭但合盖熄屏够用,摄像头和指纹放弃,macOS 那边保留做特定工作。日常开机按一下 Option 键,三秒选系统,心里很踏实。

如果你也要走这条路,我最大的建议是把"能用"和"完美"分开。Linux 在这台机器上做到 90% 可用是完全现实的,剩下那 10%(摄像头、指纹、原生的睡眠体验)投入产出比极低,很容易陷进去出不来。我见过有人为了修摄像头驱动折腾两周,最后连日常工作都没心思做了,这就本末倒置了。

另外一个心得是关于文档的。整个过程中我养成了记录笔记的习惯,每一步命令、每一个参数改动、每一次翻车的原因都写下来。后期系统出问题的时候,翻自己的笔记比翻社区帖子快十倍,而且更贴合自己的实际情况。这份笔记到现在还在更新,也算这个项目留给我的额外收获吧。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询