讓 MacBook Pro 2018 T2 與 ArchLinux 搭配使用(雙重啟動)

人們一直在大肆宣傳,新的 T2 晶片將導致 2018 年新款帶有觸控螢幕的 MacBook 無法安裝 Linux。 時間流逝,到了2019年底,第三方開發者實作了許多與T2晶片互動的驅動程式和核心補丁。 MacBook 2018 年及更新型號的主驅動程式實現了 VHCI 操作(觸控/鍵盤等操作)以及聲音操作。

項目 mbp2018-bridge-drv 分為 3 個主要部分:

  • BCE(緩衝區複製引擎)- 建立與 T2 的主要通訊通道。 VHCI 和音訊需要此組件。
  • VHCI是USB虛擬主機控制器; 鍵盤、滑鼠和其他系統元件均由該元件提供(其他驅動程式使用此主機控制器來提供更多功能。
  • 音訊 - T2音訊介面的驅動程序,目前僅支援透過MacBook內建揚聲器輸出音訊


第二個項目稱為 macbook12-spi-驅動程式,並且它實現了操作 MacBook Pro 2016 年末及更高版本的鍵盤、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。 在自組裝的情況下,它被稱為 公元前。 因此,如果您想在 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模組的作者能夠完成它,並且我們將得到對掛起/恢復和聲音的全面支持。

來源: www.habr.com

添加評論