Наскоро бе публикувана новината, че предложено е предварително внедряване на драйвера drm-asahi за серия GPU Apple AGX G13 и G14, използвани в чиповете Apple M1 и M2 в пощенския списък за разработчици на ядрото на Linux.
Контролерът е написан на Rust плюс, включва набор от универсални връзки за DRM подсистемата (Direct Rendering Manager), който може да се използва за разработване на други графични драйвери в Rust.
Издаденият комплект корекции досега е предложен само за обсъждане от основните разработчици (RFC), но може да бъде приет в основния екип след приключване на прегледа и отстраняване на идентифицираните недостатъци.
Това е първата ми версия на абстракциите на Rust за DRM подсистема. Включва самите абстракции, някои незначителни предпоставки за промени от страна на C, както и драйвъра на графичния процесор drm-asahi (за справка как се използват абстракциите, но не е задължително предназначени да кацнат заедно).
Тези пачове се прилагат в горната част на дървото в [1], което се базира на 6.3-rc1 с много добавени ангажименти за поддръжка на абстракция/Rust по-горе. Повечето от тях не са предпоставки за DRM абстракции. себе си, но само от водача.
От декември контролерът е включен в пакета с ядрото за дистрибуцията на Asahi Linux и е тестван от потребителите на този проект.
Драйверът може да се използва в Linux дистрибуции за организирайте графичната среда в dУстройства на Apple със SoC M1, M1 Pro, M1 Max, M1 Ultra и M2. При разработването на драйвера беше направен опит не само да се повиши сигурността чрез минимизиране на грешките при работа с памет в код, изпълняван от страна на процесора, но и частично да се предпази от проблеми, възникващи при взаимодействие с фърмуера.
По-специално драйверът осигурява определени обвързвания за споделени структури на паметта опасен със сложни низове от указатели, използвани във фърмуера за взаимодействие с контролера. Предложеният драйвер се използва във връзка с драйвера asahi Mesa, който осигурява поддръжка на OpenGL в потребителското пространство и преминава теста за съвместимост с OpenGL ES 2. и е почти готов да поддържа OpenGL ES 3.0.
В същото време драйверът, който работи на ниво ядро първоначално е разработен с бъдеща поддръжка за API на Vulkan, а програмният интерфейс за взаимодействие с потребителското пространство е проектиран с UAPI, предоставен от новия драйвер Intel Xe.
Над вече известни проблеми споменават се следните:
- Съществуващата интеграция на Rust в момента не поддържа изграждане на абстракции като модули, така че абстракциите на Rust са налични само за вградени DRM компоненти.
- DRM разчита до голяма степен на модела за „подкласиране“ за контролерни обекти и това не се отразява добре на Rust.
- В момента се внедрява само това, което е необходимо за контролера (плюс малко количество
очевидни екстри, където по-добрата цялост на API има смисъл). - drm::mm в крайна сметка изисква мутекс, вграден в абстракцията, вместо това
да делегирате това на потребителя с обичайните правила за промяна на Rust.
Това е така, защото възлите могат да бъдат премахнати по всяко време и тези операции
трябва да е в синхрон. - От страна на Mesa в момента имате драйвера Gallium, който предимно вече е нагоре по веригата (UAPI битовете най-вече липсват) и
преминава dEQP GLES2/EGL тестовете, като повечето от GLES3.0 преминават
Разклонения нагоре по веригата в процес на работа. Това е обратно инженерство на драйвер на общността, така че се споменава, че има още много да се направи в този аспект.
най-накрая, ако сте заинтересовани да научите повече за това, можете да проверите подробностите в следната връзка.