ProHoster > وبلاگ > اداره > کارکرد MacBook Pro 2018 T2 با ArchLinux (dualboot)
کارکرد MacBook Pro 2018 T2 با ArchLinux (dualboot)
در مورد این واقعیت که تراشه جدید T2 نصب لینوکس را روی مک بوک های جدید 2018 با نوار لمسی غیرممکن می کند، سر و صدای زیادی وجود دارد. زمان گذشت و در پایان سال 2019، توسعه دهندگان شخص ثالث تعدادی درایور و وصله هسته را برای تعامل با تراشه T2 پیاده سازی کردند. محرک اصلی برای مدلهای مکبوک ۲۰۱۸ و جدیدتر، عملکرد VHCI (عملکرد لمسی/صفحهکلید/غیره)، و همچنین عملکرد صدا را پیادهسازی میکند.
BCE (موتور کپی بافر) - کانال ارتباطی اصلی را با T2 ایجاد می کند. VHCI و Audio به این جزء نیاز دارند.
VHCI یک کنترلر میزبان مجازی USB است. صفحه کلید، ماوس و سایر اجزای سیستم توسط این مؤلفه ارائه می شود (درایورهای دیگر از این کنترلر میزبان برای ارائه عملکرد بیشتر استفاده می کنند.
صدا - درایور رابط صوتی T2، در حال حاضر تنها از خروجی صدا از طریق بلندگوهای داخلی مک بوک پشتیبانی می کند.
پروژه دوم نام دارد درایور macbook12-spiو قابلیت کار با درایور ورودی برای صفحه کلید، صفحه لمسی SPI و نوار لمسی را برای MacBook Pro Late 2016 و جدیدتر اجرا می کند. برخی از درایورهای صفحه کلید/ترک پد اکنون در هسته گنجانده شده اند که با نسخه 5.3 شروع می شود.
پشتیبانی از دستگاه هایی مانند وای فای، پد لمسی و غیره نیز با استفاده از وصله های هسته پیاده سازی شد. نسخه هسته فعلی5.3.5-1
آنچه در حال حاضر کار می کند
NVMe
صفحه کلید
USB-C (Thunderbolt آزمایش نشده است؛ وقتی ماژول به طور خودکار بارگیری می شود، سیستم را منجمد می کند)
نوار لمسی (با قابلیت روشن کردن کلیدهای Fn، نور پس زمینه، ESC و ...)
صدا (فقط بلندگوهای داخلی)
ماژول Wi-Fi (از طریق brcmfmac و فقط از طریق iw)
DisplayPort از طریق USB-C
حسگرها
تعلیق/ازسرگیری (تا حدی)
و غیره..
این آموزش برای macbookpro15,1 و macbookpro15,2 کاربرد دارد. مقاله به عنوان پایه از Github به زبان انگلیسی گرفته شده است. از این رو. همه چیز در این مقاله کار نمی کرد، بنابراین باید خودم راه حلی پیدا می کردم.
آنچه برای نصب نیاز دارید
آداپتور اتصال USB-C به USB (حداقل سه ورودی USB برای اتصال ماوس، صفحه کلید، مودم USB یا تلفن در حالت اتصال اینترنت). این فقط در اولین مراحل نصب ضروری است
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
نصب ماژول های هسته برای صفحه کلید. در مخزن 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 ثبت کنید
سیستم دچار وحشت کرنل شد و پس از راه اندازی مجدد یک آیتم جدید از طریق گزینه ها ظاهر نشد. من هیچ راه حل روشنی برای این مشکل پیدا نکردم و بنابراین تصمیم گرفتم که بوت را با استفاده از systemd-boot پیاده سازی کنم.
راه اندازی
bootctl --path=/boot install
و ما به وحشت کرنل می رویم. مک بوک را خاموش کنید، دوباره روشن کنید، روی گزینه ها کلیک کنید (هاب 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 بنویسید:
همانطور که در پایان مشخص شد، MacOS فایل های سیستم عامل آداپتور وای فای را در پوشه ذخیره می کند /usr/share/firmware/wifi و می توانید آنها را از آنجا به شکل حباب بردارید و به ماژول هسته brcmfmac بدهید. برای اینکه بفهمید آداپتور شما از چه فایل هایی استفاده می کند، یک ترمینال در MacOS باز کنید و بنویسید:
ioreg -l | grep C-4364
ما یک لیست طولانی دریافت می کنیم. ما فقط به فایل های بخش نیاز داریم RequestedFiles:
در حال حاضر 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 و صدا برخوردار شویم.