AMD (dawinej ATI) upubliczniło specyfikację i… cisza?

Podczas porannej prasówki natrafiłem na link w 7thguard do informacji o udostępnieniu
przez AMD specyfikacji do chipsetów graficznych
. Developerzy Xorg dostali pierwszą część dokumentacji
dwunastego września, lada chwila ma wyjść (a może wyszedł?) nowy,
open-source’owy sterownik do R500/R600… a w sieci praktycznie cisza.

Dziwne trochę. Były petycje, nie petycje, wieczne narzekania na brak
dobrych sterowników i specyfikacji, szum przy każdej wzmiance o ewentualnym
ujawnieniu specyfikacji itd. itp. A jak coś konkretnego się stało, to cisza.
Dziwne. Albo ja czegoś nie widzę…

Kamerka pod Linuksem

Żonka ostatnio wspominała, że chciałaby mieć kamerkę internetową. Ja lubię
takie zabawki, więc od razu podchwyciłem pomysł i postanowiłem jej kamerkę
kupić. No to zajrzałem na Allegro co tam mają… cała masa do wyboru… no to
biorę parę z brzegu i Googlam za ich wsparciem w Linuksie. Ciężko to idzie. Nic
na temat wsparcia w Linuksie dokładnie tych urządzeń co znalazłem na Allegro w
Google nie było. Jak
coś znalazłem, co miało wsparcie, to albo tego na Allegro nie było, albo
kosztowało więcej niż byłem w stanie zapłacić. Na Allegro był tak wielki wybór,
że nie sposób było sprawdzić wszystkiego. Podobnie na wygooglanych listach
sprzętu obsługiwanego przez Linuksa. Oczywiście każdy producent chipsetu
zrobił interfejs po swojemu (urządzenia oparte o standard UVC się dopiero
pojawiają i do tych najtańszych nie należą), a który chipset jest w której
kamerce to dopiero po podłączeniu można stwierdzić…

Na Allegro i tak nie chciałem tego kupować (w końcu to kot w worku),
uznałem, że wybiorę się do sklepu. Normalnie wziąłbym ze sobą listę
obsługiwanego sprzętu, żeby porównać z tym co jest na półkach. Ale dostępne
listy są olbrzymie… a i tak niekompletne… Poszedłem więc bez listy, parę
popularniejszych nazw zapamiętałem, a w ogóle, to uznałem, że może trafię. I
umówię się ze sprzedawcą, że jak nie uruchomię tego, to zwrócę…

No więc przyszedłem do sklepu. Przerażanie w oczach – chyba z
dziesięć różnych kamerek na półce, żadna nie przypomina niczego o czym
czytałem… No nic, mówię, że chcę kamerkę i nieśmiało dodaję ale taką,
żeby działała pod Linuksem
. A sprzedawczyni, ku mojemu zaskoczeniu, bierze
jedną kamerkę z półki (i to chyba taką, jakiej żonka oczekuje – na
laptopa, z klipsem) i mówi, że ta będzie na pewno działać. Okazało się, że był
tam już jeden klient z takimi wymaganiami, przyszedł z laptopem i na miejscu
sprawdził. Zapytałem jeszcze o parametry, bo kosztowała mniej niż byłem
przygotowany na to wydać. Pani zaproponowała, że może podłączyć do jakiegoś
laptopa i pokazać. Już brała jednego laptopa, ale stwierdziła: Ale ten ma
zainstalowaną tę kurewską… oj, przepraszam… na nim jest ta Vista
.
Kobieta była rzeczywiście przerażona, że jej się takie słowo wymsknęło. Widać
szczerze. :-D

W końcu dała mi jakiegoś laptopa z Windows XP, żebym sobie podłączył i sprawdził.
Taaa… równie dobrze mogłaby mnie posadzić przed sterami helikoptera, żebym
się przeleciał ;-). Ale jakoś sobie w tym egzotycznym systemie, i
to jeszcze z jakimiś dodatkowymi przeszkadzajkami, poradziłem. Kamerka
zadziałała, obraz był zadowalający (przynajmniej jak na tą cenę). Biorę.

Za sterownikami rozglądałem się wcześniej, więc jakiś miałem już w pracy
skompilowany, dla najnowszego kernela PLD AC. Okazało się, że pasuje do tej
kamerki. Załadował się bez problemu i xawtv pokazało obraz. Ale Ekiga
marudziła, że nie może otworzyć urządzenia. Bałem się, że kamerka z Ekigą
niezgodna (może dlatego, że JPEG)… ale okazało sie, że po prostu ten
sterownik to V4L1, a w Ekidze miałem załadowane tylko V4L2. Doinstalowałem
libpw-vide-v4l i ruszyło!

Teraz trochę danych praktycznych:

  • Kamerka to:
    A4Tech Evo Cam Note
  • Sterownik do niej to: gscpav1
    (wersja: 20070110)
  • Aby ręcznie zbudować ten sterownik na PLD Ac trzeba:
    • Zainstalować pakiet kernel-module-build w wersji zgodnej z
      używanym kernelem (zrobić upgrade kernela i zainstalować najnowszy
      kernel-module-build)
    • Rozpakować źródła sterownika gdzieś w katalogu domowym.
    • Poprawić Makefile:

      Zamienić:

      default:
              $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC=$(CC)
      modules

      na (w przypadku używania kernela up, zamienić wszystkie smp na up):

      default:
              mkdir -p o/include/linux
              ln -sf $(KERNELDIR)/config-smp o/.config
              ln -sf $(KERNELDIR)/Module.symvers-smp o/Module.symvers
              ln -sf $(KERNELDIR)/include/linux/autoconf-smp.h
      o/include/linux/autoconf.h
              $(MAKE) SYSSRC=$(KERNELDIR) SYSOUT=$(PWD)/o O=$(PWD)/o -C $(KERNELDIR)
      CC=$(CC) prepare scripts
              $(MAKE) SYSSRC=$(KERNELDIR) SYSOUT=$(PWD)/o O=$(PWD)/o -C $(KERNELDIR)
      SUBDIRS=$(PWD) CC=$(CC) modules
    • Przelogować się na roota, skopiować zbudowany gspca.ko do
      /lib/modules/`uname -r`/misc, zmienić mu właściciela na
      root:root, odpalić depmod -a.

