Làm cho MacBook Pro 2018 T2 hoạt động với ArchLinux (dualboot)

Đã có khá nhiều sự cường điệu về việc chip T2 mới sẽ khiến việc cài đặt Linux trên MacBook 2018 mới bằng thanh cảm ứng không thể thực hiện được. Thời gian trôi qua, vào cuối năm 2019, các nhà phát triển bên thứ ba đã triển khai một số trình điều khiển và bản vá kernel để tương tác với chip T2. Trình điều khiển chính cho các mẫu MacBook 2018 và mới hơn triển khai hoạt động VHCI (hoạt động cảm ứng/bàn phím/v.v.), cũng như hoạt động âm thanh.

Dự án mbp2018-cầu-drv chia thành 3 thành phần chính:

  • BCE (Buffer Copy Engine) - thiết lập kênh liên lạc chính với T2. VHCI và Audio yêu cầu thành phần này.
  • VHCI là Bộ điều khiển máy chủ ảo USB; bàn phím, chuột và các thành phần hệ thống khác được cung cấp bởi thành phần này (các trình điều khiển khác sử dụng bộ điều khiển máy chủ này để cung cấp nhiều chức năng hơn.
  • Audio - driver cho giao diện âm thanh T2, hiện chỉ hỗ trợ phát âm thanh qua loa tích hợp của MacBook


Dự án thứ hai có tên trình điều khiển macbook12-spivà nó triển khai khả năng vận hành trình điều khiển đầu vào cho bàn phím, bàn di chuột SPI và thanh cảm ứng cho MacBook Pro Cuối năm 2016 trở lên. Một số trình điều khiển bàn phím/bàn di chuột hiện đã được bao gồm trong kernel, bắt đầu từ phiên bản 5.3.

Hỗ trợ cho các thiết bị như wi-fi, bàn di chuột, v.v. cũng được triển khai bằng các bản vá kernel. Phiên bản hạt nhân hiện tại 5.3.5-1

Những gì đang làm việc vào lúc này

  1. NVMe
  2. bàn phím
  3. USB-C (Thunderbolt chưa được thử nghiệm; khi mô-đun được tải tự động, nó sẽ đóng băng hệ thống)
  4. Touchbar (có khả năng bật phím Fn, đèn nền, ESC, v.v.)
  5. Âm thanh (chỉ loa tích hợp)
  6. Mô-đun Wi-Fi (qua bcmfmac và chỉ qua iw)
  7. DisplayPort qua USB-C
  8. Cảm biến
  9. Tạm dừng/Tiếp tục (một phần)
  10. vv ..

Hướng dẫn này có thể áp dụng cho macbookpro15,1 và macbookpro15,2. Bài viết được lấy làm cơ sở từ Github bằng tiếng Anh. do đó. Không phải mọi thứ trong bài viết này đều hiệu quả nên tôi phải tự mình tìm ra giải pháp.

Những gì bạn cần cài đặt

  • Bộ chuyển đổi đế cắm USB-C sang USB (ít nhất ba đầu vào USB để kết nối chuột, bàn phím, modem USB hoặc điện thoại ở chế độ kết nối). Điều này chỉ cần thiết trong giai đoạn cài đặt đầu tiên
  • bàn phím USB
  • Ổ đĩa flash USB/USB-C tối thiểu 4GB

1. Vô hiệu hóa lệnh cấm khởi động từ phương tiện bên ngoài

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

2. Phân bổ dung lượng trống bằng Disk Utility

Để thuận tiện, tôi cấp ngay 30GB cho ổ đĩa, định dạng nó ở dạng exfat trong chính Disk Utility. Phân vùng tiện ích đĩa vật lý.

3. Tạo ảnh ISO

Tùy chọn:

  1. Bạn có thể đi theo con đường đơn giản và tải xuống hình ảnh làm sẵn với kernel 5.3.5-1 và các bản vá từ aunali1 liên kết đến hình ảnh đã hoàn thành
  2. Tự tạo hình ảnh thông qua Archlive (bắt buộc phải có hệ thống có bản phân phối Archa)

    Đặt kiến trúc sư

    pacman -S archiso

    
    cp -r /usr/share/archiso/configs/releng/ archlive
    cd archlive
    

    Thêm kho lưu trữ vào pacman.conf:

    
    [mbp]
    Server = https://packages.aunali1.com/archlinux/$repo/$arch
    

    Chúng tôi bỏ qua kernel gốc trong pacman.conf:

    IgnorePkg   = linux linux-headers
    

    Thêm các gói cần thiết, cuối cùng thêm kernel linux-mbp và linux-mbp-headers

    ...
    wvdial
    xl2tpd
    linux-mbp
    linux-mbp-headers
    

    Chúng tôi thay đổi tập lệnh để hoạt động ở chế độ tương tác (thay thế pacstrap -C bằng 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!"
    }

    Hình thành một hình ảnh:

    sudo ./build.sh -v

    Nhấn Y để bỏ qua các gói bị bỏ qua, sau đó ghi image iso vào ổ flash USB:

    sudo dd if=out/archlinux*.iso of=/dev/sdb bs=1M

4. Lần khởi động đầu tiên

Khởi động lại với ổ đĩa flash và bàn phím được lắp vào. Nhấn tùy chọn khi quả táo xuất hiện, chọn EFI BOOT.

Tiếp theo, bạn cần nhấn phím “e” và enter ở cuối dòng lệnh module_blacklist=sấm sét. Nếu điều này không được thực hiện, hệ thống có thể không khởi động được và Lỗi Thunderbolt ICM sẽ xuất hiện.

Sử dụng fdisk/cfdisk, chúng tôi tìm thấy phân vùng của mình (đối với tôi là nvme0n1p4), định dạng nó và cài đặt kho lưu trữ. Bạn có thể dùng hướng dẫn chính thức hoặc một bên.

Chúng tôi không tạo phân vùng khởi động; chúng tôi sẽ ghi bộ nạp khởi động vào /dev/nvme0n1p1
Sau khi môi trường trong /mnt được hình thành hoàn toàn và trước khi chuyển sang Arch-chroot, hãy viết:

mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt /bin/bash

Thêm vào /etc/pacman.conf:


[mbp]
Server = https://packages.aunali1.com/archlinux/$repo/$arch

Cài đặt hạt nhân:


sudo pacman -S linux-mbp linux-mbp-headers
sudo mkinitcpio -p linux-mbp

Chúng tôi đăng ký Thunderbolt và Applesmc trong /etc/modprobe.d/blacklist.conf

blacklist thunderbolt
blacklist applesmc

Bàn phím, thanh cảm ứng, v.v.

Cài đặt nhé:


sudo pacman -S git gcc make fakeroot binutils
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si

Cài đặt module để touchbar hoạt động:


git clone --branch mbp15 https://github.com/roadrunner2/macbook12-spi-driver.git
cd macbook12-spi-driver
make install

Thêm mô-đun để khởi động: /etc/modules-load.d/apple.conf

industrialio_triggered_buffer
apple-ibridge
apple-ib-tb
apple-ib-als

Cài đặt mô-đun hạt nhân cho bàn phím. Trong kho lưu trữ thường niên1 có một gói làm sẵn, nó gọi là apple-bce-dkms-git. Để cài đặt nó, hãy viết vào bảng điều khiển:

pacman -S apple-bce-dkms-git

Trong trường hợp này, mô-đun hạt nhân sẽ được gọi táo-bce. Trong trường hợp tự lắp ráp, nó được gọi là ecb. Theo đó, nếu bạn muốn đăng ký một mô-đun trong phần MODULES của tệp mkinicpio.conf thì đừng quên bạn đã cài đặt mô-đun nào.

Lắp ráp thủ công:


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

Thêm mô-đun bce hoặc apple-bce để khởi động: /etc/modules-load.d/bce.conf

bce

Nếu bạn muốn sử dụng các nút Fn theo mặc định, hãy ghi vào tệp /etc/modprobe.d/apple-tb.conf:

options apple-ib-tb fnmode=2

Cập nhật kernel và initramfs.


mkinitcpio -p linux-mbp

Cài đặt iwd:

sudo pacman -S networkmanager iwd

5. Bộ nạp

Sau khi tất cả các gói chính được cài đặt bên trong chroot, bạn có thể bắt đầu cài đặt bộ nạp khởi động.

Tôi chưa thể khiến grub hoạt động được. Grub khởi động từ ổ USB ngoài, nhưng khi bạn cố đăng ký nó trong nvme qua

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub

hệ thống rơi vào tình trạng hoảng loạn kernel và sau khi khởi động lại một mục mới thông qua các tùy chọn đã không xuất hiện. Tôi không tìm thấy bất kỳ giải pháp rõ ràng nào cho vấn đề này và do đó quyết định thử triển khai khả năng khởi động bằng systemd-boot.

  1. Phóng
    bootctl --path=/boot install

    và chúng ta rơi vào trạng thái hoảng loạn về hạt nhân. Tắt MacBook, bật lại, nhấp vào tùy chọn (không tắt hub USB-C bằng bàn phím)

  2. Chúng tôi kiểm tra xem mục EFI BOOT mới đã xuất hiện ngoài thiết bị bên ngoài chưa
  3. Chúng tôi chọn khởi động từ ổ USB ngoài, như trong lần cài đặt đầu tiên (đừng quên chỉ định module_blacklist=thunderbolt)
  4. Chúng tôi gắn đĩa của mình và đi vào môi trường thông qua Arch-chroot


mount /dev/nvme0n1p4 /mnt
mount /dev/nvme0n1p1 /mnt/boot
arch-chroot /mnt

Nếu bàn phím cần phải hoạt động cho đến khi hệ thống được tải đầy đủ (điều này là cần thiết khi sử dụng mã hóa luks/dm-crypt), thì hãy ghi nó vào tệp /etc/mkinicpio.conf trong phần MODULES:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Cập nhật kernel và initramfs.


mkinicpio -p linux-mbp

Thiết lập systemd-boot

Chúng tôi chỉnh sửa tệp /boot/loader/loader.conf, xóa mọi thứ bên trong và thêm thông tin sau:

default arch
timeout 5
editor 1

Đi tới thư mục /boot/loader/entries, tạo tệp Arch.conf và viết:

title arch
linux /vmlinuz-linux-mbp
initrd /initramfs-linux-mbp.img
options root=/dev/<b>nvme0n1p4</b> rw pcie_ports=compat

Nếu bạn đã sử dụng luks và lvm thì

options cryptdevice=/dev/<b>nvme0n1p4</b>:luks root=/dev/mapper/vz0-root rw pcie_ports=compat

Khởi động lại vào MacOS.

6. Thiết lập Wi-Fi

Cuối cùng, MacOS lưu trữ các tệp chương trình cơ sở cho bộ điều hợp wi-fi trong thư mục /usr/share/chương trình cơ sở/wifi và bạn có thể lấy chúng từ đó dưới dạng các đốm màu và đưa chúng vào mô-đun hạt nhân brcmfmac. Để tìm hiểu xem bộ điều hợp của bạn sử dụng tệp nào, hãy mở một thiết bị đầu cuối trong MacOS và viết:

ioreg -l | grep C-4364

Chúng tôi nhận được một danh sách dài. Chúng tôi chỉ cần các tập tin từ phần Tệp được yêu cầu:

"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>"})

