มีการพูดคุยกันค่อนข้างมากเกี่ยวกับความจริงที่ว่าชิป T2 ใหม่จะทำให้ไม่สามารถติดตั้ง Linux บน MacBooks ใหม่ปี 2018 ด้วยแถบสัมผัสได้ เวลาผ่านไป และเมื่อสิ้นปี 2019 นักพัฒนาบุคคลที่สามได้ใช้ไดรเวอร์และแพตช์เคอร์เนลจำนวนหนึ่งเพื่อโต้ตอบกับชิป T2 ไดรเวอร์หลักสำหรับ MacBook รุ่นปี 2018 และใหม่กว่านั้นใช้การทำงาน VHCI (การทำงานแบบสัมผัส/คีย์บอร์ด/อื่นๆ) รวมถึงการทำงานด้านเสียง
โครงการ
- BCE (Buffer Copy Engine) - สร้างช่องทางการสื่อสารหลักกับ T2 VHCI และเสียงต้องใช้ส่วนประกอบนี้
- VHCI เป็นตัวควบคุมโฮสต์เสมือน USB; ส่วนประกอบนี้แป้นพิมพ์ เมาส์ และส่วนประกอบอื่นๆ ของระบบมีให้ (ไดรเวอร์อื่นๆ ใช้โฮสต์คอนโทรลเลอร์นี้เพื่อให้มีฟังก์ชันการทำงานมากขึ้น
- เสียง - ไดรเวอร์สำหรับอินเทอร์เฟซเสียง T2 ปัจจุบันรองรับเอาต์พุตเสียงผ่านลำโพงในตัวของ MacBook เท่านั้น
โครงการที่สองมีชื่อว่า
การรองรับอุปกรณ์เช่น Wi-Fi, ทัชแพด ฯลฯ ก็ถูกนำมาใช้โดยใช้เคอร์เนลแพตช์ เวอร์ชันเคอร์เนลปัจจุบัน
สิ่งที่ทำงานอยู่ในขณะนี้
- NVMe
- แป้นพิมพ์
- USB-C (ยังไม่ได้ทดสอบ Thunderbolt เมื่อโหลดโมดูลอัตโนมัติ ระบบจะหยุดทำงาน)
- Touchbar (พร้อมความสามารถในการเปิดปุ่ม Fn, แบ็คไลท์, ESC ฯลฯ )
- เสียง (ลำโพงในตัวเท่านั้น)
- โมดูล Wi-Fi (ผ่าน brcmfmac และผ่าน iw เท่านั้น)
- DisplayPort ผ่าน USB-C
- เซนเซอร์
- ระงับ/ดำเนินการต่อ (บางส่วน)
- ฯลฯ ..
บทช่วยสอนนี้ใช้ได้กับ macbookpro15,1 และ macbookpro15,2 บทความจาก Github ในภาษาอังกฤษถูกนำมาใช้เป็นพื้นฐาน
สิ่งที่คุณต้องการสำหรับการติดตั้ง
- อะแดปเตอร์เชื่อมต่อ USB-C เข้ากับ USB (อินพุต USB อย่างน้อย XNUMX ช่องสำหรับเชื่อมต่อเมาส์ คีย์บอร์ด โมเด็ม USB หรือโทรศัพท์ในโหมดปล่อยสัญญาณ) สิ่งนี้จำเป็นเฉพาะระหว่างขั้นตอนแรกของการติดตั้งเท่านั้น
- แป้นพิมพ์ยูเอสบี
- แฟลชไดรฟ์ USB/USB-C ขั้นต่ำ 4GB
1. ปิดการใช้งานการห้ามการบูทจากสื่อภายนอก
2. จัดสรรพื้นที่ว่างโดยใช้ Disk Utility
เพื่อความสะดวกฉันจัดสรรดิสก์ 30GB ทันทีโดยฟอร์แมตเป็น exfat ใน Disk Utility
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) จัดรูปแบบและติดตั้งไฟล์เก็บถาวร คุณสามารถใช้ได้
เราไม่ได้สร้างพาร์ติชันสำหรับบูต เราจะเขียน 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
การติดตั้งโมดูลเคอร์เนลสำหรับคีย์บอร์ด ในที่เก็บข้อมูล
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
- ปล่อย
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
เราแก้ไขไฟล์ /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 ผ่าน
ความสนใจ. ผ่าน 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