debian + GMA500 + kernel 2.6.32

07.03.2010 22:37:06

Вот и надоела мне глючащая убунта и я, наконец, решился на установку дебиана на свой многострадальный нетбук Dell Inspirion 1010.

В-общем, собственно установка проблем не вызывает. Всё как всегда. Но вот видео – это проблема. GMA 500 всё так же не имеет нормальных дров для линукс. Да и виндузятники сетуют.
Пару недель назад нашёл я руководство для сборки полного комплекта модулей для GMA500 для Debian sid.
Вот и ссылочка на него:
http://blogs.koolwal.net/2009/11/05/howto-compiling-intel-atom-poulsbo-gma-500-graphics-driver-on-debian/

Автор руководства даже собрал пакеты для debian. Отличная новость. Удобнее всего воспользоваться ими. Но вот только ядра для которого собран модуль уже нет в репозитории, да и модуль для xorg также требует отсутствующий пакет.

Все эти проблемы я успешно решил. Сейчас расскажу как.

Модуль для ядра придётся собрать самостоятельно.

Ставим linux-headers для текущего ядра. В моём случае это ядро 2.6.32.
Скачиваем исходники модуля ядра как описано в руководстве по ссылке, либо другим способом.
Распаковываем и вводим в директории, куда распаковали команду:

make DRM_MODULES=“psb”

Должна начаться сборка. Может повезти как автору англоязычного руководства. А может не повезти как мне.

При компиляции вылезут ошибки.
Первая из них что-то про struct agp_memory.
В этом случае надо открыть файл /usr/src/linux-headers-2.6.32–2-common/include/linux/agp_backend.h (он из пакета linux-headers-common).
В-общем, находим в этом файле struct agp_memory и добавляем в эту структуру строчку

unsigned long *memory;

Теперь компиляция продвинется дальше, но снова возможно вылезут ошибки.
Ошибки и решения я нашёл здесь:
http://ubuntuforums.org/showthread.php?t=1330751

В выводе первой ошибки есть ключевое слово phys_to_gart
Для её исправления надо открыть файл drm_agpsupport.c (он находятся в исходниках модуля ядра, который мы пытаемся собрать)
Проблемная строчка mem->pages[mem->page_count++] = phys_to_gart(page_to_phys(*cur_page)); это где-то в районе 527 строки.
Надо подняться выше к началу функции (где-то строка 509) и добавить строчку

#define phys_to_gart(x) (x)

Вторая ошибка в файле drm_edid.c в строке

printk(KERN_ERR PREFIX “Invalid _DDC data\n”);

PREFIX нигде не определён, поэтому надо его определить.
Можно прямо перед проблемной строкой добавить

#define PREFIX “PSB(edid) ”

Это решит проблему.

После этих манипуляций модуль ядра у меня собрался.

Делаем make install
Потом modpobe psb

Консоль стала в нативном разрешении. Далее вопрос с модулем для xorg.
Собираться у меня модуль отказался, поэтому пришлось искать подходящий xorg.
Нашёл я его в убунте.

Добавляем репозиторий убунты deb http://ru.archive.ubuntu.com/ubuntu/ karmic main
и ставим оттуда xserver-xorg 1:7.4+3ubuntu7 и xserver-xorg-core 2:1.6.4–2ubuntu4 и соответственно нужные модули xserver-xorg-input-{kbd,mouse,synaptics}

После чего ставим все пакеты из англоязычного руководства, кроме модуля ядра.
Настраиваем xorg.conf как написано там же и наслаждаемся работающей графикой.

На всякий случай выкладываю все пакеты здесь.

libdrm-poulsbo-dev_2.3.0–1squeeze1_i386.deb
libdrm-poulsbo1-dbg_2.3.0–1squeeze1_i386.deb
libdrm-poulsbo1_2.3.0–1squeeze1_i386.deb
libva-dev_0.29–1squeeze1_i386.deb
libva1_0.29–1squeeze1_i386.deb
poulsbo-driver-2d_1.1–1squeeze1_all.deb
poulsbo-driver-3d_1.1–1squeeze1_all.deb
psb-firmware_0.30–1squeeze1_all.deb
psb-kernel-headers_4.41.1–1squeeze1_all.deb
psb-kernel-source_4.41.1–1squeeze1_all.deb
xpsb-glx_0.18–1squeeze1_i386.deb
xserver-xorg-video-psb_0.31.0–1squeeze1_i386.deb

Заодно и дебы xorg’а, а то исчезнут опять, замучаешься искать:
xserver-xorg-core_2–1.6.4–2ubuntu4_i386.deb
xserver-xorg_1–7.4+3ubuntu7_i386.deb

P.S. Статью эту заствил себя написать уже через две недели после того как всё это проделал. Так что мог что-то пропустить. В любом случае у вас уже больше информации, чем у меня, когда я начал.