Linux draait voor het eerst op Apples M4-chip

Een ontwikkelaar is erin geslaagd Linux op te starten op een Mac mini met M4-chip. Daarvoor waren aanpassingen nodig aan de bootloader, het Linux-kernelgeheugen en de ondersteuning voor meerdere processorkernen.

Presentatie over Linux op Apples M4-chip
Presentatie over Linux op Apples M4-chip · Beeld: Netgebeurd (AI-illustratie)

Een Mac mini met M4-chip kan Linux draaien. Ontwikkelaar Yuka wist het besturingssysteem op te starten tot een shell en later ook alle processorkernen te activeren. De poging laat zien dat Linux-ondersteuning voor de nieuwste generatie Apple Silicon technisch mogelijk is, maar nog specifieke aanpassingen vereist.

De M4-generatie bleek lastiger te ondersteunen dan eerdere Apple-chips. Apple verplicht op deze systemen het gebruik van SPTM, een beveiligingslaag die de kernel van macOS beschermt tegen bepaalde kwetsbaarheden. Daardoor werken eerdere technieken van het Asahi Linux-project niet rechtstreeks. Die technieken waren gebaseerd op metingen van de communicatie tussen macOS-stuurprogramma's en de hardware.

Aanpassingen aan de boot

Om Linux te laden, moest de ontwikkelaar de beveiliging van het opstartproces versoepelen en een aangepaste versie van m1n1 installeren. Dat is de hypervisor en bootomgeving die binnen Asahi Linux wordt gebruikt. De eerste problemen ontstonden bij onderdelen die op de M4-chip zijn uitgeschakeld of vergrendeld. Zo veroorzaakten pogingen om GXF en het register RVBAR te initialiseren een crash. Door die handelingen over te slaan, kon m1n1 verder starten.

Daarna bleek Linux na het inschakelen van de geheugenvertaling naar een verkeerd adres te verwijzen voor de seriële communicatie. De ontwikkelaar voegde daarom een directe koppeling toe tussen de virtuele en fysieke adressen van de hardware. Ook moest een schrijfactie naar een Apple-specifiek processorgeheugen worden verwijderd. Daarna startte Linux door tot een shell.

Een ontbrekende instelling in de device tree verhinderde aanvankelijk dat Linux bruikbare meldingen op de seriële console liet zien. Na toevoeging van stdout-path = "serial0" werden foutmeldingen, registerinformatie en stacktraces zichtbaar tijdens het opstarten.

Probleem met slaapstand

Het activeren van de extra processorkernen bracht een nieuw probleem aan het licht. De instructie WFI, waarmee een processorkern wacht op een onderbreking, kan op eerdere Apple-chips al afwijkend werken. Op de M4 lijkt de instructie onder bepaalde omstandigheden de waarden in alle algemene registers op nul te zetten. Dat gedrag wijkt af van de ARM64-specificatie.

In april 2026 lukte het om Linux met alle kernen te starten door WFI- en WFIT-instructies te vervangen door lege instructies. Een structurele oplossing voor Linux was daarna nog in ontwikkeling. Het uitschakelen van WFI is niet zonder gevolgen, omdat de instructie ook wordt gebruikt om processorkernen zuiniger te laten slapen.

Lees ook