Роб Кларк (Rob Clark), разработчик из компании Texas Instruments, развивающий открытый набор драйверов для чипов OMAP и вовлечённый в разработку проекта Linaro, представил новый открытый графический драйвер для выпускаемых конкурирующей компанией Qualcomm чипов Snapdragon, поставляемых с интегрированными графическими процессорами Adreno. При разработке использована эталонная платформа DragonBoard на базе Snapdragon S3 APQ8060 и обратный инжиниринг бинарных драйверов Qualcomm.

Новый открытый драйвер получил название Freedreno и доступен для свободной загрузки под лицензией MIT. В настоящее время драйвер поддерживает 2D-акселерацию (реализована архитектура EXA), базовые композитные операции и может использоваться совместно с X-сервером (подготовлен DDX-драйвер xf86-video-freedreno). В будущем планируется обеспечить поддержку 3D-акселерации и DRI2. Таким образом, ситуация с открытыми драйверами для мобильных ARM-платформ начинает меняться к лучшему: кроме Freedreno в настоящее время развивается проект Lima, созданный для разработки полноценных открытых драйверов для графического сопроцессора Mali (Mali-200 и Mali-400), также компаниями Texas Instruments и Samsung ведётся разработка базовых открытых графических драйверов для чипов OMAP и Exynos, в которых, к сожалению, пока не планируется поддержка 3D.

По словам Роба Кларка, работа выполнена в свободное от работы время и позиционируется как персональный проект, никак не связанный с компанией Texas Instruments и проектом Linaro. Роб рад был бы принять участие в развитии открытых драйверов для GPU Mali или IMGtech PowerVR, но пока не может этого сделать в силу своих обязательств перед Linaro и TI, так как такой шаг может рассматриваться как нарушение соглашения о неразглашении. С оборудованием Qualcomm Роб на своей прямой работе не сталкивается, поэтому можно не опасаться возможного конфликта интересов.

Для определения логики работы с чипами Qualcomm была создана небольшая библиотека libwrap, загружающаяся через LD_PRELOAD и позволяющая перехватывать все вызовы между модулем ядра и проприетарным драйвером, выполняемым на уровне пользователя, что позволило определить поток команд к GPU, информацию по адресам, координатам и т.п. Для разбора связанной с GPU активности и выявления типовых повторяющихся действий была написана утилита redump, при помощи которой на основе лога генерировался наглядный сводный отчёт, упрощающий анализ логики работы с GPU. Так как часть оригинального драйвера Qualcomm, работающего на уровне ядра Linux, доступна в исходных текстах, нетрудно было выявить API для взаимодействия с закрытым бинарным компонентом. Работающий на уровне ядра драйвер Qualcomm распространяется под лицензией GPL и использует для управления памятью GPU технологию GEM (Graphics Execution Manager), но не предоставляет функций переключения видеорежимов, что позволяет лишь частично использовать его при дальнейшей реализации поддержки DRI2 и 3D.

Источник: http://www.opennet.ru/opennews/art.shtml?num=33604