ทำให้ MacBook Pro 2018 T2 ทำงานร่วมกับ ArchLinux (ดูอัลบูต)

มีการพูดคุยกันค่อนข้างมากเกี่ยวกับความจริงที่ว่าชิป T2 ใหม่จะทำให้ไม่สามารถติดตั้ง Linux บน MacBooks ใหม่ปี 2018 ด้วยแถบสัมผัสได้ เวลาผ่านไป และเมื่อสิ้นปี 2019 นักพัฒนาบุคคลที่สามได้ใช้ไดรเวอร์และแพตช์เคอร์เนลจำนวนหนึ่งเพื่อโต้ตอบกับชิป T2 ไดรเวอร์หลักสำหรับ MacBook รุ่นปี 2018 และใหม่กว่านั้นใช้การทำงาน VHCI (การทำงานแบบสัมผัส/คีย์บอร์ด/อื่นๆ) รวมถึงการทำงานด้านเสียง

โครงการ MBP2018-สะพาน-DRV แบ่งออกเป็น 3 องค์ประกอบหลัก:

  • BCE (Buffer Copy Engine) - สร้างช่องทางการสื่อสารหลักกับ T2 VHCI และเสียงต้องใช้ส่วนประกอบนี้
  • VHCI เป็นตัวควบคุมโฮสต์เสมือน USB; ส่วนประกอบนี้แป้นพิมพ์ เมาส์ และส่วนประกอบอื่นๆ ของระบบมีให้ (ไดรเวอร์อื่นๆ ใช้โฮสต์คอนโทรลเลอร์นี้เพื่อให้มีฟังก์ชันการทำงานมากขึ้น
  • เสียง - ไดรเวอร์สำหรับอินเทอร์เฟซเสียง T2 ปัจจุบันรองรับเอาต์พุตเสียงผ่านลำโพงในตัวของ MacBook เท่านั้น


โครงการที่สองมีชื่อว่า macbook12-spi-ไดรเวอร์และใช้ความสามารถในการใช้งานไดรเวอร์อินพุตสำหรับคีย์บอร์ด แทร็คแพด SPI และแถบสัมผัสสำหรับ MacBook Pro ปลายปี 2016 และใหม่กว่า ขณะนี้ไดรเวอร์แป้นพิมพ์/แทร็กแพดบางตัวรวมอยู่ในเคอร์เนลแล้ว โดยเริ่มตั้งแต่เวอร์ชัน 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. DisplayPort ผ่าน USB-C
  8. เซนเซอร์
  9. ระงับ/ดำเนินการต่อ (บางส่วน)
  10. ฯลฯ ..

บทช่วยสอนนี้ใช้ได้กับ macbookpro15,1 และ macbookpro15,2 บทความจาก Github ในภาษาอังกฤษถูกนำมาใช้เป็นพื้นฐาน ด้วยเหตุนี้. ไม่ใช่ทุกอย่างในบทความนี้ได้ผล ดังนั้นฉันจึงต้องหาวิธีแก้ปัญหาด้วยตัวเอง

สิ่งที่คุณต้องการสำหรับการติดตั้ง

  • อะแดปเตอร์เชื่อมต่อ USB-C เข้ากับ USB (อินพุต USB อย่างน้อย XNUMX ช่องสำหรับเชื่อมต่อเมาส์ คีย์บอร์ด โมเด็ม 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. จัดสรรพื้นที่ว่างโดยใช้ Disk Utility

เพื่อความสะดวกฉันจัดสรรดิสก์ 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) จัดรูปแบบและติดตั้งไฟล์เก็บถาวร คุณสามารถใช้ได้ คำแนะนำอย่างเป็นทางการ หรือ ด้านข้าง.

เราไม่ได้สร้างพาร์ติชันสำหรับบูต เราจะเขียน bootloader ลงไป /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

เราลงทะเบียน Thunderbolt และ applesmc ใน /etc/modprobe.d/blacklist.conf

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

การติดตั้งโมดูลเคอร์เนลสำหรับคีย์บอร์ด ในที่เก็บข้อมูล anuali1 มีแพ็คเกจสำเร็จรูปเรียกว่า แอปเปิ้ล-bce-dkms-git. หากต้องการติดตั้ง ให้เขียนลงในคอนโซล:

pacman -S apple-bce-dkms-git

ในกรณีนี้ โมดูลเคอร์เนลจะถูกเรียก แอปเปิ้ล-คริสตศักราช. กรณีประกอบเองเรียกว่า คริสตศักราช. ดังนั้น หากคุณต้องการลงทะเบียนโมดูลในส่วน MODULES ของไฟล์ mkinicpio.conf อย่าลืมว่าคุณติดตั้งโมดูลใดไว้

การประกอบด้วยมือ:


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 แล้ว คุณก็สามารถเริ่มติดตั้ง bootloader ได้

ฉันไม่สามารถรับด้วงไปทำงานได้ Grub บูทจากไดรฟ์ USB ภายนอก แต่เมื่อคุณพยายามลงทะเบียนใน nvme ผ่าน

ติดตั้งด้วง --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

เราแก้ไขไฟล์ /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. การตั้งค่า Wi-Fi

เมื่อปรากฏออกมาในตอนท้าย MacOS จะเก็บไฟล์เฟิร์มแวร์สำหรับอแด็ปเตอร์ wi-fi ไว้ในโฟลเดอร์ /usr/share/firmware/wifi และคุณสามารถนำพวกมันจากที่นั่นในรูปแบบของ blobs และป้อนพวกมันไปยังโมดูลเคอร์เนล 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 ผ่าน iwctl

ความสนใจ. ผ่าน netctl, nmcli ฯลฯ อินเทอร์เฟซใช้งานไม่ได้ผ่าน iwd เท่านั้น

เราบังคับให้ NetworkManager ใช้ iwd หากต้องการทำสิ่งนี้ ให้สร้างไฟล์ /etc/NetworkManager/NetworkManager.conf แล้วเขียน:

[device]
wifi.backend=iwd

เริ่มบริการ NetworkManager


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 ทำงานให้เสร็จสมบูรณ์

หากต้องการสร้างโมดูลด้วยการสนับสนุน suped/resume คุณต้องดำเนินการดังต่อไปนี้:


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

หากคุณติดตั้งโมดูล apple-bce สำเร็จรูปจากที่เก็บ anuali1 คุณต้องลบออกก่อน จากนั้นจึงประกอบและติดตั้งโมดูล bce ด้วยการสนับสนุนโหมด Suspend เท่านั้น

นอกจากนี้ คุณต้องเพิ่มโมดูล applesmc ลงในบัญชีดำ (หากคุณไม่เคยทำมาก่อน) และตรวจสอบให้แน่ใจว่าใน /boot/loader/entries/arch.conf ในบรรทัดตัวเลือกที่ส่วนท้ายจะมีการเพิ่มพารามิเตอร์ pcie_ports=เข้ากันได้.

ในปัจจุบัน ไดรเวอร์ touchbar หยุดทำงานเมื่อเข้าสู่โหมด Suspend และบางครั้งไดรเวอร์ 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 จะเสร็จสิ้น และเราจะได้รับการสนับสนุนอย่างเต็มที่สำหรับการหยุดชั่วคราว/ดำเนินการต่อ และเสียง

ที่มา: will.com

เพิ่มความคิดเห็น