کارکرد MacBook Pro 2018 T2 با ArchLinux (dualboot)

در مورد این واقعیت که تراشه جدید T2 نصب لینوکس را روی مک بوک های جدید 2018 با نوار لمسی غیرممکن می کند، سر و صدای زیادی وجود دارد. زمان گذشت و در پایان سال 2019، توسعه دهندگان شخص ثالث تعدادی درایور و وصله هسته را برای تعامل با تراشه T2 پیاده سازی کردند. محرک اصلی برای مدل‌های مک‌بوک ۲۰۱۸ و جدیدتر، عملکرد VHCI (عملکرد لمسی/صفحه‌کلید/غیره)، و همچنین عملکرد صدا را پیاده‌سازی می‌کند.

پروژه mbp2018-bridge-drv به 3 جزء اصلی تقسیم می شود:

  • BCE (موتور کپی بافر) - کانال ارتباطی اصلی را با T2 ایجاد می کند. VHCI و Audio به این جزء نیاز دارند.
  • VHCI یک کنترلر میزبان مجازی USB است. صفحه کلید، ماوس و سایر اجزای سیستم توسط این مؤلفه ارائه می شود (درایورهای دیگر از این کنترلر میزبان برای ارائه عملکرد بیشتر استفاده می کنند.
  • صدا - درایور رابط صوتی T2، در حال حاضر تنها از خروجی صدا از طریق بلندگوهای داخلی مک بوک پشتیبانی می کند.


پروژه دوم نام دارد درایور macbook12-spiو قابلیت کار با درایور ورودی برای صفحه کلید، صفحه لمسی SPI و نوار لمسی را برای MacBook Pro Late 2016 و جدیدتر اجرا می کند. برخی از درایورهای صفحه کلید/ترک پد اکنون در هسته گنجانده شده اند که با نسخه 5.3 شروع می شود.

پشتیبانی از دستگاه هایی مانند وای فای، پد لمسی و غیره نیز با استفاده از وصله های هسته پیاده سازی شد. نسخه هسته فعلی 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. می توانید مسیر ساده را طی کنید و یک تصویر آماده با کرنل 5.3.5-1 و پچ ها از aunali1 پیوند به تصویر تمام شده
  2. خودتان یک تصویر از طریق آرشیو ایجاد کنید (سیستمی با توزیع Archa مورد نیاز است)

    نصب 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
    

    بسته های لازم را اضافه کنید، در انتها هسته لینوکس-mbp و هدرهای لینوکس-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 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

صفحه کلید، نوار لمسی و غیره

Yay را نصب کنید:


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 یک بسته آماده وجود دارد، به آن می گویند apple-bce-dkms-git. برای نصب آن، در کنسول بنویسید:

pacman -S apple-bce-dkms-git

در این صورت ماژول هسته فراخوانی می شود apple-bce. در مورد خود مونتاژی به آن می گویند قبل از میلاد. بر این اساس، اگر می خواهید ماژولی را در قسمت 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 نصب شدند، می توانید شروع به نصب بوت لودر کنید.

من نتوانستم گراب را به سر کار بیاورم. Grub از یک درایو USB خارجی بوت می شود، اما زمانی که می خواهید آن را در nvme ثبت کنید

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

سیستم دچار وحشت کرنل شد و پس از راه اندازی مجدد یک آیتم جدید از طریق گزینه ها ظاهر نشد. من هیچ راه حل روشنی برای این مشکل پیدا نکردم و بنابراین تصمیم گرفتم که بوت را با استفاده از systemd-boot پیاده سازی کنم.

  1. راه اندازی
    bootctl --path=/boot install

    و ما به وحشت کرنل می رویم. مک بوک را خاموش کنید، دوباره روشن کنید، روی گزینه ها کلیک کنید (هاب 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 فایل های سیستم عامل آداپتور وای فای را در پوشه ذخیره می کند /usr/share/firmware/wifi و می توانید آنها را از آنجا به شکل حباب بردارید و به ماژول هسته brcmfmac بدهید. برای اینکه بفهمید آداپتور شما از چه فایل هایی استفاده می کند، یک ترمینال در MacOS باز کنید و بنویسید:

ioreg -l | grep C-4364

ما یک لیست طولانی دریافت می کنیم. ما فقط به فایل های بخش نیاز داریم RequestedFiles:

"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 نیست، باید نام این فایل را مطابق با مدل مک بوک خود تغییر دهید.

راه اندازی مجدد به 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 ظاهر می شود.
راه اندازی وای فای از طریق 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.

در حال حاضر، درایور نوار لمسی هنگام وارد شدن به حالت تعلیق از کار می‌افتد و درایور تاندبولت گاهی اوقات سیستم را برای بیش از 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 آن را به پایان برساند و ما از پشتیبانی کامل برای suspend / resume و صدا برخوردار شویم.

منبع: www.habr.com

اضافه کردن نظر