Çêkirina MacBook Pro 2018 T2 bi ArchLinux (dualboot) re bixebite

Li ser vê yekê ku çîpa nû ya T2 dê nekaribe Linux-ê li ser MacBookên nû yên 2018-an bi pêçekê saz bike, pir hûrgulî heye. Dem derbas bû, û di dawiya sala 2019-an de, pêşdebirên partiya sêyemîn ji bo danûstendina bi çîpê T2 re hejmarek ajoker û paçên kernel bicîh kirin. Ajokara sereke ya ji bo modelên MacBook 2018 û nûtir operasyona VHCI (xebata desta / klavyeyê / hwd.), û hem jî operasyona deng pêk tîne.

Projeyê MBP2018-Bridge-DRV li 3 beşên sereke dabeş:

  • BCE (Buffer Copy Engine) - bi T2 re kanala ragihandinê ya sereke saz dike. VHCI û Audio vê hêmanê hewce dike.
  • VHCI Kontrolkerek Mêvandarê Virtual a USB ye; Keys, mişk û pêkhateyên pergala din ji hêla vê pêkhatê ve têne peyda kirin (ajokarên din vê kontrola mêvandariyê bikar tînin da ku fonksiyonek bêtir peyda bikin.
  • Audio - ajokera ji bo pêwendiya bihîstwerî ya T2, niha tenê bi riya axaftvanên MacBook-ê yên çêkirî ve hilberîna deng piştgirî dike


Projeya duyemîn tê gotin macbook12-spi-driver, û ew şiyana xebitandina ajokerek têketinê ya ji bo klavyeyê, SPI trackpad, û çîçekê ji bo Dawiya 2016-an û paşê MacBook Pro-yê bicîh tîne. Hin ajokarên klavyeyê/trackpad naha di nav kernelê de cih digirin, bi guhertoya 5.3 dest pê dikin.

Piştgiriya ji bo cîhazên wekî wi-fi, touchpad, hwd jî bi karanîna pêlên kernelê hate bicîh kirin. Guhertoya Kernel ya heyî 5.3.5-1

Di vê demê de çi dixebite

  1. NVMe
  2. Keyboard
  3. USB-C (Thunderbolt nehatiye ceribandin; gava ku modul bixweber tê barkirin, pergalê dicemidîne)
  4. Touchbar (bi şiyana vekirina bişkokên Fn, ronahiya paşîn, ESC, hwd.)
  5. Deng (tenê axaftvanên çêkirî)
  6. Modula Wi-Fi (bi rêya brcmfmac û tenê bi iw)
  7. DisplayPort li ser USB-C
  8. Sensor
  9. Rawestandin/Destpêkirin (bi qismî)
  10. û ..

Ev tutorial ji bo macbookpro15,1 û macbookpro15,2 derbasdar e. Gotar ji Github bi Englishngilîzî wekî bingehek hate girtin. ji vir. Di vê gotarê de her tişt ne xebitî, ji ber vê yekê neçar ma ku ez bixwe çareseriyek bibînim.

Ya ku hûn hewce ne ku saz bikin

  • Adaptera girêdana USB-C ya USB-yê (kêm sê têketinên USB ji bo girêdana mişk, klavyeyek, modem USB an têlefonê di moda girêdanê de). Ev tenê di qonaxên pêşîn ên sazkirinê de hewce ye
  • Klavyeya USB
  • Flash ajokera USB/USB-C herî kêm 4 GB

1. Qedexekirina bootkirina ji medyaya derve neçalak bike

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

2. Cihê belaş bi karanîna Disk Utility veqetînin

Ji bo rehetiyê, min tavilê 30 GB ji dîskê re veqetand, wê di exfat de di Disk Utility bixwe de format kir. Parvekirina Karûbarek Dîska Fîzîkî.

3. Wêneyek ISO çêbikin

Vebijêrkên

  1. Hûn dikarin riya hêsan biçin û wêneyek amade bi kernel 5.3.5-1 û pêçan ji aunali1 girêdana wêneyê qedandî
  2. Bi archlive re wêneyek xwe biafirînin (pergalek bi belavkirina Archa hewce ye)

    Lêkirin archiso

    pacman -S archiso

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

    Depoyê li pacman.conf zêde bikin:

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

    Em kernelê orîjînal di pacman.conf de paşguh dikin:

    IgnorePkg   = linux linux-headers
    

    Pakêtên pêwîst lê zêde bikin, di dawiyê de kernel linux-mbp û sernivîsên linux-mbp-ê lê zêde bikin

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

    Em skrîptê diguherînin da ku di moda înteraktîf de bixebitin (pacstrap -C bi pacstrap -i -C veguherînin):

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

    Avakirina wêneyek:

    sudo ./build.sh -v

    Y bikirtînin da ku pakêtên paşguhkirî derbas bikin, dûv re wêneya iso li ajokera flash USB-ê binivîsin:

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

4. Boot yekem

Bi ajokera flash û klavyeya têxe ji nû ve bidin destpêkirin. Dema ku sêv xuya dibe vebijarkên çap bikin, EFI BOOT hilbijêrin.

Piştre, hûn hewce ne ku bişkojka "e" bikirtînin û li dawiya rêzika fermanê têkevin module_blacklist=Tunderbolt. Ger ev neyê kirin, dibe ku pergal neyê bootkirin û xeletiyek Thunderbolt ICM dê xuya bibe.

Bi karanîna fdisk/cfdisk em dabeşkirina xwe dibînin (ji bo min ew nvme0n1p4 e), wê format bikin û arşîvê saz bikin. Hûn dikarin bikar bînin talîmatên fermî an kêlekda.

Em dabeşek boot naafirînin; em ê bootloader tê de binivîsin / dev / nvme0n1p1
Piştî ku hawîrdora li /mnt bi tevahî pêk hat û berî ku derbasî arch-chroot bibe, binivîse:

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

Add to /etc/pacman.conf:


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

Kernelê saz bikin:


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

Em thunderbolt û applesmc li /etc/modprobe.d/blacklist.conf qeyd dikin

blacklist thunderbolt
blacklist applesmc

Keyboard, touchbar, hwd

Yay saz bikin:


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

Sazkirina modulan ji bo karkirina bara touchbar:


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

Modulan li destpêkê zêde bikin: /etc/modules-load.d/apple.conf

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

Sazkirina modulên kernelê ji bo klavyeyê. Di depoyê de anuali1 pakêtek amade heye, jê re tê gotin Apple-bce-dkms-git. Ji bo sazkirina wê, di konsolê de binivîse:

pacman -S apple-bce-dkms-git

Di vê rewşê de, modula kernel dê were gotin sêv-bce. Di mijara xwe-civînê de, jê re tê gotin ecb. Li gorî vê yekê, heke hûn dixwazin modulek di beşa MODULES a pelê mkinicpio.conf de tomar bikin, wê hingê we kîjan modul saz kiriye ji bîr nekin.

Meclîsa manual:


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

Modula bce an apple-bce li destpêkê zêde bikin: /etc/modules-load.d/bce.conf

bce

Heke hûn dixwazin bişkojkên Fn-ê bi xwerû bikar bînin, wê hingê di pelê /etc/modprobe.d/apple-tb.conf de binivîsin:

options apple-ib-tb fnmode=2

Nûvekirina kernel û initramfs.


mkinitcpio -p linux-mbp

Iwd saz bikin:

sudo pacman -S networkmanager iwd

5. Barker

Gava ku hemî pakêtên sereke di hundurê chroot de têne saz kirin, hûn dikarin dest bi sazkirina bootloader bikin.

Min nikarîbû grûbê bixebitim. Grub ji ajokerek USB-ya derveyî vedigere, lê gava ku hûn hewl didin ku wê bi navgîniya nvme tomar bikin

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

pergal ket nav panîkê ya kernelê, û piştî ji nû ve destpêkirinê tiştek nû bi vebijarkan xuya nedikir. Min ji vê pirsgirêkê re çareseriyek zelal nedît û ji ber vê yekê biryar da ku ez hewl bidim ku bootkirinê bi karanîna systemd-boot-ê bicîh bikim.

  1. Destpêkirin
    bootctl --path=/boot install

    û em dikevin panîkê kernel. MacBook-ê vemirînin, wê dîsa vekin, vebijarkan bikirtînin (bi klavyeyê navika USB-C venekin)

  2. Em kontrol dikin ku têketinek nû EFI BOOT ji bilî cîhaza derveyî xuya bûye
  3. Em hildibijêrin ku ji ajokerek USB-ya derveyî boot bikin, wekî di dema sazkirina yekem de (ji bîr nekin module_blacklist=thunderbolt diyar bikin)
  4. Em dîska xwe siwar dikin û bi arch-chroot ve diçin hawîrdorê


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

Ger hewce be ku klavyeyê heya ku pergal bi tevahî were barkirin bixebite (ev pêdivî ye dema şîfrekirina luks/dm-crypt bikar tîne), wê hingê wê di pelê /etc/mkinicpio.conf de di beşa MODULES de binivîsin:

MODULES=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

Nûvekirina kernel û initramfs.


mkinicpio -p linux-mbp

Sazkirina pergala pergalê

Em pelê /boot/loader/loader.conf diguherînin, her tiştî di hundurê xwe de jê dikin, û ya jêrîn lê zêde dikin:

default arch
timeout 5
editor 1

Herin peldanka /boot/loader/entries, pelê arch.conf biafirînin û binivîsin:

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

Ger we luks û lvm bikar anîn, wê hingê

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

Reboot li Macos.

6. Setup Wi-Fi

Wekî ku di dawiyê de derket, MacOS pelên firmware ji bo adapterê wi-fi di peldankê de hilîne / usr / parvekirin / firmware / wifi , û hûn dikarin wan ji wir di şiklê blokan de bigirin û wan bi modula kernelê brcmfmac bidin. Ji bo ku hûn bizanin ka kîjan pelan adapterê we bikar tîne, di MacOS de termînalek vekin û binivîsin:

ioreg -l | grep C-4364

Em lîsteyek dirêj distînin. Em tenê pelên ji beşê hewce ne Daxwazî:

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

Di doza we de, dibe ku navên pelan cûda bibin. Wan ji peldanka /usr/share/firmware/wifi li ajokera flashê kopî bikin û bi vî rengî navê wan biguherînin:

    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>

Di vê rewşê de, pelê nivîsê ya paşîn navên modela tê de heye; heke modela we ne MacBookPro15,2, hingê hûn hewce ne ku vê pelê li gorî modela macbook-a xwe ji nû ve nav bikin.

Reboot nav Arch.

Pelên ji ajokera flashê li peldanka /lib/firmware/brcm/ kopî bikin


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/

Kontrolkirina fonksiyona modulê:


rmmod brcmfmac
modprobe brcmfmac

Em piştrast dikin ku pêwendiya torê bi ifconfig/ip xuya dike.
Sazkirina wifi bi rêya IwCtL

Baldarî. Bi rêya netctl, nmcli, hwd. Têkilî ne kar dike, tenê bi rêya iwd.

Em neçar dikin ku NetworkManager iwd bikar bîne. Ji bo vê yekê, pelê /etc/NetworkManager/NetworkManager.conf biafirînin û binivîsin:

[device]
wifi.backend=iwd

Karûbarê NetworkManager dest pê bikin


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

7. Deng

Ji bo ku deng bixebite, hûn hewce ne ku pulseaudio saz bikin:


sudo pacman -S pulseaudio

Sê pelan dakêşin:

Ka em wan biguhezînin:

    /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. Rawestandin / Ji nû ve

Di vê kêliyê de 16.10.2019 divê hûn dengek hilbijêrin an rawestînin / ji nû ve bidin. Em li benda nivîskarê modula bce ne ku fonksiyonê temam bike.

Ji bo avakirina modulek bi piştgirîya gumanbar / ji nû ve, divê hûn jêrîn bikin:


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

Ger we modula amade ya Apple-BCE ji depoya Anuali1-an saz kir, wê hingê divê hûn wê ji holê rakin û tenê ji bo piştgiriya moda sekinandinê bi modulê BCE saz bikin û saz bikin.

Di heman demê de, hûn hewce ne ku modula applesmc li navnîşa reş lê zêde bikin (heke we berê vê yekê nekiriye) û pê ewle bin ku di /boot/loader/entries/arch.conf de di rêza vebijarkan de li dawiyê parametre tê zêdekirin. pcie_ports=hevhev.

Heya nuha, ajokarê barkêşê dema ku dikeve moda sekinandinê diqelişe, û ajokerê birûskê carinan pergalê ji 30 saniyeyan zêdetir dicemidîne, û dema ku ji nû ve dest pê dike çend hûrdeman dicemidîne. Ev dikare bi rakirina modulên pirsgirêk bixweber ve were rast kirin.

Skrîptekê biafirînin /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

Wê bicîh bikin:

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

Ji bo niha ev hemû. Encam pergalek bi tevahî bikêrhatî ye, ji bilî hin nuwazeyên bi sekinandin / ji nû ve. Di çend rojên xebatê de ti qeza û panîkên kernelê nehatin dîtin. Ez hêvî dikim ku nivîskarê modula bce dê di demek nêzîk de wê biqedîne, û em ê ji bo sekinandin / ji nû ve û dengdanê piştgirîyek bêkêmasî bistînin.

Source: www.habr.com

Add a comment