Dopiero teraz zobaczyłem, że w repozytorium PLD jest gspca.spec i
się nawet buduje, więc można zapomnieć o tym, co napisałem wyżej i po prostu
zbudować sobie pakiet. Wersja w specu jakby trochę inna, jeszcze nie sprawdzałem czy
działa, najwyżej trzeba by speca nieco poprawić.

Update: Nagrałem mały testowy filmik, żeby pokazać co kamerka może. No, nie do końca pokazuje on co chciałem – podczas nagrywania obraz stracił nieco na jakości, bo nie znalazłem jeszcze sposobu na nagrywanie z tego w optymalnej jakości. Na bezpośrednim podglądzie w spcaview/xawtv/mplayer obraz jest odrobinę lepszy.

Stary tropek w nowym ciele

Już się tu chwaliłem jak sobie zbudowałem serwerek
z drewna
. Znaczy się, zamknąłem płytę VIA EPIA z zasilaczem i dyskiem
w drewnianym pudełku. Tak narodził się tropek
serwerek/routerek, który w podobnej formie służył nam do przedwczoraj.

Moja konstrukcja, niewątpliwie oryginalna, od początku była niekoniecznie
praktyczna, ale przy założeniu, że się w tym nie grzebie, to nie było dużym
problemem. I żonce się nawet komputerek spodobał…. Ale ciężko, żeby taki
niewyżyty administrator jak ja, powstrzymywał się długo od grzebania w domowym
serwerku…

Gdy uznałem, że poczta mi się trochę za bardzo muli, uznałem, że dodam
pamięć… i wymienię dysk na SCSI. Pierwsze, mimo pewnych komplikacji
z zakupem, nie było większym problemem. Drugie wiązało się z dołożeniem
kontrolera SCSI, co oznaczało wyrzucenie sieciówki PCI, co oznaczało
podłączenie Ethernetu przez USB. Obudowa zyskała jeden wypustek, żeby
kontroler się zmieścił oraz jedną „mackę” do podłączenia sieciówki…

Dysk SCSI był głośny, więc kombinowałem z wyciszeniem dysku. Później były,
średnio udane, próby podłączenia dodatkowego dysku IDE przez USB, wymiana
kontrolera SCSI na wyższy itp. Skrzynka zyskiwała kolejne wypustki i macki,
a do tego przestała się domykać… gdy ostatnio zacząłem wspominać o kolejnych
możliwych zmianach żona powiedziała
Dość! i zasugerowała wymianę skrzynki na coś co wygląda jak komputer.
Nawet zaczęła się za odpowiednim sprzętem rozglądać na Allegro…

Wypatrzyła na jednej aukcji malutki komputerek
Dell™ OptiPlex™ GX150
(w wersji Small Form-Factor, po
naszemu slim). Poźniej ja się rozejrzałem i stwierdziłem, że takich
maszynek na Allegro jest całkiem sporo, w różnych konfiguracjach
i rzeczywiście wygląda to na rozsądny wybór. Dostępne egzemplarze miały zwykle
256MB RAM i procesory 800-1100MHz. Do tego czasem napęd CD lub DVD i dysk
twardy 10-20GB. Uznałem, że CD mi nie potrzebny, dysk potrzebuję i tak
większy, a pamięci 512MB to minimum (więcej do tej maszynki nie da się
wsadzić). W końcu zamówiłem komputerek bez dysku i napędu optycznego, ale
z 512MB RAM. A zanim przyszła kupiłem na mieście dysk twardy 160GB. IDE, bo
o wsadzeniu SCSI do tej maszynki mogłem zapomnieć (bardzo niskie miejsce na
kartę PCI).

Zanim jeszcze przyszedł Dellik zabrałem się za testowanie i przygotowanie
dysku. hdparm -tT zaskoczył mnie wynikiem 78MB/s. To więcej niż
moje dyski SCSI 10000 obr/min. Czasów dostępu nie mierzyłem, ale tu raczej nie
ma szans, żeby były niższe niż w tych SCSI. Bardzo zadowolony też byłem
z głośności, czy raczej cichości dysku. Założyłem filesystemy (na LVM,
rzecz jasna) i rsyncem wstępnie skopiowałem dane ze starego (wtedy wciąż
on-line) tropka.

W poniedziałek przyszedł Dell. Zapakowany w pieluszki. %-)
Obudowa podrapana z wierzchu, ale w środku jak nowy. Podłączyłem zasilanie,
włączam… i nic… cisza. Dopiero gdy przyłożyłem ucho do obudowy poczułem
ciche mruczenie. Całkiem nie źle jak na maszynkę z dwoma wentylatorkami
o małej średnicy.

