środa, 21 kwietnia 2010

WiiLTB - budujemy kernel

Zgodnie z wcześniejszymi postami moje Wii zyskało nową funkcjonalność. Debian postawiony na konsoli działa bardzo dobrze z jednym wyjątkiem - dysk usb przesadnie często się wyłącza w przypadku bezczynności i nie chce ponownie załączyć (urządzenie znika z /dev, ale nadal widoczne w lsusb). Zacząłem się zastanawiać nad opcjami kompilacji jądra pobranego z http://wiibrew.org/wiki/Wii_Linux, lsmod wskazywało brak wykorzystania modułów. Sprawdzenie zawartości /sys/bus/usb/devices/x-y/, gdzie x-y to pozycja urządzenia na szynie usb np odczytana z lsusb, nie ma katalogu power - opcje kernela zarządzania energią nie są włączone. Natknąłem się też na informację, że ohci może sprawiać problemy więc nie pozostało mi nic innego jak zbudować własny kernel.

Potrzebujemy:

Gdy mamy już wszystkie składniki musimy je gdzieś wypakować, np do ~/wii/. Następnie aplikujemy łatki na źródła jądra (zakładam że zawartość archiwum z łatkami wrzuciliśmy do katalogu ze źródłami kernela).
cd ~/wii/linux-2.6.32
patch -p1 < mikep5-patch-2.6.32-gc



Teraz dodajemy cross-compiler do ścieżki
export PATH=$PATH:/home/MOJ_UZYTKOWNIK/wii/cross-powerpc-linux-uclibc/usr/bin
Kolejnym krokiem jest skopiowanie domyślnej konfiguracji jądra
cp arch/powerpc/configs/wii_defconfig .config
i jego edycja
make ARCH=powerpc CROSS32_COMPILE=powerpc-linux- menuconfig
. Osobiście włączyłem opcje oszczędzania energii i wyłączyłem obsługę OHCI żeby pozbyć się dalszych problemów z USB (oczywiście EHCI pozostała zaznaczona), pozbyłem się też wsparcia dla IOS - i tak korzystam wyłącznie z MIKE (bootmii). Używam wyświetlacza PAL więc wypadałoby poinformować o tym fakcie kernel - na wszelki wypadek. Edytujemy
nano arch/powerpc/boot/dts/wii.dts
zgodnie z tym jakie argumenty chcemy przekazać do kernela. Zapewnienie wyświetlania w trybie PAL, a nie domyślnym NTSC ogranicza się do podmiany w wierszu 36, np
bootargs = "nobats root=/dev/mmcblk0p2 rootwait force_keyboard_port=4 video=gcnfb:60Hz,tv=PAL";
Ostatnią rzeczą jest sama kompilacja
make ARCH=powerpc CROSS32_COMPILE=powerpc-linux- CROSS_COMPILE=powerpc-linux- zImage
po czym wynik naszych radosnych poczynań możemy znaleźć w katalogu /arch/powerpc/boot - plik zImage :). Jeśli o czymś zapomniałem - poproszę o info.

piątek, 16 kwietnia 2010

WiiLTB czyli Wii Linux Torrent Box Part 2

Pora na ciąg dalszy niekończącej się przygody. Ten odcinek zaczniemy od utworzenia konta użytkownika

useradd -d /home/username -s /bin/bash -c "Name FamilyName" username

następnie

mkdir /home/username && chown username /home/username && passwd username

gdzie 'username' zastępujemy naszą nazwą, na końcu zostaniemy poproszeni o wprowadzenie hasła użytkownika, od tej chwili możemy korzystać z nowego lśniącego konta.

Wypadałoby mieć troche przestrzeni dyskowej - może to być większy pendrive lub dysk usb. Po podłączeniu do konsoli wypadałoby sprawdzić czy pojawił się w /dev

ls /dev | grep sda

możemy sprawdzić w jak oznaczony jest dysk sprawdzając dowiązanie w /dev/disk/by-label

ls -l /dev/disk/by-label

z wyniku powyższej komendy wiemy jakie urządzenie odpowiada dyskowi o naszej nazwie .. niech to będzie np sda1. Wypadałoby przygotować katalog do montowania

mkdir /media/disk

i spróbować zamontować go

mount -t vfat /dev/sda1 /media/disk

zakładając, że format plików to fat32. Dla Ntfs będzie analogicznie, z tym że należy zmienić typ systemu plików na ntfs czy ntfs-3g. Udało się zamontować dysk, bomba. Chcielibyśmy żeby montował się automatycznie przy starcie systemu, edytujemy plik /etc/fstab. Dodanie wpisu

