使MacBook Pro 2018 T2与ArchLinux配合使用(dualboot)

由于采用了新的T2芯片,因此无法在带有触摸条的新型2018 MacBook上安装Linux。 随着时间的流逝,到2019年底,第三方开发人员实现了许多驱动程序和内核补丁,用于与T2芯片进行交互。 适用于2018年及更新型号的MacBook的主驱动程序实现VHCI的工作(触摸/键盘/等的操作)以及声音的功能。

mbp2018-bridge-drv项目分为3个主要组成部分:

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

第二个项目称为macbook12-spi-driver ,它实现了键盘输入板,触控板SPI和MacBook Pro(2016年底及以后)的触摸板的输入驱动器的可能性。 从版本5.3开始,内核中现在包含一些键盘/触控板驱动程序。

还使用内核补丁为Wi-Fi,触摸板等设备实现了支持。 当前内核版本为5.3.5-1

目前有效的方法


  1. NVMe
  2. 琴键
  3. USB-C(未经测试的Thunderbolt,当模块自动加载时,它将紧紧地挂起系统)
  4. 触摸栏(具有打开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/zh-CN/HT208330
https://www.ninjastik.com/support/2018-macbook-pro-boot-from-usb/

2.使用磁盘实用程序分配可用空间


为了方便起见,我立即为磁盘分配了30GB的磁盘空间,并将其格式化为在磁盘实用程序本身中可用。 将物理磁盘分区为“磁盘工具”分区

3.形成一个ISO映像


选项:

  1. 您可以采用简单的方法,使用内核5.3.5-1下载完成的映像,并从aunali1 链接下载补丁到完成的映像。
  2. 通过archlive自己创建映像(您需要具有archa发行版的系统)

    安装archiso

    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 。 如果不这样做,则系统可能无法启动,并且Thunderbolt ICM错误将崩溃。

使用fdisk / cfdisk,我们找到分区(我有nvme0n1p4),格式化并安装该arch。 您可以使用官方说明第三方

我们不创建引导分区,我们将引导加载程序写入/ 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 

将Thunderbolt和applesmc放在/etc/modprobe.d/blacklist.conf中

 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 

安装键盘的内核模块。 anuali1存储库具有一个现成的软件包,称为apple-bce-dkms-git 。 要安装它,请在控制台中编写:

 pacman -S apple-bce-dkms-git 

在这种情况下,内核模块将称为apple-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中安装了所有主要软件包,就可以继续安装引导程序。

我从来没有设法使g工作。 从外部USB驱动器启动grub,但是当您尝试通过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加密,则必须这样做),然后将其写在MODULES部分的/etc/mkinicpio.conf文件中:

 MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce) 

更新内核和initramfs。

 mkinicpio -p linux-mbp 

配置系统启动


我们编辑文件/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. Wi-Fi设定


事实证明,MacOS将wi-fi适配器的固件文件存储在/ usr / share / firmware / wifi文件夹中,您可以以blob的形式从那里获取它们,并将其提供给brcmfmac内核模块。 为了准确找出适配器使用的文件,请在MacOS中打开终端并输入:

 ioreg -l | grep C-4364 

我们得到一长串。 我们只需要RequestedFiles部分中的文件:

 "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文件夹复制到USB闪存驱动器,并将其重命名为以下视图:

  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型号重命名此文件。

重新启动进入拱门。

将文件从USB闪存驱动器复制到/ lib /固件/ 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出现。
通过iwctl配置wifi

注意事项 通过netctl,nmcli等 该接口不起作用,只能通过iwd。

使NetworkManager使用iwd。 为此,创建文件/etc/NetworkManager/NetworkManager.conf并编写:

 [device] wifi.backend=iwd 

启动NetworkManager服务

 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.暂停/恢复


目前, 2019年 10月16日,您必须选择声音还是暂停/恢复。 我们正在等待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模块添加到黑名单中(如果您之前没有做过此操作),并确保最后在选项行中将pcie_ports = compat添加到/boot/loader/entries/arch.conf中。

此刻,当您进入挂起模式时,触控板驱动程序崩溃,而雷电驱动程序有时会使系统挂起30秒钟以上,而在恢复时则挂起几分钟。 这可以通过自动下载问题模块来解决。

创建脚本/lib/systemd/system-sleep/rmmod.sh

 #!/bin/sh if [ "${1}" == "pre" ]; then rmmod thunderbolt rmmod apple_ib_tb elif [ "${1}" == "post" ]; then modprobe apple_ib_tb modprobe thunderbolt fi 

使它可执行:

 sudo chmod +x /lib/systemd/system-sleep/rmmod.sh 

现在就这些了。 结果是一个功能全面的系统,但在某些情况下具有暂停/恢复的细微差别。 几天的正常运行时间都没有发现崩溃和内核恐慌。 我希望bce模块的作者能够在不久的将来完成它,并且我们将获得对暂停/恢复和声音的全面支持。

Source: https://habr.com/ru/post/zh-CN472106/


All Articles