• Резюме
  • Блог
  • Контакты
    • Facebook
    • LinkedIn
    • GitHub
    • Twitter
    • Google+
    • LiveJournal
    • VK
  • EnglishEnglish

Анамнез

чокнутого разработчика с комплексом божественной неполноценности

Трёхмерные эффекты на MSI Wind U100

07.05.2009 by Sergey Vasilyev Leave a Comment

Предыстория

Проблема

Ubuntu имеет сложные проблемы с драйвером видеокарт intel чуть ли не с версии 8.04. Причиной проблем является то, что драйвер находится в стадии сильной переделки, и работает в целом нестабильно. Тем не менее, этот полусырой драйвер был включён в дистрибутив из соображений «лучше плохо, чем никак».

На MSI Wind проблема проявляется в том, что при включённом Compiz (трёхмерном рабочем столе) другие трёхмерные приложения работают плохо, в том числе до степени непригодности.

Например, даже простейший glxgears при перетаскивании его окна оставляет изображение в исходном месте до окончания перетаскивания.

Плюс ко всему, помещение окна трёхмерного приложения под другое окно, даже под просто терминальное, срабатывает лишь на оформление окна (рамки); его содержимое всё равно рисуется наверху всей стопки окон. Хуже того, в зависимости от позиции окна трёхмерного приложения на экране, оно вызывает либо ровную прорисовку, либо мигание между своим изображением и изображением перекрываемого окна.

Более сложные OpenGL-приложения (вроде GoogleEarth, Stellarium) по всем этим причинам вообще практически непригодны к использованию.

Разумеется, можно не использовать трёхмерный рабочий стол, и такая проблема стоять не будет. Но не буду лукавить: единственное, что меня и многих простых пользователей сейчас может переманить на линуксы — вот эти спецэффекты, красивости, рюшечки. Все любят рюшечки!

Решения

В процессе переделывания драйвера видеокарты, разработчики ввели другой режим ускорения, который используется во внутренностях X (X — это название графической среды, оно же X-Window) — UXA — вместо используемого по умолчанию EXA. UXA, в свою очередь, требует DRI2, а DRI2 — GEM в ядре. Всё это до версии Ubuntu 8.10 включительно требовало массивного обновления целиком и драйвера, и ядра, и xserver’а, и ряда библиотек (mesa, drm); в версии Ubuntu 9.04 все необходимые компоненты уже предустановлены, но включен режим EXA.

Однако, в силу тестового характера этого режима и драйвера вообще, UXA очень сильно тормозит, даже в релизе Ubuntu 9.04. Compiz более-менее пригоден к использованию, но из-за медленной скорости радости не доставляет (скорее наоборот). Другие OpenGL-приложения тоже притормаживают, и куда как более ощутимо. Также, в последней версии драйвера, которая попала в Ubuntu 9.04, UXA вызывает заморозку экрана после пары-другой часов работы (или простоя, который с точки зрения компьютера всё равно является работой).

Спустя пару недель после выпуска Ubuntu 9.04 появилось решение, в меру стабильное и быстродействующее. Оно состоит в установке ядра linux-2.6.30, которое сей момент находится в стадии release candidate. Это же является и недостатком решения: ядро не готово, и в таком виде его никто не включит ни в какие обновления дистрибутива, а значит официального лекарства ждать не приходится.

К сожалению, ядро linux-2.6.30, как и все прочие версии, содержит драйвер wireless-карты (wi-fi) RTL8187SE в состоянии staging, которое по умолчанию не собирается. Поэтому готовые сборки ядра нам для MSI Wind не подходят. Всё придётся делать самим.

Но даже на ядре linux-2.6.30, драйвер из дистрибутива (intel-2.6.3), и дайвер от ubuntu-x-swat (intel-2.7.0) вешают систему через случайное время (от нескольких минут до пары часов). В отличие от заморозки экрана, где можно было переключиться в текстовую консоль, тут система вешается полностью (DontZap выставлен в false, для уточнения).

