boot'owanie IGEP'a po LAN'ie (jajko za pomocą tftp, rootfs z nfs)
nazgee — śr., 04/14/2010 - 10:56
Rozwijanie oprogramowania jest o niebo łatwiejsze gdy ze stacji roboczej mamy bezpośredni dostęp do docelowego rootfs'a. Najprostszym i najwygodniejszym sposobem uzyskania takiej konfiguracji jest zamontowanie systemu plików na rozwijanej platformie jako NFS. Pozwala to na łatwą podmianę/edycję plików bezpośrednio ze stacji roboczej i umożliwia natychmiastowe testowanie rezultatów na platformie.
Żeby zmusić IGEPa do bootowania się po sieci (czyli korzystania z systemu plików i jądra przechowywanych lokalnie na PC) niezbędna jest konfiguarcji serwera TFP i NFS.
- Punktem wyjścia jest struktura katalogów do przechowywania róznych wersji jądra i sytrybucji systemu plików. Wygodnym rozwiązaniem jest stowrzenie drzewa w folderze domowym, a następnie podlinkowanie go pod folder /srv
- Zainstaluj tftp oraz nfs-kernel-server.
- Ustawienia network file system'u znajduje się w /etc/exports. Plik ten należy przeedytować tak, aby IGEP mógł odnaleźć swój root file system w drzewie stworzonym krok wcześniej
- W trakcie boot'owania IGEPa U-boot będzie starał się załadować plik uImage korzystając z protokołu TFTP (trivial file transfer protocole). uImage to zwyĸły obraz zImage, z dodatkowym prologiem, uławiającym U-bootowi załadowanie go. Serwer TFTP jest uruchamiany przez demonainetd za każdym razem gdy odebrane zostanie takie żądanie. Należy zmodyfikować plik konfiguracyjny inetd.conf tak, żeby uzyskać coś na kształt:
- Należy pamiętać aby zmodyfikować zmienne środowiskowe IGEPa tak, żeby wskazywały właściwą strukturę katakogów i adres IP serwera
- Ostatnim krokiem jest ponown uruchomienie nowych usług (wczytane zostaną wtedy nowe pliki konfiguracyjne)
android@android:~$ mkdir ~/srv/tftp/angstrom/X11/igep0020b -p
android@android:~$ mkdir ~/srv/nfs/angstrom/X11/igep0020b -p
android@android:/srv$ sudo ln -s ~/srv/tftp/ /srv/
android@android:/srv$ sudo ln -s ~/srv/nfs/ /srv/
android@android:~$ ls /srv
cvs nfs tftp
android@android:~$ sudo apt-get install nfs-kernel-server
...
android@android:~$ sudo apt-get install tftpd
....
android@android:~$ sudo gedit /etc/exports
[sudo] password for android:
android@android:~$ cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
# IGEP rootFS for Angstrom X11 image. Assuming IGEP ipaddr=192.168.1.69
# use '*' instead of '192.168.1.69' if you wish to allow connections regardles of IP address
/srv/nfs/angstrom/X11/igep0020b 192.168.1.69(rw,sync,no_subtree_check)
android@android:~$
android@android:~$ sudo gedit /etc/inetd.conf
android@android:~$ sudo cat /etc/inetd.conf
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /srv/tftp
U-Boot # setenv ipaddr '192.168.1.69'
U-Boot # setenv serverip '192.168.1.11'
U-Boot # setenv project 'X11'
U-Boot # setenv distro 'angstrom'
U-Boot # saveenv
Saving Environment to OneNAND...
OneNAND: Saved environment to 0x00001000
android@android:/srv$ sudo inetd
android@android:/srv$ sudo exportfs -a
Jeśli wszystko poszło jak należy, podczas następnego uruchomienia IGEP powinien uruchomić się montując NFS zamiast JFFS2.
Przed jakimikolwiek testami warto umieścić odpowiednie pliki tam gdzie ich miejsce:
android@android:~$ cp /workspace/oe/build/tmp-igep0020/work/igep0020-angstrom-linux-gnueabi/linux-igep2-2.6.28.10-0-r51/linux-omap-2.6.28.10-igep0020b-0/arch/arm/boot/uImage /srv/tftp/angstrom/X11/igep0020b/
android@android:~$ cd /srv/nfs/angstrom/X11/igep0020b
android@android:/srv/nfs/angstrom/X11/igep0020b$ sudo tar -jxf /workspace/oe/build/tmp-igep0020/deploy/glibc/images/igep0020/x11-image-igep0020.tar.bz2
