Jedná se o poměrně komplexní ovladač pro GPU řady Apple AGX G13 a G14.
Dnešní řadič je kompatibilní se SoC
Nedávno bylo oznámeno, že na mailing listu vývojářů linuxového jádra byla navržena předběžná implementace ovladače drm-asahi pro grafické karty Apple AGX řady G13 a G14 používané v čipech Apple M1 a M2 .
Ovladač je napsán v Rustu a obsahuje také sadu univerzálních odkazů o subsystému DRM (Direct Rendering Manager), které lze použít k vývoji dalších grafických ovladačů v Rustu.
Dosud vydaná sada patchů byla navržena pouze k diskusi vývojáři jádra (RFC), ale po dokončení kontroly a odstranění zjištěných nedostatků může být přijata do jádra týmu.
Toto je moje první verze abstrakcí Rustu pro subsystém DRM. Zahrnuje samotné abstrakce, některé drobné změny na straně C a také ovladač drm-asahi pro GPU (pro referenci, jak se abstrakce používají, ale nemusí být nutně určeny k společnému použití).
Tyto záplaty jsou aplikovány na vrcholu stromu v [1], který je založen na 6.3-rc1 s velkým počtem kompromisů v oblasti abstrakce/podpory Rustu přidaných výše. Většina z nich není předpokladem pro samotné abstrakce DRM, ale pouze pro ovladač.
Od prosince je ovladač součástí balíčku s jádrem pro distribuci Asahi Linux a je testován uživateli tohoto projektu.
Ovladač lze použít v linuxových distribucích ke správě grafického prostředí na zařízeních Apple s procesory SoC M1, M1 Pro, M1 Max, M1 Ultra a M2. Během vývoje ovladače bylo vynaloženo úsilí nejen na zvýšení zabezpečení minimalizací chyb při práci s pamětí v kódu na straně CPU, ale také na poskytnutí částečné ochrany před problémy vznikajícími při interakcích firmwaru.
Ovladač konkrétně poskytuje určité vazby pro nebezpečné struktury sdílené paměti se složitými řetězci ukazatelů používanými ve firmwaru pro interakci s ovladačem. Navrhovaný ovladač se používá ve spojení s ovladačem Asahi Mesa, který poskytuje podporu OpenGL v uživatelském prostoru, prošel testováním kompatibility s OpenGL ES 2 a je téměř připraven podporovat OpenGL ES 3.0.
Zároveň je ovladač na úrovni jádra zpočátku vyvíjen s ohledem na budoucí podporu rozhraní Vulkan API a programovací rozhraní pro interakci s uživatelským prostorem je navrženo s ohledem na rozhraní UAPI poskytované novým ovladačem Intel Xe.
Mezi známé problémy patří :
- Stávající integrace Rust v současné době nepodporuje vytváření abstrakce jako modulů, takže abstrakce Rust jsou dostupné pouze pro vestavěné komponenty DRM.
- DRM se do značné míry spoléhá na vzor "podtřídění" objektů řadiče, a to se Rustovi nehodí.
- V současné době je implementováno pouze to, co je nezbytné pro ovladač (plus malé množství
zjevné doplňky, kde má lepší integrita API smysl). - drm::mm místo toho vyžaduje mutex zabudovaný do abstrakce
delegovat to na uživatele s obvyklými pravidly mutability Rust.
Je to proto, že uzly mohou být kdykoli zrušeny a tyto operace
musí to být synchronizované. - Na straně Mesa máte aktuálně ovladač Gallium, který je většinou již upstream (bity UAPI většinou chybí) a
projde testy dEQP GLES2/EGL, přičemž většina GLES3.0 projde
Předcházející větve nedokončené výroby. Toto je reverzní inženýrství komunitních ovladačů, takže je zmíněno, že v tomto aspektu je třeba ještě hodně udělat.
A konečně, pokud se chcete o tomto tématu dozvědět více , podrobnosti naleznete na následujícím odkazu.