人们一直在大肆宣传新的 T2 芯片将导致 2018 年新款带触摸屏的 MacBook 无法安装 Linux。 时间流逝,到了2019年底,第三方开发者实现了许多与T2芯片交互的驱动程序和内核补丁。 MacBook 2018 款及更新型号的主驱动程序实现了 VHCI 操作(触摸/键盘等操作)以及声音操作。
项目
- BCE(缓冲区复制引擎)- 建立与 T2 的主要通信通道。 VHCI 和音频需要此组件。
- VHCI是USB虚拟主机控制器; 键盘、鼠标和其他系统组件均由该组件提供(其他驱动程序使用该主机控制器来提供更多功能。
- 音频 - T2音频接口的驱动程序,目前仅支持通过MacBook内置扬声器输出音频
第二个项目称为
对 Wi-Fi、触摸板等设备的支持也是使用内核补丁实现的。 当前内核版本
目前正在做什么
- NVMe
- 键盘
- USB-C(Thunderbolt未测试;自动加载模块时会冻结系统)
- Touchbar(可以打开Fn键、背光、ESC等)
- 声音(仅限内置扬声器)
- Wi-Fi 模块(通过 brcmfmac 且仅通过 iw)
- 通过 USB-C 的 DisplayPort
- 传感器
- 暂停/恢复(部分)
- 等等..
本教程适用于macbookpro15,1和macbookpro15,2。 这篇文章是根据英文版的 Github 进行的。
安装需要什么
- USB-C 坞站适配器转 USB(至少三个 USB 输入,用于在网络共享模式下连接鼠标、键盘、USB 调制解调器或手机)。 仅在安装的第一阶段才需要这样做
- USB键盘
- USB/USB-C 闪存驱动器至少 4GB
1.禁用禁止从外部媒体启动
2. 使用“磁盘工具”分配可用空间
为了方便起见,我立即为磁盘分配了 30GB,并在“磁盘工具”中将其格式化为 exfat。
3. 创建ISO镜像
选项有:
- 您可以采用简单的方法并从以下地址下载带有内核 5.3.5-1 和补丁的现成映像
奥纳利1 链接到完成的图像 - 通过 archlive 自行创建镜像(需要具有 Archa 发行版的系统)
集
阿奇索 pacman -S archiso
cp -r /usr/share/archiso/configs/releng/ archlive cd archlive
将存储库添加到 pacman.conf:
[mbp] Server = https://packages.aunali1.com/archlinux/$repo/$arch
我们忽略 pacman.conf 中的原始内核:
IgnorePkg = linux linux-headers
添加必要的包,最后添加 linux-mbp 内核和 linux-mbp-headers
... wvdial xl2tpd linux-mbp linux-mbp-headers
我们将脚本更改为在交互模式下工作(将 pacstrap -C 替换为 pacstrap -i -C):
sudo nano /usr/bin/mkarchiso
# Install desired packages to airootfs _pacman () { _msg_info "Installing packages to '${work_dir}/airootfs/'..." if [[ "${quiet}" = "y" ]]; then pacstrap -i -C "${pacman_conf}" -c -G -M "${work_dir}/airootfs" $* &> /dev/null else pacstrap -i -C "${pacman_conf}" -c -G -M "${work_dir}/airootfs" $* fi _msg_info "Packages installed successfully!" }
形成图像:
sudo ./build.sh -v
按 Y 跳过忽略的包,然后将 iso 映像写入 USB 闪存驱动器:
sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M
4. 首次启动
插入闪存驱动器和键盘后重新启动。 当出现苹果时按选项,选择 EFI BOOT。
接下来,您需要按“e”键并在命令行末尾输入 module_blacklist=迅雷。 如果不这样做,系统可能无法启动,并且会出现 Thunderbolt ICM 错误。
使用 fdisk/cfdisk 我们找到我们的分区(对我来说是 nvme0n1p4),格式化它并安装存档。 您可以使用
我们不会创建引导分区;我们将在其中写入引导加载程序 /dev/nvme0n1p1
/mnt 中的环境完全形成后,在移动到 arch-chroot 之前,写入:
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash
添加到/etc/pacman.conf:
[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch
安装内核:
sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp
我们在/etc/modprobe.d/blacklist.conf中注册thunderbolt和applesmc
blacklist thunderbolt
blacklist applesmc
键盘、触摸栏等
安装耶:
sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
安装模块以使触摸栏正常工作:
git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install
将模块添加到启动:/etc/modules-load.d/apple.conf
industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als
为键盘安装内核模块。 在存储库中
pacman -S apple-bce-dkms-git
在这种情况下,内核模块将被调用 苹果-BCE。 在自组装的情况下,它被称为 BCE。 因此,如果您想在 mkinicpio.conf 文件的 MODULES 部分中注册模块,请不要忘记您安装了哪个模块。
手动组装:
git clone https://github.com/MCMrARM/mbp2018-bridge-drv.git
cd mbp2018-bridge-drv
make
cp bce.ko /usr/lib/modules/extramodules-mbp/bce.ko
将 bce 或 apple-bce 模块添加到启动中:/etc/modules-load.d/bce.conf
bce
如果您想默认使用 Fn 按钮,请在 /etc/modprobe.d/apple-tb.conf 文件中写入:
options apple-ib-tb fnmode=2
更新内核和 initramfs。
mkinitcpio -p linux-mbp
安装iwd:
sudo pacman -S networkmanager iwd
5.装载机
一旦所有主要软件包都安装在 chroot 中,您就可以开始安装引导加载程序了。
我无法让 grub 工作。 Grub 从外部 USB 驱动器启动,但是当您尝试通过以下方式在 nvme 中注册它时
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub
系统进入内核恐慌,并且通过选项重新启动后没有出现新项目。 我没有找到任何明确的解决方案来解决这个问题,因此决定尝试使用 systemd-boot 来实现启动。
- 我们启动
bootctl --path=/boot install
然后我们就陷入了内核恐慌。 关闭MacBook,再次打开,单击选项(不要关闭带有键盘的USB-C集线器)
- 我们检查除了外部设备之外还出现了新的 EFI BOOT 条目
- 我们选择从外部 USB 驱动器启动,就像第一次安装时一样(不要忘记指定 module_blacklist=thunderbolt)
- 我们挂载磁盘并通过 arch-chroot 进入环境
mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt
如果需要键盘在系统完全加载之前一直工作(这在使用 luks/dm-crypt 加密时是必需的),则将其写入 /etc/mkinicpio.conf 文件的 MODULES 部分:
MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)
更新内核和 initramfs。
mkinicpio -p linux-mbp
设置 systemd 启动
我们编辑 /boot/loader/loader.conf 文件,删除里面的所有内容,并添加以下内容:
default arch
timeout 5
editor 1
进入 /boot/loader/entries 文件夹,创建 arch.conf 文件并写入:
title arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
options root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat
如果您使用 luks 和 lvm,那么
options cryptdevice=/dev/<b>nvme0n1p4</b>:luks root=/dev/mapper/vz0-root rw pcie_ports=compat
重新启动进入 MacOS。
6. 无线网络设置
最终结果是,MacOS 将 Wi-Fi 适配器的固件文件存储在该文件夹中 /usr/share/固件/wifi ,您可以从那里以 blob 的形式获取它们并将它们提供给 brcmfmac 内核模块。 为了找出您的适配器使用哪些文件,请在 MacOS 中打开终端并写入:
ioreg -l | grep C-4364
我们得到一长串名单。 我们只需要该部分的文件 请求的文件:
"RequestedFiles" = ({"Firmware"="<b>C-4364__s-B2/maui.trx</b>","TxCap"="C-4364__s-B2/maui-X3.txcb","Regulatory"="C-4364__s-B2/<b>maui-X3.clmb</b>","NVRAM"="C-4364__s-B2/<b>P-maui-X3_M-HRPN_V-m__m-7.7.txt</b>"})
对于您的情况,文件名可能有所不同。 将它们从 /usr/share/firmware/wifi 文件夹复制到闪存驱动器并重命名,如下所示:
maui.trx -> brcmfmac4364-pcie.bin
maui-X3.clmb -> brcmfmac4364-pcie.clm_blob
P-maui-X3_M-HRPN_V-m__m-7.7.txt -> brcmfmac4364-pcie.Apple Inc.-<b>MacBookPro15,2.txt</b>
在这种情况下,最后一个文本文件包含型号名称;如果您的型号不是 macbookpro15,2,那么您需要根据您的 MacBook 型号重命名此文件。
重新启动进入 Arch。
将文件从闪存驱动器复制到 /lib/firmware/brcm/ 文件夹
sudo cp brcmfmac4364-pcie.bin /lib/firmware/brcm/
sudo cp brcmfmac4364-pcie.clm_blob /lib/firmware/brcm/
sudo cp 'brcmfmac4364-pcie.Apple Inc.-<b>MacBookPro15,2.txt' /lib/firmware/brcm/
检查模块的功能:
rmmod brcmfmac
modprobe brcmfmac
我们确保通过 ifconfig/ip 显示网络接口。
通过设置 wifi
注意力。 通过netctl、nmcli等。 接口不行,只能通过iwd。
我们强制 NetworkManager 使用 iwd。 为此,请创建文件 /etc/NetworkManager/NetworkManager.conf 并写入:
[device]
wifi.backend=iwd
启动网络管理器服务
sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service
7. 声音
为了使声音正常工作,您需要安装pulseaudio:
sudo pacman -S pulseaudio
下载三个文件:
让我们移动它们:
/usr/share/alsa/cards/AppleT2.conf
/usr/share/pulseaudio/alsa-mixer/profile-sets/apple-t2.conf
/usr/lib/udev/rules.d/91-pulseaudio-custom.rules
8.暂停/恢复
目前, 16.10.2019 您必须选择声音或暂停/恢复。 我们正在等待 bce 模块的作者完成该功能。
要构建具有挂起/恢复支持的模块,您必须执行以下操作:
git clone https://github.com/MCMrARM/mbp2018-bridge-drv.git
cd mbp2018-bridge-drv
git checkout suspend
make
cp bce.ko /usr/lib/modules/extramodules-mbp/bce.ko
modprobe bce
如果您从 anuali1 存储库安装了现成的 apple-bce 模块,则必须首先将其删除,然后才组装并安装支持挂起模式的 bce 模块。
另外,您需要将 applesmc 模块添加到黑名单(如果您之前没有这样做过),并确保在 /boot/loader/entries/arch.conf 末尾的选项行中添加了参数 PCIe_端口=兼容.
目前,触摸栏驱动程序在进入挂起模式时会崩溃,而 Thunderbolt 驱动程序有时会使系统冻结超过 30 秒,并在恢复时冻结几分钟。 这可以通过自动卸载有问题的模块来解决。
创建脚本 /lib/systemd/system-sleep/rmmod.sh:
#!/bin/sh
if [ "" == "pre" ]; then
rmmod thunderbolt
rmmod apple_ib_tb
elif [ "" == "post" ]; then
modprobe apple_ib_tb
modprobe thunderbolt
fi
使其可执行:
sudo chmod +x /lib/systemd/system-sleep/rmmod.sh
目前为止就这样了。 结果是一个完全可行的系统,除了挂起/恢复的一些细微差别之外。 在几天的正常运行时间内没有观察到崩溃或内核恐慌。 我希望在不久的将来bce模块的作者能够完成它,我们将得到对挂起/恢复和声音的全面支持。
来源: habr.com