Zastopowałem prawie wszystkie usługi na starym tropku (zostawiłem sieć
i sshd) i jeszcze raz zapuściłem rsynca, żeby skopiować ostatnie zmiany na
nowy dysk (podłączony do podbiurkowej maszyny). Skonfigurowałem bootloadera
itp. i zamontowałem dysk do nowego serwerka. Trochę musiałem przy tym
pogłówkować, bo to nie takie proste, rozciąłem sobie palucha (zawsze jak
składam jakiegoś PC to się potnę i coś krwią wysmaruję), ale się udało. Przy
okazji zauważyłem, że prowadnice na dysk są zrobione tak, żeby tłumić drgania
– konstruktorzy Della bardzo dbali o to, żeby to było ciche.

Oczywiście za pierwszym razem nie udało mi się uruchomić systemu. Jeszcze
z dwa razy musiałem dysk podpinać do dużego kompa, żeby coś tam w konfiguracji
poprawić, ale w końcu się udało. Jeszcze parę drobnych poprawek na nowym
serwerku, testy na łączu w świat skrosowanym pod biurko i mogłem wyłączać
starego tropka i wstawić nowego na jego miejsce w szafie. Chwilę potem już
miałem internet, Jabbera i parę innych przez nową maszynkę.

Wydajnościowo nie widzę jakiś różnic w żadną stronę. W nowej konfiguracji
sprzętowej transfery z dysku są gorsze – po podłączeniu do pięcioletniej
płyty głównej ten nowy dysk wyciąga już tylko około 28MB/s. To mniej niż
miałem w starym tropku. Ale tam był kontroler SCSI i pamięć DDR. Różnic
wynikających z gorszych czasów dostępu nie zauważyłem. W nowym jest szybszy
procesor, ale w takim zastosowaniu raczej nie powoduje to widocznych zmian.
Jeśli chodzi o wydajność nie była to zmiana na lepsze, ale na gorsze też nie.

Najważniejsze, że teraz serwer wygląda normalnie:

nowy_tropek.jpg

i że znacznie łatwiej jest do niego cokolwiek podłączać i odłączać. Mam
nadzieję, że długo nam posłuży.

Uffff… działa

Okazało się, że wystarczyło: ifdown eth1; ifup eth1. Widać
znowu zgłupiała moja super sieciówka na USB… albo switch do którego jest
podłączona.

A niedziałanie DNSu, a co za tym idzie i mojego joggera, wynikało z mojej
własnej głupoty. W rekordzie SOA miałem bzdurne czasy wpisane i zgodnie z tymi
wytycznymi zapasowe serwery DNS zapominały o jajcu.net najpóźniej w
godzinę po padzie mojego serwerka. Widać kiedyś chciałem wymusić szybsze
odświeżanie strefy, a nie chciało mi się do dokumentacji zaglądać który
numerek co oznacza. Zmniejszyłem tymczasowo prawie wszystkie… i tak
już zostało. Teraz ustawiłem expire na trzy tygodnie i wreszcie
zapasowe serwery nazw powinny spełniać swoją rolę jak należy.

WiFi w domu, z przygodami oczywiście

Niedawno żonka dostała
nowego laptopa
. Z różnych ciekawych rzeczy, ten laptop ma, między innymi,
WiFi. Karta na chipsecie Prism 2.5 została od kopa rozpoznana przez Linuksa
(na początku jako eth0, co przez chwilę powodowało moje wątpliwości
w sprawność normalnego portu Ethernet). Szkoda by było tego nie
wykorzystać.

W domu mam jeszcze dwie bezprzewodowe karty sieciowe: na PCMCIA i na USB,
obie Compex, obie zawsze sprawiały mi problemy, ale przynajmniej dawało się na
otwartych sterownikach to jakoś odpalić. Tę na PCMCIA sobie
odpuściłem, bo nie będę odpalał innego laptopa i kernela 2.4, żeby sprawdzić
czy WiFi u żony działa. Postanowiłem spróbować z tą na USB, od razu
podłączając ją do mojego routerka.

Karta jest na chipsecie ATMELa. Zasadniczo są do tego dwa sterowniki:
atmelwlandriver i at76c503a (berlios driver). Oba
od dawna nie rozwijane. Żadnego z tych sterowników w PLD nie ma (pewnie
w żadnej dystrybucji nie ma). Poprzednio tę kartę uruchamiałem na tym pierwszym
sterowniku, nawet udawało się do tego PLDową paczkę zbudować i jako-tako to
działało. Z drugim też próbowałem, ale bez lepszych rezultatów (innych niż
zwis maszyny czy okazały Oops).

Tym razem atmelwlandriver nie udało mi się nawet skompilować
– systemu budowania dostosowanego do antycznych kerneli nie umiałem
pogodzić z PLDowym kernel-module-build. O dziwo, sterownik z Berliosa,
w wersji CVS, skompilował się bez problemów. Co więcej, załadował się na
tropku i połączył się z laptopem żonki. Oczywiście konfiguracja nie może być
normalna (gdzie router z kartą WiFi robiłby za AP) – karty
działają w trybie Ad-Hoc, bo ta na USB trybu master nie umie.

Połączył się, ale coś za bardzo sieć nie działała. Sprawdziłem
tcpdumpem i zobaczyłem ip packet truncated – 4 bytes
missing
. No fajnie, pewnie sterownik spieprzony. Ale nie wyglądało to na
coś, czego nie dałoby się naprawić. Google dużo na ten temat nie miało do
powiedzenia. Zajrzałem więc do źródeł i lepiej przyjrzałem się logom. W logach
znalazłem: firmware version 1.103.0 #175 (fcs_len 4) . Najpierw
spróbowałem starszego firmware’u (ze sterownikiem przyszły dwie wersje), ale
to w ogóle nie działało. Pozostało pogrzebać w źródłach. Okazało się, że jest
tam kod odpowiedzialny za obcięcie FCS (cokolwiek to jest) z końca ramki. Ten
FCS to 4 bajty, z wyjątkiem jednej wersji firmware (jakiejś starej), gdzie
ta długość była ustawiona na 0 (z komentarzem, że ta wersja jest głupia i FCS
nie doczepia). No to wpisałem 0 na stałe i bingo! Zadziałało :-).

