Показать сообщение отдельно
Старый 29.07.2010, 18:23   #1
spinner
Junior Member
 
Регистрация: 29.07.2010
Сообщений: 4
Post Как подключить родной пульт ASRock ION 330HT в openSUSE 11.3 (инструкция)

Всем привет.

Полгода назад друг спросил у меня как это сделать. Но девайса для экспериментов у меня не было и я ему лишь подсказал как распаковать DEB-пакеты. В итоге он купил другой пульт...

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

Шаг первый: получаем исходный код драйверов

Драйвера скачиваются с сайта производителя:

Код:
wget http://europe.asrock.com/downloadsite/drivers/Nettop/Ubuntu/IR(10.04).zip
Распаковываем вложенные матрешкой ZIP'ы и получаем два исходных файла: lirc-nct677x-src-1.0.4-ubuntu10.04.deb и lirc-nct677x-1.0.4-ubuntu10.04.deb.

Для того, чтобы распотрошить дебиановские пакеты нужно установить утилиту dpkg из пакета deb:

Код:
zypper install deb
Потрошим дебиановские пакеты:

Код:
dpkg -x lirc-nct677x-1.0.4-ubuntu10.04.deb conf
dpkg -x lirc-nct677x-src-1.0.4-ubuntu10.04.deb src
В результате получаем две директории: src и conf, с исходниками и конфигурационными файлами соответственно. Конфиги понадобятся нам в самом конце, так что приступаем к укрощению исходников.

Шаг второй: Подготовка ядра

Для начала нужно убедиться, что установлены исходники ядра. В нашем примере мы используем официальное сусешное ядро 2.6.34-12-desktop. Заодно установим lirc, чтобы не возиться потом со скриптами запуска.

Код:
zypper install kernel-desktop-devel kernel-devel lirc
Теперь переходим в /usr/linux и готовим исходники ядра к сборке модулей:

Код:
make menuconfig
Нужно убедиться, что в разделе конфигурации General Setup в поле Local version мы видим "-12-desktop". Далее:

Код:
make prepare
По идее, этого достаточно, чтобы начать собирать модуль. Но поверьте, гораздо спокойнее жить когда ядро собрано на целевой системе. Поэтому рекомендую не полениться и собрать ядро, модули, установить всё и перезагрузиться уже в свое ядро. Знаю что «боянище», тем не менее:

Код:
make && make modules_install && make install
После перезагрузки заругался драйвер NVIDIA на невозможность сделать vmalloc. Вылечилось установкой параметра ядра при загрузке vmalloc=512m. Разумеется, можно этот параметр подкрутить перед сборкой ядра в конфиге. Пусть это будет домашним заданием особо въедливым читателям.

Шаг третий: сборка LIRC

Теперь нам нужны исходники LIRC, версия 0.8.6 для нашего случая. Скачиваем с www.lirc.org и распаковываем в /usr/src/lirc-0.8.6.

Конфигурируем LIRC с помощью ./configure, в меню выбираем Driver Configuration > IRDa/CIR hardware > WinBond 8769L, возвращаемся и выходим через Save configuration & run configure.

Не спешите запускать сборку — исходники LIRC придется патчить. Во-первых, нужно подсказать LIRC куда в новых для него ядрах подевался файл autoconf.h

Код:
ln -s /usr/src/linux/include/generated/autoconf.h /usr/linux/include/linux/autoconf.h
Пуристы могут вместо этого заменить linux/autoconf.h на generated/autoconf.h по всему дереву исходников LIRC.

Во-вторых, нужно подкрутить drivers/lirc_dev/lirc_dev.h:

Код:
cd /usr/src/lirc-0.8.6/drivers/lirc_dev
wget http://launchpadlibrarian.net/39884031/lirc-LP529514.patch
patch < lirc-LP529514.patch
Теперь LIRC можно собирать и устанавливать:

Код:
make && make install
Теперь приступаем к сборке модуля:

Шаг четвертый: сборка модуля ИК-порта

Исходники драйвера ИК-порта тоже переносим в /usr/src/lirc-nct677x-src-1.0.4-ubuntu9.10.
Заходим в эту директорию и собираем модуль командой:

Код:
make -C lirc_wb677 KSRC=/usr/src/linux KVER="2.6.34-12-desktop" modules
Если всё сделано правильно, модуль соберется, но ругнется на отсутствующие определения двух функций — lirc_register_driver и lirc_unregister_driver. Это неприятно, но с этим жить оказывается можно. Честным путем такой модуль загружаться откажется, но если его принудить, то будет работать без вопросов.

Устанавливаем модуль:

Код:
cp lirc_wb677/lirc_wb677.ko /lib/modules/2.6.34-12-desktop/misc/lirc_wb677.ko
depmod -a
Загружаем модули:

Код:
modprobe lirc_dev
modprobe -f lirc_wb677
Шаг пятый: сборка всего вместе и проверка

Осталось немного: сконфигурировать LIRC и проверить.

Заходим в директорию conf, в которую распаковывали конфигурационные файлы и находим там lircd.conf.wb677. Копируем его как /etc/lirc/lircd.conf

Все, запускаем lircd и проверяем его работу программой irw, нажимая кнопки на пульте. Должен получиться примерно такой результат:

Код:
000000037ff07bf2 00 Home mceusb
000000037ff07bf2 00 Home mceusb
000000037ff07bf2 01 Home mceusb
000000037ff07be1 00 Up mceusb
000000037ff07be1 01 Up mceusb
000000037ff07be0 00 Down mceusb
000000037ff07be0 01 Down mceusb
000000037ff07bdd 00 OK mceusb
000000037ff07bdd 01 OK mceusb
Дальнейшие шаги уже зависят от фантазии. Я просто прописал команды загрузки модулей в /etc/init.d/lirc, чтобы они выполнялись, когда тот получает команду start.

Пульт работает.
spinner вне форума   Ответить с цитированием