让 MacBook Pro 2018 T2 与 ArchLinux 配合使用(双启动)

人们一直在大肆宣传新的 T2 芯片将导致 2018 年新款带触摸屏的 MacBook 无法安装 Linux。 时间流逝,到了2019年底,第三方开发者实现了许多与T2芯片交互的驱动程序和内核补丁。 MacBook 2018 款及更新型号的主驱动程序实现了 VHCI 操作(触摸/键盘等操作)以及声音操作。

项目 mbp2018-桥接驱动 分为 3 个主要部分:

  • BCE(缓冲区复制引擎)- 建立与 T2 的主要通信通道。 VHCI 和音频需要此组件。
  • VHCI是USB虚拟主机控制器; 键盘、鼠标和其他系统组件均由该组件提供(其他驱动程序使用该主机控制器来提供更多功能。
  • 音频 - T2音频接口的驱动程序,目前仅支持通过MacBook内置扬声器输出音频


第二个项目称为 macbook12-spi-驱动程序,并且它实现了操作 2016 年末及更高版本 MacBook Pro 的键盘、SPI 触控板和触摸栏的输入驱动程序的功能。 从版本 5.3 开始,一些键盘/触控板驱动程序现已包含在内核中。

对 Wi-Fi、触摸板等设备的支持也是使用内核补丁实现的。 当前内核版本 5.3.5-1

目前正在做什么

  1. NVMe
  2. 键盘
  3. USB-C(Thunderbolt未测试;自动加载模块时会冻结系统)
  4. Touchbar(可以打开Fn键、背光、ESC等)
  5. 声音(仅限内置扬声器)
  6. Wi-Fi 模块(通过 brcmfmac 且仅通过 iw)
  7. 通过 USB-C 的 DisplayPort
  8. 传感器
  9. 暂停/恢复(部分)
  10. 等等..

本教程适用于macbookpro15,1和macbookpro15,2。 这篇文章是根据英文版的 Github 进行的。 。 并非本文中的所有内容都有效,因此我必须自己找到解决方案。

安装需要什么

  • USB-C 坞站适配器转 USB(至少三个 USB 输入,用于在网络共享模式下连接鼠标、键盘、USB 调制解调器或手机)。 仅在安装的第一阶段才需要这样做
  • USB键盘
  • USB/USB-C 闪存驱动器至少 4GB

1.禁用禁止从外部媒体启动

https://support.apple.com/en-us/HT208330
https://www.ninjastik.com/support/2018-macbook-pro-boot-from-usb/

2. 使用“磁盘工具”分配可用空间

为了方便起见,我立即为磁盘分配了 30GB,并在“磁盘工具”中将其格式化为 exfat。 对物理磁盘进行分区 Disk Utility.

3. 创建ISO镜像

选项​​有:

  1. 您可以采用简单的方法并从以下地址下载带有内核 5.3.5-1 和补丁的现成映像 奥纳利1 链接到完成的图像
  2. 通过 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

为键盘安装内核模块。 在存储库中 年度报告1 有一个现成的包,叫做 苹果-bce-dkms-git。 要安装它,请在控制台中写入:

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 来实现启动。

  1. 我们启动
    bootctl --path=/boot install

    然后我们就陷入了内核恐慌。 关闭MacBook,再次打开,单击选项(不要关闭带有键盘的USB-C集线器)

  2. 我们检查除了外部设备之外还出现了新的 EFI BOOT 条目
  3. 我们选择从外部 USB 驱动器启动,就像第一次安装时一样(不要忘记指定 module_blacklist=thunderbolt)
  4. 我们挂载磁盘并通过 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

添加评论