Kolejnym problemem były straty pakietów. W pokoju, gdzie zwykle stoi
laptop, 17%. Przeszedłem się z nim po mieszkaniu i w przedpokoju, gdzie
powiesiłem nadajnik (kartę USB) było 0%. Ale w przedpokoju nikt pracować nie
będzie… Spróbowałem jeszcze przenieść nadajnik (najpierw powiesiłem nad
drzwiami, obok dzwona, bo tam się ładnie komponował ;-)), położyłem na
drzwiczkach szafki… i w całym domu jest zasięg i 0% strat. Tylko jak to tam
na stałe powiesić… próbowałem dwustronną taśmą klejącą, ale odpadało. Ten
problem zostawiłem sobie na później.

Na początek teksty robiłem na gołym 802.11b, nawet bez WEP. Oczywiście nie
mogło tak zostać. WAP to też żadne zabezpieczenie. O WPA na tych kartach
mogłem zapomnieć (tylko 802.11b umieją, a więc WPA na pewno nie). Bawić się
w 802.1x+WEP nie widziałem sensu. PPPoE też już przerabiałem w pracy (więc
żadne wyzwanie), a do tego też wydawało mi się to mało sensowne w domowej
sieci z jednym komputerem. Postanowiłem spróbować IPSec. W końcu tę
technologię też trzeba poznać. Dodatkowo chciałem też WEP odpalić z prostym
kluczem, po co cokolwiek ułatwiać… ale to nawet nie chciało ruszyć między
tymi kartami. Trudno.

Poczytałem o ipsec-tools, poeksperymentowałem, w końcu
załapałem jak ten racoon i setkey działają.
Okazało się że w takim przypadku jak mój, gdzie nie potrzeba DHCP, czy innej
automatycznej konfiguracji, to takie IPSec całkiem dobrze może się sprawdzić.

Gdy już miałem prawie wszystko gotowe, z szyfrowaniem, przygotowanym
routingiem, NATem itd… połączenie przestało działać. Karty się nie
widziały… przypomniałem sobie, że wcześniej dziecko walnęło drzwiami w tę
wiszącą kartę USB… przestraszyłem się, że się rozwaliła. Kilka jej restartów
nie pomogło. Rozkręciłem… w środku wyglądało bardzo solidnie i raczej na
nienaruszone… postanowiłem sprawdzić jeszcze jedną możliwość –
zrestartowałem laptopa (samo ifdown/ifup, czy nawet wyładowywanie modułu nie
pomagał)… ruszyło… uff…

Na koniec zamontowałem trochę solidniej nadajnik:

[img:wifi
full-prof]

A teraz żonka siedzi przy laptopiku, bez kabelka i nie narzeka. Wiec chyba
jest ok. 🙂 Tylko czemu zawsze w tą radiówką musi być tyle problemów?…

Wreszcie działa?

Mam nadzieję, że tym razem nie zapeszę…

Po ostatnim wpisie tutaj na temat karty TV dałem sobie spokój z próbami
w moim komputerze. Za to zabrałem kartę do pracy. Tam zadziałała bez problemu.
Nie dość, że nie powodowała padu systemu, to jeszcze jakość nagrania była dużo
lepsza (brak zakłóceń w postaci białych pasków). Pomyślałem, że w ten sposób
będę mógł przynajmniej w pracy zgrać z kamery to co wcześniej sobie na taśmę
nagram… jednak na myśleniu się skończyło. Najpierw urwałem tacie jedną taśmę
(z tych które mi dał do przegrania), a potem odkryłem, że kamera w swoim
łakomstwie pożarła by każdą taśmę jaką do niej wsadzić. Więc eksperymenty
z przegrywaniem kaset zakończyłem na tej jednej urwanej i dwóch wymiętych
taśmach…

Poleżała więc kamera u mnie w pracy przez tydzień, aż postanowiłem znowu
spróbować w domu. Tym razem plan był taki: skoro problemem jest najwyraźniej
równoczesna transmisja DMA z karty TV i na dysk (lub z dysku), to może zmiana
kontrolera SCSI coś pomoże. Wygooglane materiały sugerowały, że to raczej
będzie problem płyty… jednak na temat problemów z DMA akurat tego modelu
płyty głównej w sieci nic nie było. Tak się składa, że miałem drugi kontroler
SCSI (wolniejszy, bo tylko Ultra-II zamiast Ultra-160, ale do jednego dysku
starczy) w tropku.

Dzisiaj znalazłem chwilkę, żeby przeprowadzić tę operację. Wyłączyłem
tropka (odcinając się od sieci – z tego powodu musiałem to zrobić, gdy
żonki nie ma w domu) i przełożyłem jego kontroler (Symbios 53c895) do
dużego. Włożyłem kartę TV, podłączyłem kamerę, uruchomiłem komputer,
zacząłem nagrywać. Po chwili sprawdziłem nagranie – brak
charakterystycznych zakłóceń jakie się pojawiały przy drugim kontrolerze
(Adaptec ASC 19160). Zostawiłem nagrywanie na dłużej i ciągle nic się nie
psuło. Tym razem to chyba rzeczywiście sukces! :-)