Trong trường hợp của bạn, tên tệp có thể khác nhau. Sao chép chúng từ thư mục /usr/share/firmware/wifi vào ổ đĩa flash và đổi tên chúng như sau:

    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>

Trong trường hợp này, tệp văn bản cuối cùng chứa tên mẫu máy, nếu mẫu máy của bạn không phải là macbookpro15,2 thì bạn cần đổi tên tệp này cho phù hợp với mẫu máy MacBook của mình.

Khởi động lại vào Arch.

Sao chép các tập tin từ ổ đĩa flash vào thư mục /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/

Kiểm tra chức năng của mô-đun:


rmmod brcmfmac
modprobe brcmfmac

Chúng tôi đảm bảo rằng giao diện mạng xuất hiện thông qua ifconfig/ip.
Thiết lập wifi qua iwctl

Chú ý. Thông qua netctl, nmcli, v.v. Giao diện không hoạt động, chỉ thông qua iwd.

Chúng tôi buộc NetworkManager sử dụng iwd. Để thực hiện việc này, hãy tạo tệp /etc/NetworkManager/NetworkManager.conf và viết:

[device]
wifi.backend=iwd

Khởi động dịch vụ NetworkManager


sudo systemctl start NetworkManager.service
sudo systemctl enable NetworkManager.service

