Spark:U-Boot

Aus TuxBoxWIKI
Version vom 5. Mai 2012, 09:50 Uhr von Tijuca (Diskussion | Beiträge) (Einleitung angepasst, Textformatierungen)
Wechseln zu: Navigation, Suche


Review-KandidatDieser Artikel befindet sich derzeit im Reviewprozess. Hilf mit, ihn zu verbessern! Falls du bei weiteren Artikeln helfen willst, findest du hier eine Auswahl offener Artikel.

Die Fulan Spark basierenden Settopboxen benutzen als Bootloader das U-Boot. Dadurch ist die Benutzung des Bootloaders sehr flexibel. Das verwendete U-Boot hat sehr viele Funktionen, unter anderem eine Update Funktion direkt im Bootloader wodurch ein Recovery oder Update des Flashinhalts mit einem speziell präparierten USB Sticks möglich ist. Ebenso kann man das GUI System auswählen welches gestartet werden soll, entweder die Original Spark GUI oder das ebenfalls integrierte Enigma2.

Zugang zum U-Boot

Die Konsole vom U-Boot erreicht man über die serielle Sub-D9 Schnittstelle. Die Kommunikationsgeschwindigkeit beträgt 115200 8N1. Die Verbindung zum PC muss mit einem Nullmodemkabel erfolgen.

Umstellen der Bootreihenfolge auf 'USB Stick vor Flash'

Damit man von einem USB Stick z.B. einen Kernel starten kann muss man die Bootreihenfolge im U-Boot umstellen. In der default Einstellung (Auslieferungszustand) startet U-Boot einen Kernel aus dem Flash.
Der Trick besteht nun darin die U-Boot Einstellungen so zu verändern das zuerst auf einem USB Gerät nach einem Kernel gesucht wird und, wenn dort keiner gefunden wird, dann einen Fallback auf den Kernel im Flash zu machen.

U-Boot Start unterbrechen

Wenn die Box erfolgreich mit einem Terminalprogram verbunden worden ist ist der Startvorgang im Terminal zu sehen und kann entweder mit der Tastatur im Terminalfenster oder mit den Fronttasten beeinflusst werden. Nachdem die Box eingeschaltet ist muss zunächst der normale Bootvorgang unterbrochen werden. Die ist möglich durch Betätigen von ESC im Terminal oder durch die Taste MENU an der Box.

Board: STx7111-Mboard (MB618)  [32-bit mode]
info: Disregarding any EPLD


U-Boot 1.3.1-g057e7c28 (Oct 21 2011 - 09:58:11) - stm23_0043 - YW 1.0.021 Rel

DRAM:  128 MiB
NOR:     8 MiB
NAND:  512 MiB
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
IdentID : 09 00 08 00 00 3a 94
Hit ESC to stop autoboot:  0    # <--- hier hat man 3 Sekunden Zeit zum Unterbrechen

     do_update auto_update_flag=0

*******************************************

       Update Menu V2.0

0. Update Uboot  : Please press '0' or FP 'UP'
1. Update Kernel  : Please press '1' or FP 'DOWN'
2. Update RootFS  : Please press '2' or FP 'LEFT'
3. Exit menu     : please press '3' or ESC or FP 'MENU'
4. boot          : Please press '4' or 'B' or FP 'OK'
5. Reset         : Please press '5' or 'R' or FP 'POWER'
6. Loader        : Please press '6' or 'L' or FP 'RIGHT'

*******************************************

     Please enter your choice :

U-Boot startet daraufhin das "Update Menü". Dieses muss beendet werden um auf die eigentliche U-Boot Konsole gelangen zu können. Die geschieht entweder durch Eingabe von 3 im Terminal oder durch die Taste MENU an der Box.

     Please enter your choice : ESC    # Abbruch des Update Menüs

     you had pressed ESC to exit update menu. 

     you can recall this menu by using 'update' command. 

MB618>

Bootreihenfolge anpassen

U-Boot benutzt die Variable ${bootcmd} um das System zu starten. Daher wird diese zunächst in eine neue Variable kopiert.

MB618> setenv bootcmd_fromflash ${bootcmd}
MB618> saveenv

Danach kann man ${bootcmd} mit neuen Parametern überschreiben.

MB618> setenv bootcmd usb start\;fatload usb 0 81000000 script.img\;autoscr 81000000\;run bootcmd_fromflash

Bevor man das veränderte Bootenviroment abspeichert ist zu prüfen ob der Bootvorgang nun wie gewollt funktioniert. Zunächst ohne USB Stick! Schließlich soll die Box bei nicht eingesteckten Stick aus dem internen Flash booten. Also nun erst einmal die Box booten.

MB618> boot

Die Box muss nun genauso starten wie ohne die Modifikation! Da die Veränderung von ${bootcmd} im U-Boot noch nicht abgespeichert waren sind diese beim Ausschalten der Box wieder unwirksam. Bis jetzt ist nur die neu angelegte Variable ${bootcmd_fromflash} angelegt und abgespeichert worden.
War der Bootvorgang erfolgreich dann wiederholt man den obigen Schritt ab dem Setzen der neuen Variable ${bootcmd} (also ab setenv bootcmd ..., jedoch ohne zu speichern!) nun aber mit dem vorbereiteten Stick. Startet die Box nun erfolgreich vom USB Stick können die Veränderungen des U-Boot Enviroment ein drittes Mal wiederholt werden und vor dem Bootkommando mit saveenv abgespeichert werden. Hier nochmal die kompletten Eingaben für diesen letzten finalen Schritt.

MB618> setenv bootcmd usb start\;fatload usb 0 81000000 script.img\;autoscr 81000000\;run bootcmd_fromflash
MB618> saveenv
MB618> boot

Danach ist die Bootreihenfolge permanent umgestellt, so das U-Boot immer versucht ein System von einem USB Stick aus zu starten. Eine serielle Konsole wird nicht weiter benötigt.