FREIHEIT FÜR HASEN

Werde Root auf Deinem Hasen

Diese Seite enthält das große Geheimnis, das „wie“, den Weg zum “#“… Aber fangen wir langsam an. Du hast also Drähte an Deinen Hasen gelötet, kannst den Bootvorgang auf der seriellen Konsole verfolgen und bist nun Willens, das Root-Prompt zu bekommen. Bitteschön!

Vorab ein paar Worte zum Bootvorgang: Beim Einschalten lädt der Hase sein BIOS, das BIOS wiederum lädt den Kernel und der Kernel moutet das RootFS und startet anschließend das Skript /linuxrc. Dieses wiederum ruft am Ende /sbin/init auf, welches, weil busybox, die /etc/inittab abarbeitet. In dieser werden dann /karotz/scripts/karotz_init.sh und /usr/yaffs_start.sh gestartet. Also:

  • BIOS
  • Kernel
  • /linuxrc
  • /sbin/init → /etc/inittab
  • /karotz/scripts/karotz_init.sh
  • /usr/yaffs_start.sh

Da müssen wir irgendwo dazwischen. Da wir aber im Moment noch überhaupt keine Möglichkeit haben, irgendwo, irgendwas einzutippen, müssen wir uns zuerst einmal ein Prompt besorgen. Ich habe einige Zeit gebraucht und diverse Möglichkeiten ausprobiert, bis mir die naheliegendste ein-/aufgefallen ist. Was macht man beim ersten Start nach einem Debian Debootstrap? Röchtööch! Man hängt an die Kernel Commandline ein init=/bin/sh an. Und genau das, so einfach das auch klingen mag, ist auch hier die Lösung!

Also, serielle Verbindung herstellen, den Hasen einschalten und im richtigen Moment ENTER drücken

************************************************************* 
*                                                           *
* Rabbit V3 - ( BIOS v1.16 )                                *
*                                                           *
*                                                           *
* PRAGMATEC/Point Core                                      *
 ************************************************************
FCLK=405MHz, HCLK=135MHz, PCLK=67MHz, CPU is running at 405MHz

Press ENTER to stop the autoboot

Wie gehabt erscheint das Bootmenü:

Please select function : 
0 : Uart download file
1 : Write Nand flash with download file
2 : Load Pragram from Nand flash and run
3 : Erase Nand flash regions
4 : Test NAND flash
5 : Restore default partitions
6 : Set boot params

Und wieder gilt hier: vorsichtig arbeiten ;-) Mit 6 <ENTER> gelangt man wieder in das Menü für benutzerdefinierte Kernelparameter:

Config parameters
[0] : bootpara is 0x00000001 (1)
[1] : cpuclk is 0x00000002 (2)
[2] : AUTORUN is 0x00000000 (0)
[3] : serial is 0x00000000 (0)
[4] : baudrate is 0x0001c200 (115200)
[5] : machine is 0x00000778 (1912)
[6] : runAddr is 0x30200000 (807403520)
[7] : rootfs is 0x00000000 (0)
[8] : tty is 0x00000004 (4)
[9] : initrdA is 0x31800000 (830472192)
[10] : initrdL is 0x00500000 (5242880)
[11] : memsize is 0x04000000 (67108864)
[12] : devfs is 0x00000000 (0)
[13] : ostore is 0x00000000 (0)
[14] : userpara is 0x00000016 (22)
[15] : Exit

Wir geben dem Kernel nun über den Punkt 14 „userpara“ noch einen zusätzlichen Parameter mit, nämlich das oben erwähnte init=/bin/sh. Man hängt das einfach an den bereits hinzugefügten Parameter console an: console=ttySAC0,115200 init=/bin/sh. Anschließend sollte da stehen [14] : userpara is 0x00000023 (35)

Kurzfassung:

  * Bootvorgang mit <ENTER> abbrechen
  * 6 <ENTER>
  * 14 <ENTER>
  * console=ttySAC0,115200 init=/bin/sh<ENTER>
  * 15 <ENTER>
  * y <ENTER>
  * 2 <ENTER>

Nun solltest wieder der Bootprozess vor Deinem Auge ablaufen und abrupt mit einem # enden:

Set boot params = ... root=/dev/ram rw init=/linuxrc console=ttySAC0,115200 init=/bin/sh ...
Load Kernel...
Load Ramdisk...
Uncompressing Linux..............................
.................................................
.................................................
....................... done, booting the kernel.
Linux version 2.6.28-pragmatec -g5122909-dirty (guillaume@guillaume-desktop) (gcc version 3.4.1) #1 ...
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177
CPU: VIVT data cache, VIVT instruction cache
Machine: RABBITV3 BY PRAGMATEC
...
...
# 

Juchu! Du hast eine Konsole! So richtig viel können kann der Hase so aber noch nicht, weil wir ja den eigentlichen Bootprozess überhaupt nicht ausgeführt haben. Daher sind noch ein paar weitere Schritte nötig, um einen funktionierenden, gerooteten Hasen zu erhalten. Als Erstes führen wir die /linuxrc mit Ausnahme der letzten Zeile aus. Dazu gibt es drei Möglichkeiten:

  • Du tippst die einzelnen Zeilen ab und schaust jeweils, was passiert
  • Du machst ein # cat /linuxrc kopierst Dir die Ausgabe ins Clipboard und fügst Sie anschließend in die Konsole ein
  • Du nimmst die /linuxrc von hier und fügst Sie in die Konsole ein.

Wichtig: in allen Fällen musst Du die letzte Zeile (exec /sbin/init) weglassen, da sonst der „normale“ Bootvorgang anspringt.

Noch ein Hinweis: Deine Kernel Commandline sorgt beim nächsten Start wieder dafür, dass der Bootvorgang beim /bin/sh endet! Du solltest also, nachdem Du die neue Firmware gebaut und geflasht hast, das init=/bin/sh wieder entfernen…

Herzlichen Glückwunsch - nun bist Du also root auf Deinem, ansonsten voll funktionsfähigen, Hasen! Als Nächstes kannst Du dem Hasen eine neue Firmware backen.