Po pierwszych testach karty pozostało tylko ponownie uruchomić tropka.
Oczywiście nie było to takie proste. Najpierw w ogóle się nie uruchamiał. Po
poprawieniu kabelków uruchomił się, ale nie zabootował. Po podpięciu do
monitora okazało się, że pamięć CMOS mu się skasowała (i głupi BIOS
stwierdził, że procesor się zmienił). A do tego wszystkiego, z nowym
kontrolerem mu się znowu klapka nie domyka… Na szczęście w końcu udało się
go odpalić i nie jestem odcięty od świata.

No to już wiem, że karta TV na chipsecie Bt878 i kontroler SCSI Ataptec
19160 wpięte razem do płyty Asus A8N-E to kiepski zestaw i po prostu nie
działa. Ten problem rozwiązany. Pozostaje wymyślić co zrobić, żeby kamera nie
pożerała taśmy… a właściwie, to czy ja w ogóle potrzebuję nagrywać na VHS?

Zmagań z kartą TV ciąg dalszy…

Niby sytuacja beznadziejna, ale jeszcze się nie poddałem. Najpierw
spróbowałem odpalić system w 32-bitach. 32-bitowy chroot już miałem, więc
dorzuciłem tam kernela i parę innych pakiecików, skonfigurowałem gruba
i zabootowałem. Próba zgrania czegoś… i znowu, nie minęła minuta i kernel
płacze, że mu się filesystem popsuł… wrrr…

Kolejne podejście. Skompilowałem sobie własnego kernela (64-bity, skoro
nie widać różnicy), ale z wyłączonymi niektórymi podejrzanymi
ficzerami, jak np. CONFIG_PREEMPT. Reboot, próba zgrania czegoś… i znowu
oops.

Kolejne próby to wyłączanie wszelkich sterowników. Najgorzej było z USB,
ciągle coś mi ładowało moduły, nawet jak miały alias na „off” w modprobe.conf.
Przeniosłem gdzieś odpowiedni katalog z /lib/modules i się tego USB pozbyłem.
Dalej nic to nie dało.

Wszystko wskazywało na to, że programowe możliwości mi się wyczerpały,
więc zabrałem się za sprzęt. Wyciągnąłem nieużywaną kartę sieciową
i przestawiłem w slotach karty TV i SCSI. Start systemu, próba nagrywania…
i to samo.

Już właściwie postanowiłem, że wezmę tę kartę do pracy, sprawdzić ją na
płycie Intela, bo coś ten mój Asus A8N-E podejrzany jest… ale jeszcze
chciałem parę rzeczy sprawdzić…

I w końcu ruszyło. Nie wiem dokładnie co pomogło (dość mam rebootów, nie
będę sprawdzał), ale mogła to być jedna z dwóch rzeczy: albo options
bttv latency=248 gbuffers=32
w modprobe conf (wcześniej miałem
tylko latency=200, albo nic), albo przestawienie w BIOSie
synchronizacji zegara PCI (czy jakoś tak) z To CPU na 33.333.
W każdym razie teraz od ponad 1000 sekund idzie nagrywanie i nic się jeszcze
nie sypie. :-)

