جعل جهاز MacBook Pro 2018 T2 يعمل مع ArchLinux (التشغيل المزدوج)

كان هناك قدر كبير من الضجيج حول حقيقة أن شريحة T2 الجديدة ستجعل من المستحيل تثبيت Linux على أجهزة MacBooks الجديدة لعام 2018 المزودة بشريط اللمس. مر الوقت، وفي نهاية عام 2019، قام مطورو الطرف الثالث بتنفيذ عدد من برامج التشغيل وتصحيحات kernel للتفاعل مع شريحة T2. يقوم برنامج التشغيل الرئيسي لطرازات MacBook 2018 والأحدث بتنفيذ عملية VHCI (تشغيل اللمس/لوحة المفاتيح/إلخ)، بالإضافة إلى تشغيل الصوت.

مشروع mbp2018-جسر-drv مقسمة إلى 3 مكونات رئيسية:

  • BCE (محرك النسخ الاحتياطي) - ينشئ قناة الاتصال الرئيسية مع T2. يتطلب VHCI والصوت هذا المكون.
  • VHCI هي وحدة تحكم المضيف الظاهري USB؛ يتم توفير لوحة المفاتيح والماوس ومكونات النظام الأخرى بواسطة هذا المكون (تستخدم برامج التشغيل الأخرى وحدة التحكم المضيفة هذه لتوفير المزيد من الوظائف.
  • الصوت - برنامج تشغيل واجهة الصوت T2، يدعم حاليًا إخراج الصوت فقط من خلال مكبرات الصوت المدمجة في جهاز MacBook


المشروع الثاني اسمه ماك بوك 12-SPI سائق، وينفذ القدرة على تشغيل برنامج تشغيل الإدخال للوحة المفاتيح ولوحة التتبع SPI وشريط اللمس لجهاز MacBook Pro أواخر عام 2016 والإصدارات الأحدث. تم الآن تضمين بعض برامج تشغيل لوحة المفاتيح/لوحة التتبع في kernel، بدءًا من الإصدار 5.3.

تم أيضًا تنفيذ دعم الأجهزة مثل wi-fi ولوحة اللمس وما إلى ذلك باستخدام تصحيحات kernel. نسخة النواة الحالية 5.3.5-1

ما العمل في الوقت الراهن

  1. NVMe
  2. لوحة المفاتيح
  3. USB-C (لم يتم اختبار Thunderbolt؛ عندما يتم تحميل الوحدة تلقائيًا، فإنها تجمد النظام)
  4. شريط اللمس (مع القدرة على تشغيل مفاتيح Fn، والإضاءة الخلفية، وESC، وما إلى ذلك)
  5. الصوت (السماعات المدمجة فقط)
  6. وحدة Wi-Fi (عبر brcmfmac وعبر iw فقط)
  7. DisplayPort عبر USB-C
  8. مجسات
  9. تعليق/استئناف (جزئيًا)
  10. إلخ..

ينطبق هذا البرنامج التعليمي على أجهزة macbookpro15,1 وmacbookpro15,2. تم أخذ المقال كأساس من Github باللغة الإنجليزية. من هنا. لم ينجح كل ما ورد في هذه المقالة، لذلك كان علي أن أجد حلاً بنفسي.

ما تحتاجه للتثبيت

  • محول إرساء USB-C إلى USB (ثلاثة مداخل USB على الأقل لتوصيل الماوس أو لوحة المفاتيح أو مودم USB أو الهاتف في وضع التوصيل). هذا ضروري فقط خلال المراحل الأولى من التثبيت
  • لوحة مفاتيح USB
  • محرك أقراص فلاش USB/USB-C بسعة 4 جيجابايت على الأقل

1. قم بتعطيل الحظر المفروض على الإقلاع من الوسائط الخارجية

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

2. قم بتخصيص مساحة خالية باستخدام Disk Utility

للراحة، قمت على الفور بتخصيص 30 جيجابايت للقرص، وتنسيقه في Exfat في Disk Utility نفسها. تقسيم أداة القرص الفعلية.

3. قم بإنشاء صورة ISO

الخيارات هي:

  1. يمكنك اتباع المسار البسيط وتنزيل صورة جاهزة باستخدام kernel 5.3.5-1 والتصحيحات من aunali1 رابط إلى الصورة النهائية
  2. قم بإنشاء صورة بنفسك عبر الأرشيف (يتطلب نظامًا مزودًا بتوزيع Archa)

    ضبط com.archiso

    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

    ...
    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. إذا لم يتم ذلك، فقد لا يتم تشغيل النظام وسيظهر خطأ Thunderbolt ICM.

باستخدام fdisk/cfdisk، نجد القسم الخاص بنا (بالنسبة لي هو nvme0n1p4)، ونقوم بتهيئته وتثبيت الأرشيف. يمكنك استخدام تعليمات رسمية أو جانبية.

نحن لا نقوم بإنشاء قسم تمهيد، بل سنكتب أداة تحميل التشغيل فيه /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

تثبيت وحدات kernel للوحة المفاتيح. في المستودع anuali1 هناك حزمة جاهزة، تسمى apple-bce-dkms-git. لتثبيته، اكتب في وحدة التحكم:

pacman -S apple-bce-dkms-git

في هذه الحالة، سيتم استدعاء وحدة kernel apple-bce. وفي حالة التجميع الذاتي يطلق عليه قبل الميلاد. وفقًا لذلك، إذا كنت تريد تسجيل وحدة نمطية في قسم الوحدات النمطية في ملف 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، يمكنك البدء في تثبيت أداة تحميل التشغيل.

لم أتمكن من الحصول على اليرقة للعمل. يقوم Grub بالتمهيد من محرك أقراص USB خارجي، ولكن عند محاولة تسجيله في nvme عبر

تثبيت grub --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=(ext4 applespi intel_lpss_pci spi_pxa2xx_platform bce)

تحديث النواة و initramfs.


mkinicpio -p linux-mbp

إعداد نظام التمهيد

نقوم بتحرير الملف /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. إعداد الواي فاي

كما اتضح في النهاية، يقوم MacOS بتخزين ملفات البرامج الثابتة لمحول Wi-Fi في المجلد /usr/share/firmware/wifi ، ويمكنك أخذها من هناك على شكل نقط وإدخالها إلى وحدة brcmfmac kernel. لمعرفة الملفات التي يستخدمها المحول الخاص بك، افتح محطة طرفية في 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 الخاص بك.

إعادة التشغيل في القوس.

انسخ الملفات من محرك الأقراص المحمول إلى المجلد /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.
إعداد واي فاي عبر com.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 لإكمال الوظيفة.

لإنشاء وحدة نمطية ذات دعم معلق/استئناف، يجب عليك القيام بما يلي:


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 وتثبيتها مع دعم وضع التوقف المرحلي.

تحتاج أيضًا إلى إضافة وحدة applesmc إلى القائمة السوداء (إذا لم تكن قد قمت بذلك من قبل) والتأكد من إضافة المعلمة في /boot/loader/entries/arch.conf في سطر الخيارات في النهاية pcie_ports=compat.

حاليًا، يتعطل برنامج تشغيل شريط اللمس عند الدخول في وضع التوقف المرحلي، ويقوم برنامج تشغيل 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

هذا كل شئ حتى الان. والنتيجة هي نظام عملي تمامًا، باستثناء بعض الفروق الدقيقة في التعليق/الاستئناف. لم تتم ملاحظة أي أعطال أو ذعر في kernel خلال عدة أيام من وقت التشغيل. آمل أن ينهي مؤلف وحدة bce هذه الوحدة في المستقبل القريب، وسنحصل على الدعم الكامل للتعليق/الاستئناف والصوت.

المصدر: www.habr.com

إضافة تعليق