7. Âm thanh

Để âm thanh hoạt động, bạn cần cài đặt Pulseaudio:


sudo pacman -S pulseaudio

Tải xuống ba tập tin:

Hãy di chuyển chúng:

    /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. Tạm dừng/Tiếp tục

Hiện nay 16.10.2019 bạn phải chọn âm thanh hoặc tạm dừng/tiếp tục. Chúng tôi đang chờ tác giả của mô-đun bce hoàn thành chức năng.

Để xây dựng một mô-đun có hỗ trợ bị tạm dừng/tiếp tục, bạn phải làm như sau:


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

Nếu bạn đã cài đặt mô-đun apple-bce làm sẵn từ kho lưu trữ anuali1, thì trước tiên bạn phải xóa nó và chỉ sau đó lắp ráp và cài đặt mô-đun bce có hỗ trợ chế độ tạm dừng.

Ngoài ra, bạn cần thêm mô-đun applemc vào danh sách đen (nếu bạn chưa làm điều này trước đây) và đảm bảo rằng trong /boot/loader/entries/arch.conf trong dòng tùy chọn ở cuối, tham số đã được thêm vào pcie_ports=tương thích.

Hiện tại, trình điều khiển thanh cảm ứng gặp sự cố khi vào chế độ tạm dừng và trình điều khiển sấm sét đôi khi khiến hệ thống bị treo trong hơn 30 giây và trong vài phút khi tiếp tục lại. Điều này có thể được khắc phục bằng cách tự động dỡ bỏ các mô-đun có vấn đề.

Tạo một kịch bản /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

Làm cho nó có thể thực thi được:

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

Đó là tất cả cho bây giờ. Kết quả là một hệ thống hoàn toàn khả thi, ngoại trừ một số vấn đề liên quan đến việc tạm dừng/tiếp tục. Không có sự cố hoặc hoảng loạn hạt nhân nào được quan sát thấy trong vài ngày hoạt động. Tôi hy vọng rằng trong thời gian tới tác giả của mô-đun bce sẽ hoàn thành nó và chúng tôi sẽ nhận được sự hỗ trợ đầy đủ về việc tạm dừng/tiếp tục và âm thanh.

Nguồn: www.habr.com

Thêm một lời nhận xét