Update: chwilę po wysłaniu wpisu się jednak sypło :-(

Nowa zabawka

Kupiłem sobie nową zabawkę – kartę TV. Prawde mówiąc nie jest mi to
specjalnie potrzebne, ale chciałem się czymś nowym pobawić, a za kilkadziesiąt
złotych mogę zaszaleć. Karta to AverTV Studio Model 103, na bt878a.

Karta po włożeniu do kompa została automatycznie wykryta (został załadowany
odpowiedni sterownik), bez najmniejszego problemu. Nie mając innego sprzętu, ani kabla
do podłączenia sygnału TV, pierwsze co podłączyłem to aparat cyfrowy,
wykorzystując jego wyjście Video. Odpaliłem tvtime, ale bez oczekiwanego efektu
(karta została rozpoznana, ale obrazu nie było). Okazało się, że 32-bitowa aplikacja nie
może się dogadać z 64-bitowym sterownikiem w kernelu. Zainstalowałem 64-bitowe tvtime
i pojawił się obraz.

Pierwszego wieczora wypróbowałem jeszcze radio. To działało nawet poprzez
32-bitową aplikację (gnomeradio), ale niestety odbierało (na dołączonej do
karty antanie) tylko Radio Maryja. Po przestawieniu anteny udało się jeszcze
złapać Antyradio, ale słabo.

Następnego dnia zaopatrzyłem się w kabelki, żeby potestować kolejne funkcje karty.
Telewizja ruszyła, tylko większość kanałów zaśnieżone. Ale to można było
przewidzieć, bo sygnał w naszej kablówce jest nienajlepszy, a w komputerze
sporo szumów. W każdym razie Wiadomości obejrzeliśmy sobie na monitorze LCD.

Próbowałem też coś nagrać na dysk, ale wszelkie próby, jeśli już się
program dogadał z kartę, kończyły się tajemniczymi Oopsami, więc dałem sobie
z tym spokój.

W sobotę wpadł do nas mój ojciec i okazało się, że może nam odstąpić swoją
kamerę VHS (prawdę mówiąc nie miałem pojęcia, że miał coś takiego), bo kupił sobie
cyfrową. Teraz mogło zacząć się prawdziwe szaleństwo z moją nową zabawką…

Obraz z kamery wyświetlić na komputerze udało się od razu – tvtime
w końcu już się sprawdziło. Ale wypadałoby zrobić z tym coś więcej, równie dobrze
przecież mógłbym sobie podpiąć kamerę do telewizora. Zacząłem więc szukać jakiegoś
fajnego oprogramowania do tego. Najpierw coś do zrobienia kamerki internetowej.
W końcu znalazłem webcam_server które zaspokoiło
moje potrzeby na tę chwilę i przez jakiś czas parę osób mogło oglądać
niezwykle fascynującą transmisję: Ikę
przed laptopem.

Dzisiaj wróciłem do walki z nagrywaniem. Niestety wciąż tylko oopsy
i oopsy. Kombinowałem z różnymi opcjami bttv i kernela, z różnymi aplikacjami
i wciąż to samo. Pogooglałem i okazało się, że to najprawdopodobniej wina
sprzętu, najpewniej płyty głównej, która nie radzi sobie z dwoma transmisjami
DMA na raz (z karty TV i do kontrolera SCSI). Zamazywane są losowe fragmenty
pamięci jądra i właściwie powinienem się cieszyć, że na dysku mam jeszcze
jakieś dane, a nie już tylko śmieci (dobrze, że to ext3).

Wkurzyłem się trochę. Myślałem, że wreszcie mam porządną płytę główną,
a tu znowu jakiś feler wyskakuje. I to chyba nie do obejścia. Chociaż…
jeszcze wszystkich kombinacji nie sprawdziłem… z drugiej strony, żeby
sprawdzić z 32-bitowym kernelem, to znowu pół systemu musiałbym wywalić do
góry nogami… ech… może po prostu nigdy więcej składaków-PC?

Zabaw nowym sprzętem ciąg dalszy…

Mój nowy komputerek sprawuje się znakomicie. Wszystko działa, nic się nie
sypie. Nawet 3D wreszcie działa znakomicie (potestowałem trochę w Enemy
Territory). Coś mi się zdaje, że moje poprzednie problemy z kartami ATI
związane były z walniętą płytą główną. Zresztą, nie tylko to. Na nowej płycie
wreszcie prawidłowo działa nagrywanie z mikrofonu. Na starej ciężko było
złapać cokolwiek poza szumem i to niezależnie od tego, czy używałem wejścia
audio z samej płyty, czy z dodatkowej karty muzycznej.

Dzisiaj postanowiłem zrobić porządek z czytnikiem kart i urządzeniami USB,
bo ciężko byłoby się w tym połapać – czy mój pendrive wyląduje pod
/dev/sdb1, czy /dev/sdf1… Ale od czego mamy takie
wynalazki jak udev i hal. Zrobiłe upgrade
tych ustrojstw no najnowszych wersji z PLD, ale domyślne zachowanie mnie nie
zadowoliło – wszystkie karty, pendrive’y i aparat lądowały pod
/media/usbdisk*. Więc spłodziłem sobie taki oto plik
konfiguracyjny (/etc/hal/fdi/policy/10-local-storage-policy.fdi,
na podstawie analogicznego w /usr/share):

<?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
<deviceinfo version="0.2">
  <device>
    <match key="block.is_volume" bool="true">
      <match key="volume.fsusage" string="filesystem">
        <!-- skip for drives with the no partitions hint (they are handled somwhere else) -->
        <match key="@block.storage_device:storage.no_partitions_hint" bool="false">
          <merge key="volume.policy.should_mount" type="bool">true</merge>
          <match key="@block.storage_device:storage.drive_type" string="compact_flash">
                <merge key="volume.policy.desired_mount_point" type="string">cf</merge>
          </match>
          <match key="@block.storage_device:storage.drive_type" string="sd_mmc">
                <merge key="volume.policy.desired_mount_point" type="string">sd</merge>
          </match>
          <match key="@block.storage_device:storage.drive_type" string="smart_media">
                <merge key="volume.policy.desired_mount_point" type="string">sm</merge>
          </match>
          <match key="@block.storage_device:storage.drive_type" string="memory_stick">
                <merge key="volume.policy.desired_mount_point" type="string">ms</merge>
          </match>
          <match key="@block.storage_device:storage.model" contains="CAMERA">
                <merge key="volume.policy.desired_mount_point" type="string">camera</merge>
          </match>
        </match>
      </match>
    </match>
  </device>
</deviceinfo>

Teraz kartę CF mam pod /media/cf, aparat pod
/media/camera, a pendrive pod /media/usbdisk. Montuję
i odmontowuję to ręcznie, ale tu żadnej automatyki nie potrzebuję.

Kolejną sprawą którą chciałem załatwić, było zwolnienie obrotów
wentylatorów, gdy nie jest potrzebna ich pełna moc. Z Linuksa kontrolować mi się tego nie udało,
ale wystarczyło włączyć odpowiednią opcję w BIOSie, żeby to się robiło
samo. Niestety nie spowodowało to żadnego wyciszenia komputera –
prawie cały hałas produkuje zasilacz, a chwilami dysk. To już będzie trzeba
jakoś sprzętowo załatwić.

Kolejna sprawa to benchmarki. Przed zmianą sprzętu zrobiłem na starym
komputerze, teraz trzeba było spróbować na nowym. Już wczoraj je zrobiłem, ale
w systemie 32-bitowym. Dzisiaj jednak ciekawość już zżerała mnie na tyle, że
postanowiłem zrobić sobie bajzel w systemie i spróbować odpalić coś w 64 bitach…

Chciałem odpalić tylko nbench-byte w 64 bitach, ale do tego
potrzeba, jak do każdej innej 64-bitowej aplikacji, 64-bitowego kernela.
Zrobiłem więc backup obecnego i nadinstalowałem wersję amd64, wraz ze
wszystkimi używanymi dodatkowymi modułami. Wcześniej jeszcze wcisnąłem w
system 64-bitowe glibc. Wszystko z --ignorearch. Prawdę mówiąc
nie liczyłem na to, że to wystartuje, a nawet na to, że initrd się poprawnie
wygeneruje… Initrd się wygenerował, system wystartował. Tylko skrypt od
firewalla nie zadziałał, bo najwyraźniej 32-bitowe iptables z 64-bitowym
kernelem nie działają. Doinstalowałem 64-bitowe iptables (z
--ignorearch) i firewall też ruszył.

Zanim odpaliłem benchmarka, postanowiłem sprawdzić, czy sobie systemu
zbytnio nie rozwaliłem. Najbardziej obawiałem się o Xy, o to, czy 64-bitowy
sterownik ATI w kernelu dogada się z 32-bitowymi Xami. Nie dogadywał się –
Xy się niby odpaliły, ale ani nie wyglądały dobrze (przesunięty, migoczący obraz),
ani nie były stabilne (wszystko się sypło przy próbie przełączenia się na
konsolę). Wyłączenie VesaFB niewiele zmieniało. Trzeba było więc i Xserver
zainstalować w wersji 32-bitowej…

Miałem już trochę dość --ignorearch --replacepkgs, więc
postanowiłem zainstalować 64-bitowego Poldka z RPMem… Niestety jak
zainstalowałem 64-bitowego RPMa, to Poldek przestał działać. Skopiowałem
więc ręcznie wszystkie potrzebne binarki (poldek i biblioteki) z pewnego
64-bitowego serwera i już tak naprawionym poldkiem zainstalowałem to samo
z RPMów. --ignorearch --replacepkgs już więcej nie było
potrzebne, ale okazało się, że Poldek wcale sobie dobrze z mieszanym systemem (32/64
bit) najlepiej nie radzi. Jednak doświadczony PLDowiec jakoś nad tym
zapanuje. W każdym razie Xserver ze wszystkimi potrzebnymi modułami i
sterownikami udało się zainstalować. Cała reszta systemu pozostała 32-bitowa
(poza, oczywiście, bibliotekami, z których wiele mam teraz w obu wersjach). Co
więcej, Xy ruszyły i działają niegorzej niż w 32-bitach. :-)

