A gennaio, qui su LFFL, vi ho parlato del progetto Asahi Linux, portato avanti dallo sviluppatore giapponese Hector Martin, noto anche come “marcan”. Martin ambisce a creare un port Linux per Apple Silicon. Ha promesso di aggiornare periodicamente la community circa le novità e i passi avanti fatti… dopo cinque mesi dal primo progress report in questi giorni ha pubblicato sul blog ufficiale il secondo aggiornamento sullo stato dei lavori.
Posso dirvi subito che il sistema ora funziona, è possibile utilizzare Asahi Linux come macchina di sviluppo, seppur con diverse limitazioni importanti come l’assenza di accelerazione grafica. Martin fa capire ancora una volta le difficoltà nel creare un porting di una piattaforma creata da Apple al solo scopo di eseguire un sistema proprietario. Eseguire il reverse engineering del SoC ARM M1, usato nel Mac Mini e nel nuovo iPad Pro, è una sfida molto ardua.
Un hypervisor per Asahi Linux
Non potendo effettuare il reverse engineering dei driver (per motivi legali e di copyright) Martin e il suo team hanno creato un hypervisor, parzialmente scritto in Python, da frapporre tra macOS e il processore M1 per intercettare (e capire) lo scambio che avviene tra hardware e software. L’hypervisor si appoggia al bootloader m1n1 del quale vi ho già dato diversi dettagli nell’articolo di marzo. Per chi fosse interessato ulteriori dettagli implementativi sono stati spiegati da Martin in un video pubblicato su Youtube.
Hello, world from macOS running on the m1n1 hypervisor!
With one blazing fast efficiency core, and all graphics MMIO logged via USB! pic.twitter.com/28mBnzZIOC
— Asahi Linux (@AsahiLinux) May 27, 2021
Oltre all’hypervisor, gli sviluppatori hanno creato un framework di tracciamento I/O, che consente di capire come funziona ogni singolo componente hardware. Ad esempio, sono in grado di capire come e quando macOS decide di testare o cambiare la configurazione di ciascun pin GPIO.
DCP
Il framework di cui sopra si è rivelato fondamentale per effettuare il reverse engineering del DCP. Una delle sfide più complesse è far funzionare la GPU dell’M1. La GPU si compone di due parti:
- la GPU vera e propria che esegue il rendering dei frame in memoria
- il display controller, che manda i frame dalla memoria al display
Proprio sul display controller hanno incontrato delle difficoltà in quanto Apple ha complicato le cose aggiungendo un coprocessore al display engine (o DCP) che usa un firmware proprietario. Il DCP comunica poi con il processore ed è stato quindi necessario approfondire la natura di questo componente al fine di creare un apposito driver. Attualmente è ancora tutto Work in progress.
Installer
Martin e Co. si sono impegnati a sviluppare un installer che guidi l’utente al completamento dell’installazione di m1n1. Il lancio dell’installer avviene mediante uno script shell. Ad oggi si tratta di una versione pensata per gli sviluppatori, in futuro sarà resa maggiormente user friendly, in modo da consentire anche il partizionamento del disco.
Altri driver
Sven, collega di Martin, si è dedicato al driver per DART, ovvero l’IOMMU (I/O Memory Management Unit) di M1. Questo driver è necessario per far funzionare PCIe, USB e DCP. Altri stanno lavorando ai driver per GPIO, I²C, SPI e NVMe.
Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.