Tato zpráva byla zveřejněna nedávno byla navržena předběžná implementace ovladače drm-asahi pro sériové GPU Apple AGX G13 a G14 používané v čipech Apple M1 a M2 na e-mailové konferenci pro vývojáře jádra Linuxu.
Ovladač je napsán v Rustu Plus, obsahuje 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 Rust.
Vydaná sada oprav do teď byl navržen pouze k diskusi hlavními vývojáři (RFC), ale může být přijat do základního týmu po dokončení revize a odstranění zjištěných nedostatků.
Toto je moje první verze Rustových abstrakcí pro DRM subsystému. Zahrnuje abstrakce samotné, některé menší nezbytné změny na straně C a také ovladač GPU drm-asahi (pro odkaz na to, jak se abstrakce používají, ale ne nutně určené k přistání společně).
Tyto záplaty jsou aplikovány v horní části stromu v [1], který je založen na 6.3-rc1 se spoustou abstrakce/podpora rzi přidaných commitů výše. Většina z nich nejsou předpoklady pro abstrakce DRM. sami, ale pouze od řidiče.
Od prosince je ovladač součástí balíček s jádrem pro distribuci Asahi Linux a byl testován uživateli tohoto projektu.
Ovladač lze použít na distribucích Linuxu organizovat grafické prostředí v dZařízení Apple se SoC M1, M1 Pro, M1 Max, M1 Ultra a M2. Při vývoji ovladače byl učiněn pokus nejen o zvýšení bezpečnosti minimalizací chyb při práci s pamětí v kódu prováděném na straně CPU, ale také o částečnou ochranu před problémy, které vznikají při interakci s firmwarem.
Zejména ovladač poskytuje určité vazby pro struktury sdílené paměti nebezpečné se složitými řetězci ukazatelů používaných ve firmwaru k 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 a prochází testováním kompatibility OpenGL ES 2. a je téměř připraven na podporu OpenGL ES 3.0.
Zároveň ovladač, který funguje na úrovni jádra je zpočátku vyvíjen s ohledem na budoucí podporu pro Vulkan APIa programovací rozhraní pro interakci s uživatelským prostorem je navrženo s ohledem na rozhraní UAPI poskytované novým ovladačem Intel Xe.
Přes známé potíže jsou zmíněny následující:
- 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.
konečně jestli jsi zájem dozvědět se o tom více, můžete zkontrolovat podrobnosti v následující odkaz.