Wszystko działa, więc mogłem zrobić te swoje benchmarki… Oto wyniki:

  1. hdparm -t -T

    To najprostszy test, którym można coś sprawdzić. Niby do
    dysku, ale pokazuje też przepustowość pamięci, jak i drobny wpływ
    innych części systemu na komunikację z dyskiem.

    Test przeprowadziłem po kilka razy, poniżej wkleiłem
    środkowy wynik.

    • Na starym kompie:
      /dev/sda:
       Timing buffer-cache reads:   808 MB in  2.00 seconds = 403.17 MB/sec
       Timing buffered disk reads:  148 MB in  3.03 seconds =  48.81 MB/sec
      
    • Na nowym, w 32-bitach:
      /dev/sda:
       Timing buffer-cache reads:   3364 MB in  2.00 seconds = 1681.89 MB/sec
       Timing buffered disk reads:  160 MB in  3.02 seconds =  52.91 MB/sec
      
    • Na nowym, w 64-bitach:
      /dev/sda:
       Timing cached reads:   3084 MB in  2.00 seconds = 1541.90 MB/sec
       Timing buffered disk reads:  158 MB in  3.02 seconds =  52.25 MB/sec
      

    Widać, że zmiana kompa spowodowała prawie czterokrotne
    przyspieszenie cache dysku, a także niewielkie przyspieszenie transferu
    z dysku. Jest z czego się cieszyć. :-)

    Niespodzianką jest odrobinę gorszy wynik w systemie 64-bitowym na
    tej samej maszynie, ale różnica ta raczej nie ma znaczenia.

  2. nbench-byte

    To pakiecik do benchmarków, jaki znalazłem w PLD. Coś on tam mądrego
    liczy i w ten sposób mierzy wydajność maszyny. Cokolwiek to jest, to do
    moich celów się nada. ;-)

    • Na starym kompie:
      CPU                 : AuthenticAMD AMD Athlon(tm) processor 1004MHz
      L2 Cache            : 256 KB
      OS                  : Linux 2.6.14.7-2
      C compiler          : i686-pld-linux-gcc
      MEMORY INDEX        : 5.565
      INTEGER INDEX       : 4.729
      FLOATING-POINT INDEX: 9.567
      
    • Na nowym kompie, w 32-bitach:
      CPU                 : AuthenticAMD AMD Athlon(tm) 64 Processor 3200+ 2011MHz
      L2 Cache            : 512 KB
      OS                  : Linux 2.6.14.7-5
      C compiler          : i686-pld-linux-gcc
      MEMORY INDEX        : 11.805
      INTEGER INDEX       : 10.001
      FLOATING-POINT INDEX: 20.263
      
    • Na nowym kompie, 32-bitowo, pod 64-bitowym kernelem:
      CPU                 : AuthenticAMD AMD Athlon(tm) 64 Processor 3200+ 2010MHz
      L2 Cache            : 512 KB
      OS                  : Linux 2.6.14.7-5
      C compiler          : i686-pld-linux-gcc
      MEMORY INDEX        : 12.047
      INTEGER INDEX       : 10.116
      FLOATING-POINT INDEX: 19.884
      
    • Na nowym kompie, 64-bitowo, pod 64-bitowym kernelem:
      CPU                 : AuthenticAMD AMD Athlon(tm) 64 Processor 3200+ 2010MHz
      L2 Cache            : 512 KB
      OS                  : Linux 2.6.14.7-5
      C compiler          : amd64-pld-linux-gcc
      MEMORY INDEX        : 13.785
      INTEGER INDEX       : 13.313
      FLOATING-POINT INDEX: 19.262
      

    Widać, że sama zmiana komputera przyspieszyła te testy
    mniej-więcej dwa razy. Uruchomienie 64-bitowego kernela
    poprawiło odrobinę memory index i integer index
    jednocześnie odrobinę psując floating-point index.
    Skompilowanie testów na 64 bity wyraźniej poprawia wydajność
    pamięci i liczb całkowitych, ale operacjom zmiennoprzecinkowym nie
    pomaga. Wniosek z tego taki, że jak komuś zależy na wydajności
    operacji zmiennoprzecinkowych, to 64 bity mu są co najmniej zbędne.
    W innych przypadkach można conieco zyskać (pewnie sporo więcej niż w
    powyższym teście, jeśli kod jest odpowiednio przygotowany), ale i w 32
    bitach Athlon 64 ma moc. Z drugiej strony, wydaje się od mojego
    starego Athlona szybszy o tyle, o ile ma szybszy zegar… mogłoby być
    lepiej. Jednak w normalnej pracy pewnie będzie lepiej – w
    przeciwieństwie do tego testu, w praktyce więcej się wykorzysta
    przepustowości pamięci i I/O.

