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.
