Fatality

Вчера Калин (клавирист на ученическата ни група) стана на 28 години и, понеже празнувахме заедно, заформихме дискусия по въпроса за фатализма на 27-мата година…

От дума на дума стигнахме до това, че много известни музиканти са намерили за уместно да прекъснат жизнения си път точно на 27 – ще сведа списъка само до 5 имена, които обаче са доста значими:

1. Jim Morrison (The Doors)
2. Jimmy Hendrix
3. Kurt Cobain
4. Janis Joplin
5. Brian Jones (The Rolling Stones)

Добре, че вече не свиря, и прескочих 27-мата си година преди 3 месеца 😉

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.

В крайна сметка съм доволен, че работи, но не съм доволен от начина по който стигнах до работещото решение…

Wireless

Wireless coverВече трети ден на прибиране към вкъщи слушам албума Wireless (Acoustic Sessions) на Threshold. В състояние съм да го слушам още поне толкова време – музиката вътре действа доста успокояващо след работния ден…

Интересното около този албум е, че той е полу-официален – издаден е от фенклуба на групата, а не от някой от големите лейбъли, но всеки може да си го купи от Yahoo Music или Virgin за $0.99 на парче…

Другото интересно е, че (както сочи и заглавието) албумът е акустичен, но е записан без публика, т.е. не е unplugged в истинския смисъл на думата и съдържа интересни варианти на някои от песните. Всъщност точно заради този албум харесах Fragmentation…

Топ 3 в албума:
3. Narcissus
2. Consume To Live
1. Part Of The Chaos

linux-2.6.15

От два дена съм с версия 2.6.15 на Linux ядрото на служебната машина – държи се стабилно, както винаги…

След повече от 2 месеца разработка новостите са доста: възможност за въртене на конзолата (0-360 градуса), shared subtrees (доста хитро), Microsoft Point-to-Point Encryption метод върху PPP, поддръжка на nVidia 7800 серията, както и на PCI Express Radeon, поддръжка на ATA passthru и още доста неща:

Ако обичате да си играете – за въртене на конзолата (при конфигурацията на ядрото изберете CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y) при boot добавете boot опцията:

fbcon=rotate:n

където n=0-360, или в реално време:

echo n > /sys/class/graphics/fb[num]/con_rotate

А за да направите промените глобално:

echo n > /sys/class/graphics/fb[num]/con_rotate_all

Все пак имайте предвид следното:
This is done in software and may be significantly slower than a normally oriented display. Note that the rotation is done at the console level only such that other users of the framebuffer will remain normally oriented.