Nowe zabawki

Postanowiliśmy sobie odświeżyć nieco sprzęt. Przez cały weekend
i poniedziałek oglądałem w sieci ceny i opisy sprzętu. We wtorek poszedłem do
sklepu Proline po płytę główną (A8N-E) i kartę grafiki (Sapphire Radeon X550
na PCI-Express). Resztę sprzętu, tj. procesor (Athlon 64 3200+), pamięć
(2* Kingston DDR 512MB 400MHz CL2.5) oraz taki panelik do obudowy z czytnikiem
kart i portami USB, zamówiłem na Allegro. Oczywiście od tej chwili nie mogłem
się doczekać przesyłek, ale liczyłem się z tym, że mogą dochodzić przez
tydzień… Żonka zamówiła sobie pamięć do laptopa.

Dzisiaj zadzwonił kurier Stolicy, a więc w sprawie paczki z procesorem
i pamięcią. Ja byłem w pracy, w Zabrzu, to odesłałem go do żonki, która
pracuje kilkaset metrów od domu. Niewiele później żonka doniosła, że odebrała
paczkę. Chwilę później, że jeszcze jedną – z pamięcią do jej laptopa.
Czyli pozostała tylko paczka z panelikiem, ale mało mnie to obchodziło, bo
reszta by mi wystarczyła do złożenia komputera.

W domku najpierw zrobiłem zaległy upgrade tropka (wiąże się to
z odłączeniem sieci, więc mogłem to zrobić tylko wtedy, gdy żonki nie ma),
a zaraz potem zabrałem się za rozbebeszanie kompa. W międzyczasie przyszedł
paczkonosz z Poczty Polskiej z panelikiem. A więc wszystkie zamówione w tym
tygodniu manele przyszły jednego dnia. 🙂

Komputerek udało się złożyć bez większych problemów, Linux wystartował,
jednak parę rzeczy na początku nie działało. Pierwsze: USB. Winną okazała się
opcja acpi=off w parametrach kernela – bez ACPI kontroler
USB nie miał przydzielonego IRQ. Drugie: karta dźwiękowa. Uaktualniłem
modprobe.conf i Linux widzi kartę… tyle, że nic nie
słychać, mimo wyłączenia wyciszenia w mikserze. Tym pobawię się później…

No i, oczywiście (może nie tak całkiem), nie zadziałała grafika. Ani
framebuffer, ani Xy. Sterownik radeon z X.org stwierdził, że nie zna
takiej karty. Znał jednak inne na podobnych kościach. Wymusiłem więc
ChipId 0x5b60 i ruszyło. Oczywiście tylko 2D, ale starczy.
Szkoda, że modułu radeonfb nie można (nie umiem?)
podobnie oszukać…

2D mi w zasadzie wystarcza… ale 3D też dobrze byłoby mieć. Więc
wypróbowałem też te paskudne (bo zamknięte) sterowniki od ATI. Po
zainstalowaniu ruszyły od kopa – nic nie musiałem ruszać w konfiguracji
– ruszyło na konfigu z moich prób ze starszymi Radeonami. Więc
mam działającą akcelerację 3D, a jednocześnie, przy normalnej pracy (2D) nie
jestem ograniczony zamkniętymi sterownikami. Niestety, na razie lepiej być nie
może.

Reszta wydaje się działać ok. Sieciówka (Gigabit Ethernet) ruszyła od
razu. Czytnik kart jest widoczny jako kilka urządzeń usb-storage odkąd
naprawiłem USB. Zegar procesora udało mi się zwalniać i przyspieszać za
pomocą cpufreq, czy idzie za tym zmiana prędkości wentylatora dowiem
się dopiero po tym jak dziecko poszło spać (wcześniej było za głośno)…

Na razie system działa 32-bitowego. Kiedyś pewnie zrobię upgrade całości
do 64-bitów, ale na razie nie chcę sobie psuć systemu. Zaraz zabiorę się za
benchmarki – wczoraj zrobiłem kilka na starym kompie i jestem ciekawy
jak wypadnie porównanie. Na oko jest trochę szybciej…