The Struggle Within
Компилирах ядро 2.6.15 и вкъщи. Четейки Changelog-a явно съм бързал и не съм внимавал, понеже с някои от промените се сблъсках челно веднага след reboot-a.
По принцип първата ми работа след инсталация на ново ядро е да си инсталирам драйвер за видео-картата (Nvidia GeForce 6600), и веднага след това да компилирам модул за поддръжка на дистанционното на TV tunner-a.
Точно с второто имах проблеми… Историята започна с грешка при компилиране на lirc-0.7.2:
... ../lirc_gpio.c:98: error: `BTTV_PXELVWPLTVPAK' undeclared here \\ (not in a function) ../lirc_gpio.c:98: error: initializer element is not constant ../lirc_gpio.c:98: error: (near initialization for \\ `rcv_infos[1].bttv_id') ...
Преравям кода и виждам, че няма дефинирана константа BTTV_PXELVWPLTVPAK никъде из LIRC. Един бърз
grep -R BTTV_PXELVWPLTVPAK *
ме убеждава да прегледам #include директивите, които ме водят към сорса на ядрото, където BTTV_PXELVWPLTVPAK вече е BTTV_BOARD_PXELVWPLTVPAK и въобще BTTV_* вече е BTTV_BOARD_*.
Няма проблем, викам си – Find and Replace и си свиркай… Да, ама не.
make минава без оплаквания, инсталирам модулите и при modprobe lirc_gpio получавам здрав Segmentation fault със съобщение от ядрото за Unhadled NULL pointer exception в модула…
Проверявам в mailing list-a на LIRC за patch и виждам, че има snapshot на 0.8.0 който още е със статут на beta, a в CVS-a е добавен и patch за моя проблем (евала, много бърза реакция). Та дърпам аз lirc-0.8.0pre2, след което checkout-вам от CVS-a и целия lirc. Разпакетирам първо snapshot-a и пробвам компилация – тц! Хващам CVS сорса – той пък реве за една камара shell скриптове… Решавам да смеся двете и configure минава, обаче make реве, че libtool нямал опция –tag (явно моя libtool е остарял). Разцъквам из Makefile-овете и разкарвам проблемната опция, след което пак make – тоя път минава.
Инсталирам модула, modprobe минава без Segmentation fault, пускам демона и даже като root тествам тунера с irw – изплюва си кой клавиш натискам, всичко си му е ОК.
Ей, накрая, викам си, ще пусна съобщение в mailing list-a, че lirc_gpio модула работи, понеже разработчика пише, че нямал дистанционно с което да го тества… Преди това решавам да си пусна като нормален потребител и irexec и получавам:
irexec: error while loading shared libraries: liblirc_client.0: \\ cannot open shared object file: No such file or directory
Чудничко… преглеждам depenancies на shared библиотеките:
$ ldd `which irexec` linux-gate.so.1 => (0xffffe000) liblirc_client.0 => not found libc.so.6 => /lib/tls/libc.so.6 (0xb7e67000) /lib/ld-linux.so.2 (0xb7fb8000)
проблемната библиотека е liblirc_client.0, което е символна връзка към liblirc_client.0.1.0
$ mv liblirc_client.0.1.0 liblirc_client.so.0.1.0 $ ldconfig $ ldd `which irexec` linux-gate.so.1 => (0xffffe000) liblirc_client.0 => \\ /usr/local/lib/liblirc_client.0 (0xb7f47000) libc.so.6 => /lib/tls/libc.so.6 (0xb7e17000) /lib/ld-linux.so.2 (0xb7f6e000)
Сега вече всичко изглежда наред. Пускам irexec и натискам POWER на дистанционното:
$ irexec Running tvtime 1.0.1. Reading configuration from /etc/tvtime/tvtime.xml Reading configuration from /home/stinger/.tvtime/tvtime.xml
Натискам пак POWER:
tvtime-command: Sending command QUIT. Thank you for using tvtime.
В крайна сметка съм доволен, че работи, но не съм доволен от начина по който стигнах до работещото решение…
Маркери: kernel, linux, lirc
За тази статия
В момента четете "The Struggle Within", статия в stinger's thoughts
Отпечатване на статията
- Публикувана на:
- 07.01.2006 в 12:09
- Категория:
- Linux/UNIX
- Изпращане:
- Изпрати чрез email
Категории
- Books (10)
- Linux/UNIX (66)
- Movies (32)
- Music (70)
- Web Development (57)
- Други (180)






















IE8 Webslice
RSS с публикации
Няма коментари
RSS с коментaрите