Экспериментально удалось выявить, что обновление с репозитория xorg-edgers решает проблему с зависаниями. Впрочем, дальнейшие откат драйвера до ubuntu-x-swat зависаниями не восстанавливает, так что источник проблемы скорее всего в какой-то из библиотек, обновляющихся из xorg-edgers (libdrm2, mesa).

Гарантированное решение: linux-2.6.30rc{any} + xorg-edgers repository (intel-2.7.99, etc).

Подготовка

  • MSI Wind U100.
    • Chipset: Intel GMA945.
    • Video: Intel GMA950.
  • Ubuntu 9.04 Jaunty Jackalope (original, or netbook remix)

Предполагаем, что у нас установлен свежий дистрибутив Ubuntu 9.04. Сама установка — слишком обширная тема, обсуждать её тут нет нужды.

Настраиваем сеть, она нам понадобится для установки пакетов. Драйвер беспроводной сети в Ubuntu 9.04 работает «из коробки», так что нужно только подсоединить его куда-нибудь. Драйвер проводной сети не проверял.

Обновляем что там желает обновиться до самых свежий версий.

Сборка ядра

Сборку ядра можно производить на абсолютно любом компьютере, подходящем для компиляции (много памяти и быстрый процессор). Можно собирать и на целевой машине, на которой это ядро будет работать (MSI Wind), но это займёт много больше времени. Работу проводим в домашнем каталоге (или в любой другой рабочей папке) без root-привелегий, чтоб не мусорить в системе.

Нам потребуются следующие пакеты для сборки ядра, а также все их зависимости:

sudo apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

Версия ядра нам нужна не менее 2.6.30. В данный момент доступна версия 2.6.30-rc4, её и используем. Последнюю доступную версию, а также ссылки на коонкретные файлы можно найти тут и тут. Получаем и распаковываем ядро (57MB!):

wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.30-rc4.tar.bz2
tar xjf linux-2.6.30-rc4.tar.bz2
cd linux-2.6.30-rc4

Конфигурируем ядро. Опционально берём рабочий конфиг с текущего ядра (непонятно зачем и надо ли вообще):

cp /boot/config-`uname -r` ./.config # ???
make menuconfig
# зайти в "Device Drivers"/"Staging drivers" и ВЫКЛючить галочку "Exclude Staging drivers from being built"
# выйти из программы и сохранить файл конфигурации (она сама спросит надо ли)

Запускаем сборку ядра:

make-kpkg clean
CONCURRENCY_LEVEL=3 INSTALL_MOD_STRIP=1 fakeroot make-kpkg --initrd --append-to-version=-msiwind kernel_image kernel_headers

Переменная CONCURRENCY_LEVEL позволяет использовать многоядреность процессора, на котором производится сборка. Значение нужно указывать в количество ядер плюс один (не знаю почему плюс один — это совет из сети). Сборка на самом MSI Wind U100 занимает порядка 4 часов (CONCURRENCY_LEVEL not specified). Сборка на двухядернике 2.2MHz занимает около 1 часа (CONCURRENCY_LEVEL=3).

Переменная INSTALL_MOD_STRIP заставляет убрать из модулей отладочную информацию. С отладочной информацией ядро с модулями весит примерно 300 МБ, без неё — 30 МБ. Замечено, что при модулях с отладочной информацией X виснет, хотя курсор движется; или вылетает по signal 11/SIGSEGV (не хватает памяти?).

Установка ядра

После сборки в рабочей папке (в нашем случае это домашний каталог) появятся два файла с длинными названиями:

  • linux-image-2.6.30-rc4-msiwind_2.6.30-rc4-msiwind-10.00.Custom_i386.deb
  • linux-headers-2.6.30-rc4-msiwind_2.6.30-rc4-msiwind-10.00.Custom_i386.deb

