Linux for macOS M1: what the Asahi Linux team did in January-February 2021

Translator's introduction

Some time ago , HabrΓ© already wrote about the Asahi Linux project .





In short, this is an attempt to run linux on a new Mac with M1 architecture.





2 months have passed since the start of the project, and the developers have prepared a report on the work done , which, in addition to the list of done and not done, allows you to get a little imbued with the essence of the work of the mixture of a system engineer and a reverse engine.





They wrote a rather big report, so its translation will appear in parts.





Progress report

I am glad to present you the first progress report on Asahi Linux! In these reports, in the image and likeness of the Dolphin playbook , we will talk monthly about what is happening with us.





Adding Linux support to a new SoC is not an easy task. I hope these reports give you a sense of how much it takes to get Linux running on a brand new device.





Initially, I planned to make two different reports for January and February, but the development is proceeding at such an accelerated pace that I decided to make one report for both months.





Small box on terminology

In this report, you will come across the terms AArch64, ARM64, and ARMv8-A.





AArch64 is a 64-bit ARM instruction set;





ARM64 β€“ Linux 64- ARM.





ARMv8-A  ARM, AArch64.





, , , β€œ64- ARM”.





Asahi Linux , : Apple Apple Silicon .





, , -, :  kmutil configure-boot , -Apple .





, ,   – !





Apple Silicon Mac- , . , embedded (, Android , , iOS ), . , Apple , Intel Mac, .





, , Apple Silicon Mac- ? GUI , Boot Picker , ?





, , SSD, .





, , , . β€œ ?” Apple, .





Apple Silicon Mac .   iOS , , .





64- ARM : UEFI + ACPI( Windows Linux) ARM64 Linux boot protocol + DeviceTree  ( , U-Boot ). Asahi Linux, , , Apple Silicon Mac.





UEFI&ACPI , ARM . UEFI Forum. x86 , , ARM SoC, . , SoC , , . ACPI – , ACPI embedded , Windows. .





embedded ARM Linux DeviceTree, . , Android. DeviceTree , ACPI, , , ACPI .





DeviceTree , Linux, , , Linux. , Asahi Linux DeviceTree.





, Apple DeviceTree Apple Silicon, Apple Device Tree! ? : DeviceTree OpenFirmware, PowerPC, .





, , ADT embedded Linux , , : DeviceTree, , . , , . Linux macOS PowerPC Mac-, , Linux Apple ARM. , , Linux- Apple-, .





, Apple device tree, , , m1n1 – Apple Silicon . – Apple , , Linux.





m1n1 Linux (cat m1n1.macho initrd.bin devicetree.dtb Image.gz > m1n1-kernel.macho



), Mac kmutil



, Linux. Linux m1n1, :  





  • , .. chicken bit,





  • , iBoot ( Apple) : , framebuffer(, )





  • MMU. , , .





  • Apple Asahi Linux :)





  • watchdog timer. -, , .





  • , : Linux, DeviceTree () initramfs radmisk , , .





  • , chicken bits, spin-table ( - ), Linux.





  • ADT (Apple Device Tree) DeviceTree. , iBoot : , framebuffer, Linux random generator, . m1n1 , spin-table cmd .





  • Linux, - , .





, spin-table? Linux on ARM DeviceTree. , , : spin-table PSCI.





Spin-table – CPU (spinning). , Linux (), , . . : , . . , , - .





PSCI () – ARM ( ) . , EL3 (secure firmware or TrustZone), VM , EL2 ( EL1).





, ARM . , protection ring:  https://en.wikipedia.org/wiki/Protection_ring





-, , , . ring 0   , 1-2 , 3 – .





ARM :





, .  





, EL2 EL3 – ARMv8 CPU, , M1 EL3 . EL2 , VM Linux , Linux EL2, .





PSCI , .





, PSCI . , power management,   , . ( !).





, .





, , , devicetree, , UEFI!





ARM64 UEFI+DeviceTree, β€œ ”, GRUB . , m1n1 , ?





, , U-Boot. U-Boot Linux – U-Boot m1n1 – UEFI GRUB Linux.





, , Asahi Linux :





m1n1-> U-boot -> GRUB -> Linux





Apple-specific , :





  • SecureROM M1 SoC iBoot1 NOR flash .





  • iBoot1 SSD, , – Asahi Linux / m1n1 iBoot1





  • iBoot2, , , firmware , apple device tree, Mach-O ( m1n1)





  • m1n1 ADT, Linux (Flattened Device Tree), U-boot





  • U-boot, SSD, UEFI, devicetree m1n1





  • GRUB UEFI , , . , , grub-mkconfig /etc/default/grub.





  • -, Linux , DeviceTree, m1n1.





! -, embedded ( UEFI , ).





DragonBoard410c (Qualcomm ):





PBL->SBL->QSEE->QHEE->LK->U-boot->GRUB->Linux





, iBoot2 ( Apple, ), β€œmacOS” iBoot2 , , mac ( macOS ). , , , , .





Linux m1n1, Mark Kettenis U-Boot OpenBSD.





, m1n1 , Linux. , !





< >








All Articles