Uruchamianie OpenWrt z karty SD

Istnieje możliwość odpalenia systemu bezpośrednio z karty SD poprzez doprowadzenie do takiej sytuacji, że ruter będzie widział pliki systemowe umieszczone na naszej karcie a nie w jego pamięci. Umożliwi to nam w łatwy sposób uruchamianie systemu w różnej konfiguracji. Wystarczy tylko wyłączyć ruter, zmienić kartę SD i po odpaleniu uruchomione zostaną wszystkie procesy wcześniej ustawione na tej karcie. Oczywiście będzie możliwość odpalenia sprzętu bez karty - system zostanie odpalony w standardowy sposób z własnej pamięci. Cały opis opierać się będzie na nowym sterowniku obsługujący szybkie karty SDHC.

Wystarczy zainstalować moduł:

  opkg update
  opkg install kmod-broadcom-sdhc

W zależności od tego jaki format plików ma nasza karta będzie obsługiwać niezbędny jest także moduł do obsługi tego rodzaju systemu. Przykładowo, gdy nasza karta SD będzie w systemie ext2 instalacja samego modułu sprowadzać się będzie do wpisania w konsoli dwóch instrukcji:

  opkg install kmod-fs-ext2

Musimy mieć pewność, że mamy odpowiedni moduł w systemie gdyż w innym wypadku nie będziemy mogli czytać z pamięci SD.

Kolejnym krokiem będzie skopiowanie całej zawartości pamięci naszego rutera na kartę SD. Należy pamiętać by karta była sformatowana! Najpierw musimy uruchomić i podmontować naszą kartę do katalogu /sdcard tak, by system widział ją i żebyśmy mogli zrobić kopię systemu. Należy odpowiednio wyedytować plik konfiguracyjny wcześniej ściągniętej paczki do obsługi SDHC

   vim /etc/sdcard.conf

tutaj w zależności od rodzaju modyfikacji naszego sprzętu należy zdefiniować sposób połączenia karty do GPIO. W przypadku mojego urządzenia Linksys WRT54GL jest to

   mountpoint=/sdcard
   cs=7
   clk=3
   din=2
   dout=4
   dbg=1 //domyślnie wartość 0 ale zauważyłem że z nią nie chce się poprawnie uruchomić skrypt

następnie wydać polecenie

   /etc/init.d/sdcard start

W wypadku poprawnej konfiguracji karta zostanie wykryta i podpięta do katalogu /sdcard. Teraz należy tylko skopiować całą zawartość pamięci rutera na kartę SD wykonując następujące komendy

   mkdir /tmp/root
   mount -o bind /rom /tmp/root
   mount -o bind / /tmp/root
   cp /tmp/root/* /sdcard -a

Po kilku minutach cała zawartość znajdzie się na naszej karcie SD. W tym momencie właśnie utworzyliśmy swego rodzaju „punkt przywracania systemu”. Gdyż gdy system odpalimy bez karty SD w czytniku to ruter zostanie uruchomiony na ustawieniach z tej chwili. Warto więc skonfigurować system do takiego momentu gdzie będzie działał poprawnie w naszej sieci bez dodatkowych wodotrysków a dopiero potem skopiować zawartość na kartę SD. Uchroni nas to od dodatkowej straty czasu gdy awaryjnie coś będziemy chcieli zrobić bez karty SD.

Teraz trzeba się zabrać za odpowiednie zmodyfikowanie systemu tak, by zaraz po odpaleniu zainicjował komendy nakładające naszą kartę pod główny katalog. Najpierw należy skasować dowiązanie bezpośrednie do pliku busybox-a bo w tym momencie wstawimy nasz skrypt a dopiero później uruchomimy samego busyboxa (już z naszej zamontowanej karty SD)

   rm /sbin/init

Kolejny krok to utworzenie tego pliku

   vim /sbin/init

i dodanie serca całej modyfikacji czyli małego skryptu

   #!/bin/sh
   echo "0x9c" > /proc/diag/gpiomask
   insmod sdhcd clk=3 din=2 dout=4 cs=7 major=0 maxsec=32 rahead=2 dbg=1
   #ustawienia wyprowadzen GPIO dla nowego sterownika sdhc tak jak w pliku konfiguracyjnym
   insmod ext2 #jak mamy inny na SD to zmienić
   boot_dev="/dev/sdcard/part1"
   
   sleep 10s
   mount "$boot_dev" /sdcard
   [ -x /sdcard/sbin/init ] && {
   mount -o move /proc /sdcard/proc && \
   pivot_root /sdcard /sdcard/sdcard && {
   mount -o move /sdcard/dev /dev
   mount -o move /sdcard/tmp /tmp
   mount -o move /sdcard/jffs2 /jffs2 2>&-
   mount -o move /sdcard/sys /sys 2>&-
   }
   }
   exec /bin/busybox init

Ostatnią już rzeczą będzie ustawienie uprawnień na nasz nowy plik z możliwością uruchamiania czyli

   chmod a+x /sbin/init

Po wszystkim należy już tylko zresetować ruter

   reboot

i cieszyć się kilku GB pamięcią naszego rutera na wszelkiego rodzaju pakiety i inne pliki systemowe.

zastosowania/sd_boot.txt · ostatnio zmienione: 2010/11/17 10:34 przez arteq
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0
Profesjonalny Hosting