MacBook Pro 2018 T2'nin ArchLinux (çift önyükleme) ile çalışmasını sağlama

Yeni T2 yongasının, dokunmatik çubuklu yeni 2018 MacBook'lara Linux yüklemeyi imkansız hale getireceği konusunda epey bir abartı var. Zaman geçti ve 2019'un sonunda üçüncü taraf geliştiriciler, T2 çipiyle etkileşim için bir dizi sürücü ve çekirdek yamasını uygulamaya koydu. 2018 ve daha yeni MacBook modelleri için ana sürücü, ses işleminin yanı sıra VHCI işlemini (dokunmatik/klavye/vb. işlemi) uygular.

Proje mbp2018-köprü-drv 3 ana bileşene ayrılmıştır:

  • BCE (Arabellek Kopyalama Motoru) - T2 ile ana iletişim kanalını oluşturur. VHCI ve Ses bu bileşeni gerektirir.
  • VHCI bir USB Sanal Ana Bilgisayar Denetleyicisidir; klavye, fare ve diğer sistem bileşenleri bu bileşen tarafından sağlanır (diğer sürücüler daha fazla işlevsellik sağlamak için bu ana bilgisayar denetleyicisini kullanır.
  • Ses - T2 ses arabirimi sürücüsü, şu anda yalnızca MacBook'un yerleşik hoparlörlerinden ses çıkışını desteklemektedir


İkinci projenin adı macbook12-spi sürücüsüve MacBook Pro 2016 Sonu ve sonrası için klavye, SPI trackpad ve dokunmatik çubuk için bir giriş sürücüsünü çalıştırma yeteneğini uygular. Sürüm 5.3'ten itibaren bazı klavye/trackpad sürücüleri artık çekirdeğe dahil edilmiştir.

Çekirdek yamaları kullanılarak wi-fi, dokunmatik yüzey vb. cihazlara yönelik destek de uygulandı. Geçerli çekirdek sürümü 5.3.5-1

Şu anda ne çalışıyor?

  1. NVMe
  2. klavye
  3. USB-C (Thunderbolt test edilmedi; modül otomatik olarak yüklendiğinde sistemi donduruyor)
  4. Dokunmatik çubuk (Fn tuşlarını, arka ışığı, ESC'yi vb. açma özelliğine sahip)
  5. Ses (yalnızca yerleşik hoparlörler)
  6. Wi-Fi modülü (brcmfmac aracılığıyla ve yalnızca iw aracılığıyla)
  7. USB-C üzerinden DisplayPort
  8. sensörler
  9. Askıya Al/Devam Ettir (kısmen)
  10. v.b..

Bu eğitim macbookpro15,1 ve macbookpro15,2 için geçerlidir. Makale İngilizce Github'dan alınmıştır. bundan dolayı. Bu makaledeki her şey işe yaramadı, bu yüzden kendim bir çözüm bulmam gerekiyordu.

Yüklemeniz gerekenler

  • USB-C bağlantı adaptörü - USB (bir fareyi, klavyeyi, USB modemi veya telefonu bağlantı modunda bağlamak için en az üç USB girişi). Bu yalnızca kurulumun ilk aşamalarında gereklidir
  • USB klavye
  • USB/USB-C flash sürücü minimum 4 GB

1. Harici ortamdan önyükleme yasağını devre dışı bırakın

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

2. Disk Yardımcı Programını kullanarak boş alan ayırın

Kolaylık sağlamak için, diske hemen 30 GB ayırdım ve onu Disk Yardımcı Programında exfat olarak biçimlendirdim. Fiziksel Disk Disk Yardımcı Programını Bölümlendirme.

3. Bir ISO görüntüsü oluşturun

Seçenekler şunlardır:

  1. Basit rotayı takip edebilir ve 5.3.5-1 çekirdeği ve yamaları içeren hazır bir görüntüyü şuradan indirebilirsiniz: aunali1 bitmiş görüntünün bağlantısı
  2. Archlive aracılığıyla kendiniz bir görüntü oluşturun (Archa dağıtımına sahip bir sistem gereklidir)

    Ayarlamak başpiskopos

    pacman -S archiso

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

    Depoyu pacman.conf'a ekleyin:

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

    Pacman.conf'taki orijinal çekirdeği göz ardı ediyoruz:

    IgnorePkg   = linux linux-headers
    

    Gerekli paketleri ekleyin, sonunda linux-mbp çekirdeğini ve linux-mbp-başlıklarını ekleyin

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

    Komut dosyasını etkileşimli modda çalışacak şekilde değiştiriyoruz (pacstrap -C'yi pacstrap -i -C ile değiştirin):

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

    Bir görüntü oluşturmak:

    sudo ./build.sh -v

    Yok sayılan paketleri atlamak için Y tuşuna basın, ardından iso görüntüsünü usb flash sürücüye yazın:

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

4. İlk açılış

Flash sürücü ve klavye takılıyken yeniden başlatın. Elma göründüğünde seçeneklere basın, EFI BOOT'u seçin.

Daha sonra “e” tuşuna basmanız ve komut satırının sonuna girmeniz gerekir. module_blacklist=yıldırım. Bu yapılmazsa sistem önyükleme yapmayabilir ve Thunderbolt ICM Hatası görünecektir.

Fdisk/cfdisk'i kullanarak bölümümüzü buluyoruz (benim için nvme0n1p4), biçimlendiriyoruz ve arşivi yüklüyoruz. Kullanabilirsiniz resmi talimatlar veya yan yan.

Bir önyükleme bölümü oluşturmuyoruz; önyükleyiciyi buraya yazacağız. /dev/nvme0n1p1
/mnt içindeki ortam tamamen oluşturulduktan sonra ve arch-chroot'a geçmeden önce şunu yazın:

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

/etc/pacman.conf'a ekleyin:


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

Çekirdeği yükleyin:


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

Thunderbolt ve applesmc'yi /etc/modprobe.d/blacklist.conf dosyasına kaydediyoruz.

blacklist thunderbolt
blacklist applesmc

Klavye, dokunmatik çubuk vb.

Yay'ı yükleyin:


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

Dokunmatik çubuğun çalışması için modüllerin kurulması:


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

Başlangıçta modüller ekleyin: /etc/modules-load.d/apple.conf

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

Klavye için çekirdek modüllerinin kurulması. Depoda yıllık1 hazır bir paket var, buna denir apple-bce-dkms-git. Yüklemek için konsola şunu yazın:

pacman -S apple-bce-dkms-git

Bu durumda çekirdek modülü çağrılacaktır. elma-bce. Kendi kendine montaj durumunda buna denir bce. Buna göre mkinicpio.conf dosyasının MODÜLLER kısmına bir modül kaydetmek istiyorsanız hangi modülü kurduğunuzu unutmayın.

Manuel montaj:


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 veya apple-bce modülünü başlangıca ekleyin: /etc/modules-load.d/bce.conf

bce

Varsayılan olarak Fn düğmelerini kullanmak istiyorsanız /etc/modprobe.d/apple-tb.conf dosyasına şunu yazın:

options apple-ib-tb fnmode=2

Çekirdek ve initramfs güncelleniyor.


mkinitcpio -p linux-mbp

iwd'yi yükleyin:

sudo pacman -S networkmanager iwd

5. Yükleyici

Tüm ana paketler chroot'a yüklendikten sonra önyükleyiciyi kurmaya başlayabilirsiniz.

İşe gücüm yetmedi. Grub harici bir USB sürücüsünden önyükleme yapıyor, ancak bunu nvme aracılığıyla kaydetmeye çalıştığınızda

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

sistem çekirdek paniğine girdi ve yeniden başlattıktan sonra seçenekler aracılığıyla yeni bir öğe görünmedi. Bu soruna net bir çözüm bulamadım ve bu nedenle systemd-boot kullanarak önyükleme yapmayı denemeye karar verdim.

  1. koşmak
    bootctl --path=/boot install

    ve çekirdek paniğine giriyoruz. MacBook'u kapatın, tekrar açın, seçeneklere tıklayın (klavyeli USB-C hub'ını kapatmayın)

  2. Harici cihaza ek olarak yeni bir EFI BOOT girişinin görünüp görünmediğini kontrol ediyoruz
  3. İlk kurulumda olduğu gibi harici bir USB sürücüden önyükleme yapmayı seçiyoruz (module_blacklist=thunderbolt belirtmeyi unutmayın)
  4. Diskimizi takıyoruz ve arch-chroot aracılığıyla ortama giriyoruz


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

Sistem tamamen yüklenene kadar klavyenin çalışması gerekiyorsa (luks/dm-crypt şifreleme kullanılırken bu gereklidir), bunu MODÜLLER bölümündeki /etc/mkinicpio.conf dosyasına yazın:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Çekirdek ve initramfs güncelleniyor.


mkinicpio -p linux-mbp

Systemd-boot'u ayarlama

/boot/loader/loader.conf dosyasını düzenliyoruz, içindeki her şeyi siliyoruz ve aşağıdakileri ekliyoruz:

default arch
timeout 5
editor 1

/boot/loader/entries klasörüne gidin, arch.conf dosyasını oluşturun ve şunu yazın:

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

Luks ve lvm kullandıysanız, o zaman

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

MacOS'ta yeniden başlatın.

6. Wi-Fi kurulumu

Sonunda ortaya çıktığı gibi, MacOS, wi-fi bağdaştırıcısının ürün yazılımı dosyalarını klasörde saklar /usr/paylaşım/ürün yazılımı/wifi , ve bunları oradan bloblar halinde alıp brcmfmac çekirdek modülüne besleyebilirsiniz. Bağdaştırıcınızın hangi dosyaları kullandığını öğrenmek için MacOS'ta bir terminal açın ve şunu yazın:

ioreg -l | grep C-4364

Uzun bir liste alıyoruz. Yalnızca bölümdeki dosyalara ihtiyacımız var İstenen Dosyalar:

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

Sizin durumunuzda dosya adları farklı olabilir. Bunları /usr/share/firmware/wifi klasöründen flash sürücüye kopyalayın ve aşağıdaki gibi yeniden adlandırın:

    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>

Bu durumda son metin dosyasında model adları yer alıyor; eğer modeliniz macbookpro15,2 değilse bu durumda bu dosyayı MacBook modelinize uygun olarak yeniden adlandırmanız gerekir.

Arch'ı yeniden başlatın.

Dosyaları flash sürücüden /lib/firmware/brcm/ klasörüne kopyalayın


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/

Modülün işlevselliğinin kontrol edilmesi:


rmmod brcmfmac
modprobe brcmfmac

Ağ arayüzünün ifconfig/ip aracılığıyla görünmesini sağlıyoruz.
aracılığıyla Wi-Fi kurulumu ıwctl

Dikkat. Netctl, nmcli vb. aracılığıyla. Arayüz yalnızca iwd aracılığıyla çalışmıyor.

NetworkManager'ı iwd kullanmaya zorluyoruz. Bunu yapmak için /etc/NetworkManager/NetworkManager.conf dosyasını oluşturun ve şunu yazın:

[device]
wifi.backend=iwd

NetworkManager hizmetini başlatın


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

7. Ses

Sesin çalışması için pulseaudio'yu yüklemeniz gerekir:


sudo pacman -S pulseaudio

Üç dosyayı indirin:

Onları taşıyalım:

    /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. Askıya Al/Devam Et

Şu anda, 16.10.2019 sesi veya askıya almayı/devam ettirmeyi seçmeniz gerekir. bce modülünün yazarının işlevselliği tamamlamasını bekliyoruz.

Askıya alma/devam ettirme desteğine sahip bir modül oluşturmak için aşağıdakileri yapmanız gerekir:


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

Hazır apple-bce modülünü anuali1 deposundan kurduysanız, önce onu kaldırmanız ve ancak daha sonra bce modülünü askıya alma modu desteğiyle birleştirip kurmanız gerekir.

Ayrıca applesmc modülünü kara listeye eklemeniz (bunu daha önce yapmadıysanız) ve sondaki seçenekler satırındaki /boot/loader/entries/arch.conf dosyasına parametrenin eklendiğinden emin olmanız gerekir. pcie_ports=uyumluluk.

Şu anda, dokunmatik çubuk sürücüsü askıya alma moduna girerken çöküyor ve yıldırım sürücüsü bazen sistemi 30 saniyeden fazla ve devam ederken birkaç dakika boyunca donduruyor. Bu, sorunlu modüllerin otomatik olarak boşaltılmasıyla düzeltilebilir.

Bir komut dosyası oluşturun /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

Çalıştırılabilir hale getirin:

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

Şimdilik bu kadar. Sonuç, askıya alma/devam ettirme ile ilgili bazı nüanslar dışında, tamamen uygulanabilir bir sistemdir. Birkaç günlük çalışma süresi boyunca herhangi bir çökme veya çekirdek paniği gözlemlenmedi. Yakın gelecekte bce modülünün yazarının bunu tamamlayacağını ve askıya alma/devam ettirme ve ses için tam destek alacağımızı umuyorum.

Kaynak: habr.com

Yorum ekle