/dev/sda1 /media/disk vfat user,owner,defaults,umask=000 0 0

powinno załatwić sprawę. Wypadałoby zrobić mały restarcik i sprawdzić czy dysk został zamontowany zgodnie z oczekiwaniami.

Następnie pobieramy rtorrenta

apt-get install rtorrent

i screen

apt-get install screen

Teraz logujemy się jako utworzony użytkownik, zgodnie z tutorialem konfigurujemy rtorrenta w zależności od naszych potrzeb. Jeśli chcemy zapisywać dane na zewnętrzny napęd (np pendrive) to zmieniamy ścieżki zapisu z katalogu domowego na /media/disk.

Następnie chcemy utworzyć sesję, która będzie aktywna po zerwaniu połączenia ssh, używamy do tego zainstalowanego wcześniej screen. Kolejno
- zakładamy sesję o nazwie rtorrent
screen -dmS rtorrent
- przeglądamy otwarte sesje screen
screen -ls
- dołączamy się do istniejącej sesji
screen -r rtorrent
- włączmy rtorrenta
rtorrent
- opuszczamy sesję nie zamykając jej
Ctr-a d

W ten sposób postawiliśmy na starym dobry Wii Whiite Linux - Debiana Lenny z obsługą wbudowanego modułu wifi działającego jako klient sieci torrent z dostępem przez ssh.
Zasadniczą zaletą w porównaniu z użyciem np starego pc-ta jest niewielki pobór energii
wynoszący zgodnie ze specyfikacją około 17W :).

WiiLTB czyli Wii Linux Torrent Box Part 1

W ramach oderwania od rzeczywistości postanowiłem pobawić się starą dobrą konsolą.. co by tu w niej zepsuć? Aktualnie potrzebuję obrazu Ubuntu w wersji serwerowej i w kółko nie mogę jej pobrać .. w dzień jest robota, a w nocy nie wyrobiłbym szumu mojego komputerka ... więc może Wii pobrałoby ten obraz dla mnie?
Zaznaczam, że nie odpowiadam za żadne straty, uszkodzenia, problemy powstałe w wyniku lektury tego tekstu, jeśli chcesz coś zrobić - robisz to na własną odpowiedzialność.

Niestety nie posiadam adaptera ethernet dla konsolki więc jestem zdany na wbudowane wifi. Wersje Linux-a dla Wii przez długi czas nie obsługiwały wifi, zmieniło się to dopiero po udostępnieniu przez Team Twizzlers MIKE (dla zainteresowanych google ;). Kernel wykorzystujący MIKE a nie IOS umożliwia działanie wbudowanego modułu pod Linuxem i o to właśnie nam chodzi :). Uruchomienie jądra z wykorzystaniem MIKE, a nie IOS wymusza uruchomianie z poziomu Bootmii (gui lub autostart).

Będziemy stawiać whiite-linuxa WIKI więc zgodnie z linkiem musimy pobrać paczki:

http://downloads.sf.net/gc-linux/gc-linux-mikep5-v2.6.32%2Bwhiite-1.10.tar.bz2
http://downloads.sf.net/gc-linux/debian-lenny-5.0%2Bwhiite-1.10.tar.bz2

Zgodnie z opisem WIKI whiite-linuxa przygotowujemy kartę SD - dzielimy na partycje boot i root, odpowiednio fat16 i ext3. Zamiast walczyć w terminalu zawsze można użyć graficznego programu jak GParted
sudo apt-get install gparted
.
Po utworzeniu partycji rozpakowujemy zawartość pobranych paczek na kartę pamięci tak jak to jest opisane na wiki. Gdy wszystko jest już prawie gotowe radziłbym skopiować kernel MIKEp5 z katalogu bootmii karty SD do apps/mikep5.110. Przeglądając zawartość karty SD w GUI bootmii nie uraczymy tego katalogu, a chcemy odpalić kernel znajdujący się właśnie w nim, stąd to kopiowanie. Zanim radośnie uruchomimy naszego linuxa wypadałoby go jeszcze skonfigurować.

Konfiguracja wifi ogranicza się do edycji pliku /etc/network/interfaces , w który dla statycznego ip i wpa2 przyjmie postać

auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet static
wpa-ssid MOJE-SSID
wpa-psk MOJE-HASLO
wpa-key-mgmt WPA-PSK
wpa-pairwise TKIP CCMP
wpa-group TKIP CCMP
wpa-proto WPA RSN
wpa-ap-scan 1
wpa-scan-ssid 1
address MOJE-STATYCZNE-IP
netmask 255.255.255.0
gateway MOJ-ADRES-IP-BRAMY

