人們一直在大肆宣傳,新的 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。 在自組裝的情況下,它被稱為 公元前。 因此,如果您想在 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模組的作者能夠完成它,並且我們將得到對掛起/恢復和聲音的全面支持。
來源: www.habr.com