Táto správa bola zverejnená nedávno bola navrhnutá predbežná implementácia ovládača drm-asahi pre sériové GPU Apple AGX G13 a G14 používané v čipoch Apple M1 a M2 na konferencii vývojárov jadra Linuxu.
Ovládač je napísaný v jazyku Rust plus, obsahuje súbor univerzálnych odkazov o subsystéme DRM (Direct Rendering Manager), ktorý možno použiť na vývoj iných grafických ovládačov v Rust.
Vydaná sada opráv do teraz bol navrhnutý len na diskusiu od hlavných vývojárov (RFC), ale môžu byť prijaté do základného tímu po dokončení kontroly a odstránení zistených nedostatkov.
Toto je moja prvá verzia abstrakcií Rust pre DRM subsystému. Zahŕňa samotné abstrakcie, niektoré menšie nevyhnutné zmeny na strane C, ako aj ovládač GPU drm-asahi (pre referenciu o tom, ako sa používajú abstrakcie, ale nie nevyhnutne určené na spoločné pristátie).
Tieto záplaty sú aplikované v hornej časti stromu v [1], ktorý je založený na 6.3-rc1 s pridaným množstvom abstrakcií/podpora Rustu vyššie. Väčšina z nich nie je nevyhnutným predpokladom pre abstrakcie DRM. sami, ale len od vodiča.
Od decembra je ovládač zaradený do balík s jadrom pre distribúciu Asahi Linux a bol testovaný používateľmi tohto projektu.
Ovládač je možné použiť na distribúciách Linuxu na organizovať grafické prostredie v dZariadenia Apple so SoC M1, M1 Pro, M1 Max, M1 Ultra a M2. Pri vývoji ovládača bola snaha nielen o zvýšenie bezpečnosti minimalizáciou chýb pri práci s pamäťou v kóde vykonávanom na strane CPU, ale aj o čiastočnú ochranu pred problémami, ktoré vznikajú pri interakcii s firmvérom.
Najmä ovládač poskytuje určité väzby pre štruktúry zdieľanej pamäte nebezpečné so zložitými reťazcami ukazovateľov používaných vo firmvéri na interakciu s ovládačom. Navrhovaný ovládač sa používa v spojení s ovládačom asahi Mesa, ktorý poskytuje podporu OpenGL v používateľskom priestore a prechádza testovaním kompatibility s OpenGL ES 2. a je takmer pripravený na podporu OpenGL ES 3.0.
Zároveň ovládač, ktorý funguje na úrovni jadra je pôvodne vyvinutý s ohľadom na budúcu podporu pre Vulkan APIa programovacie rozhranie pre interakciu s užívateľským priestorom je navrhnuté s ohľadom na UAPI poskytované novým ovládačom Intel Xe.
Cez známe problémy uvádzajú sa tieto:
- Existujúca integrácia Rust v súčasnosti nepodporuje budovanie abstrakcií ako modulov, takže abstrakcie Rust sú dostupné len pre vstavané komponenty DRM.
- DRM sa do značnej miery spolieha na vzor „podtriedy“ pre objekty ovládača, a to Rustovi nesedí.
- V súčasnosti je implementované len to, čo je potrebné pre ovládač (plus malé množstvo
zjavné doplnky, kde má zmysel lepšia integrita API). - drm::mm nakoniec vyžaduje mutex zabudovaný do abstrakcie
delegovať to na používateľa s obvyklými pravidlami premenlivosti Rustu.
Je to preto, že uzly môžu byť kedykoľvek zrušené a tieto operácie
musí to byť synchronizované. - Na strane Mesa máte momentálne ovládač Gallium, ktorý je väčšinou už upstream (bity UAPI väčšinou chýbajú) a
prejde testami dEQP GLES2/EGL, pričom väčšina GLES3.0 prejde
Horné vetvy rozpracovanej výroby. Toto je reverzné inžinierstvo komunitného ovládača, takže je spomenuté, že v tomto aspekte je potrebné ešte veľa urobiť.
konečne ak si záujem dozvedieť sa o tom viac, môžete skontrolovať podrobnosti v nasledujúci odkaz.