Oczywiście pola w stylu MOJE-SSID wymagają edycji, co oczywiście nie stanowi problemu. Maska sieci w większości jest taka jak podana, adres ip bramy to nic innego jak adres ip routera czy innej bramy naszej sieci.

Jeśli chcemy mieć sprawne dns-y wypadałoby jeszcze zmienić zawartość pliku /etc/resolv.conf

nameserver 192.168.0.1

gdzie nameserver to adres bramy domyślnej lub np serwery OpenDNS

nameserver 208.67.222.222
nameserver 208.67.220.220

Teraz mamy już Debiana Lenny przygotowanego do jazdy próbnej. Po uruchomieniu w bootmii GUI obrazu jądra zostaniemy radośnie zalani potokiem komunikatów .. jeśli nie dojdziemy do etapu logowania w terminalu to na 90% udało się odpalić nie ten kernel (boot.elf z apps/mikep5.110 korzysta z IOS i ma inną ścieżkę dostępu do root więc kernel nie znajdzie go, próba uruchomienia zakończy się niepowodzeniem).

Po uruchomieniu właściwego obrazu jądra i założeniu, że skonfigurowaliśmy wifi jak należy Debian poprosi nas o logowanie ... którego dokonamy przez ssh.

ssh root@IP_KONSOLI

oczywiście 'IP_KONSOLI' zastępujemy naszą wartością. Teraz należy podać hasło 'whiite' i .. je zmienić

passwd root

bo przecież niefajnie mieć domyślne hasło na koncie root ...

Wypadałoby odświeżyć repozytoria i zaktualizować stare pakiety, podobnie jak w bazującym na Debianie Ubuntu możemy posłużyć się apt (a to niespodzianka .. w końcu postawiliśmy na Wii właśnie Debiana)..

apt-get update
apt-get upgrade

jeśli pierwsza z komend informuje o niemożliwości znalezienia serwera .. to znaczy że ktoś tu pominął edycję /etc/resolv.conf ... oczywiście możemy to zrobić przez ssh

nano /etc/resolv.conf

Dobra, repozytoria odświeżone, pakiety zaktualizowane.. ciąg dalszy w części drugiej.

środa, 14 kwietnia 2010

Matlab zapis wykresu do pliku

Często zdarza się, że potrzebuję wygenerować i zapisać wiele wykresów w Matlabie. Najprostsze rozwiązanie w postaci plot(dane) + ręczny wybór zapisu do pliku oczywiście odpada. Istnieje kilka rozwiązań problemu, a ja zamieszczę tylko jedno, na mój gust najfajniejsze. Mianowicie zaczynamy od utworzenia obiektu figure ..

h = figure;

który ewentualnie możemy ukryć

set(h, 'Visible', 'off');

następnie generujemy wykres, w podstawowej postaci np

plot(dane);

dodajemy ewentualnie tytuł wykresu oraz opisy osi

title('Moj wykres');
xlabel('czas [s]');
ylabel('predkosc [m/s]');

teraz najważniejsza część czyli sam zapis do pliku. Zamiast imwrite użyjemy funkcji print

print(h, '-dpng', 'moj_wykres.png');

wypadałoby jeszcze posprzątać

delete(h)

Oczywiście mamy do dyspozycji inne formaty zapisu plików i oczywiście faktyczny wydruk z użyciem drukarki. Polecam

help print

sobota, 10 kwietnia 2010

Adobe AIR + Linux 64 bit

Potrzebowałem środowisko Adobe AIR na moim Ubuntu Lucid, oczywiście pobrałem stosowny instalator ze strony Adobe i wykonałem instalację. Niby wszystko przebiegło bez błędów, ale próba uruchomienia czegokolwiek skutkowała komunikatem

Error loading the runtime (libadobecertstore.so: cannot open shared object file: No such file or directory)

Lekiem okazało się wykonanie dowiązania biblioteki do lib32.

sudo ln -s /usr/lib/libadobecertstore.so /usr/lib32/libadobecertstore.so

piątek, 9 kwietnia 2010

Moodle 1.9.8 i PHP 5.3.0

Aktualizacja PHP do 5.3 skutkuje błędem formularzy moodli w wersjach starszych niż 2.0

Deprecated: Assigning the return value of new by reference is deprecated in /usr/share/moodle/course/modedit.php on line

więcej informacji pod adresem
http://tracker.moodle.org/browse/MDL-20055

Jedynym sensownym rozwiązaniem jest powrót do PHP < 5.3.0. :(