Эти файлы надо любым удобным способом скопировать на ту машину, на которой они будут устанавливаться. Дальнейшие операции проводятся уже на целевой машине, с root-привелегиями (sudo).

Устанавливаем:

sudo dpkg -i linux-image-2.6.30-rc4-msiwind*.deb linux-headers-2.6.30-rc4-msiwind*.deb

При желании делаем новое ядро дефолтным (в файле /boot/grub/menu.lst):

sudo nano /boot/grub/menu.lst

Перезагружаемся:

sudo reboot

Проверяем что всё работает как и раньше, в том числе сеть (ради беспроводного драйвера мы и пересобирали ядро сами). Если поломалось — загружаемся на старое ядро, ищем и исправляем проблемы.

Видеодрайвер и графические библиотеки

Открываем на изменение файл с источником обновления драйвера:

sudo nano /etc/apt/sources.list.d/intel-driver.list

И вписываем туда такие строки:

deb http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu jaunty main

Обновляемся:

sudo apt-get update
sudo apt-get upgrade

Перезагружаемся:

sudo reboot

Включаем UXA

ВНИМАНИЕ! В драйверах с xorg-edgers режим UXA задействуется по умолчанию, а других режимов вообще нет. Приведённый ниже текст был написан для драйверов с ubuntu-x-swat и более старых. Таким образом, эту секцию можно пропустить.

Теперь надо в драйвере видеокарты включить правильное видеоускорение — UXA вместо EXA. Для этого в /etc/X11/xorg.conf надо прописать только одну опцию (AccelMethod) в секцию Device:

Section "Device"
  Identifier "..."
  Option "AccelMethod" "UXA"
EndSection

Стоит также обратить внимание на дополнительные опции и скрипт fixmttr на уровен 300-320 комментариев в ветке: https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/252094. TODO: найти более точные ссылки!

Перезагружаемся.

sudo reboot

Настраиваем Compiz

Нужно установить Compiz Config Settings Manager, и настроить всю красоту по желанию.

sudo apt-get install compizconfig-settings-manager
ccsm

Ссылки

Ссылки для прочтения:

  • https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/252094 — основное обсуждение
  • https://bugs.launchpad.net/ubuntu/hardy/+source/xserver-xorg-video-intel/+bug/295934
  • https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/96991 — ключевая ссылка, а также скриншот (первым комментом)

Пакеты и инструкции:

  • https://launchpad.net/~xorg-edgers/+archive/ppa
  • https://launchpad.net/~ubuntu-x-swat/+archive/x-updates/

Установка ядра:

  • http://www.howtoforge.com/kernel_compilation_ubuntu
  • http://www.howtoforge.com/kernel_compilation_ubuntu_p2
  • http://kernel.ubuntu.com/~kernel-ppa/mainline/ — already compiled kernels, but staging drivers aren’t built
  • http://www.kernel.org/pub/linux/kernel/v2.6/ — vanilla kernels
  • http://www.kernel.org/pub/linux/kernel/v2.6/testing/ — vanilla r.c. kernels and patches

Опции и конфигурации:

  • http://ubuntuforums.org/showpost.php?p=7104256&postcount=1
  • http://ubuntuforums.org/showthread.php?t=1130582
  • http://beranger.org/v3/wordpress/2009/05/03/xserver-xorg-video-intel-270-for-jaunty-useless/
Posted in: Инструкции Tagged: ex-wiki, linux, ubuntu, xorg

Рубрики

Инструкции Лайфхаки Про жизнь Работа и карьера Разработка Слово дня Управление

Метки

asus dell devconf driver ex-wiki gettaxi hibernate hiring hunting job kernel linux mbr network networkmanager notebook router samba sudo synaptics touchpad uber uberx ubuntu webcam wifi wiki windows wl-500g xorg xps авто автомобиль деньги каршеринг поездки пробки работа самурай такси финансы экономия

Copyright © 2025 Анамнез.

Omega WordPress Theme by ThemeHall