BeagleBone - USB Boot

| abgelegt unter: , , ,
Für ein Projekt wollte ich mich nicht auf den internen Speicher des BeagleBone verlassen. Auch eine SD-Karte erschien mir nicht zuverlässig genug.

Also musste eine USB-Festplatte her. In diesem Fall, eine 2,5" Platte, angeschlossen über einen handelsüblichen, aktiven USB-zu-SATA Adapter. Es sollten auch "passive" Festplatten gehen, wenn man den BeagleBone über ein Netzteil mit mehr als 1,5A/h betreibt.

 

Vorbereiten der Festplatte

Ich habe eine leere Festplatte verwendet und zunächst mit fdisk eine Partition erstellt. An dieser Stelle kann man auch eine Swap-Partition erstellen, wennn man das für sinnvoll erachtet. Die "alten" Platten leiden ja bekanntlich nicht so sehr unter dauerhafter Schreiblast.

 

fdisk /dev/sdX      # X durch Laufwerksbuchstaben ersetzen

Dann mit eine neue Partitionstabelle erstellen, mit n eine neue Partition erstellen, mit p als Typ "primär" auswählen. Nun die Größe auswählen (Im Zweifel zwei mal Enter) und dann mit t den die System ID auf 83 setzen und dann mit  a die Partition bootfähig machen. Mit mit p die Änderungen überprüfen und mit w die  auf die Platte schreiben.

 

Dann ein Dateisystem erstellen.

sudo mkfs.ext4 /dev/sdX1

 

Klonen des Dateisystems

 Voraussetzung ist ein funktionierendes Root-Dateisystem. Am besten von einer funtionierenden SD-Karte. Ich habe in meinem Fall ein Debian (debian-7.3-machinekit-armhf-2013-12-28) verwendet. Die SD-Karte und die Festplatte an einen PC anschließen. Bei neueren Desktop-Distributionen werden die Wechselmedien unter /media/uid gemountet.

sudo rsync -avx /media/<UID>/rootfs/ /media/<UID>/rootfs1
sudo rsync -avx /media/<UID>/BOOT/ /media/<UID>/rootfs1/boot/uboot

 Dann am besten nochmal ein sudo sync hinterher.

 

Konvertieren des uImage nach zImage

Suboptimalerweise muss der Kernel zunächst in ein anderes Format übersetzt werden, damit u-boot ihn zum starten von USB verwenden kann. Hierzu in das Boot-Verzeichnis auf der Festplatte wechseln und den Kernel konvertieren.

cd /media/<UID>/rootfs1/boot/uboot
sudo mkimage -A arm -O linux -T kernel -C none -a 0×80008000 -e 0×80008000 -n “Linux” -d ./3.8.13-bone21.zImage ./uImage

 

Anpassen der /etc/fstab

Damit die Partition als root-Partition richtig gemountet wird, muss noch der die Datei /etc/fstab auf der USB Platte angepasst werden. Die Zeilen für die SD-Karte auskommentieren oder löschen und folgende Zeile einfügen.

/dev/sda1       /   ext4  defaults  0  1

Es ist sinnvoll, später mit blkid die UID der Disk zu finden und /dev/sda zu ersetzen.

 

Anpassen der Boot-Konfiguration

Damit der BeagleBone von USB startet, muss noch die Datei uEnv.txt auf der SD-Karte (Boot-Partition) angepasst werden. Folgende Zeilen habe ich angepasst/eingefügt:

mmcroot=/dev/sda1 ro rootwait
mmcrootfstype=ext4 rootwait fixrtc
bootpart=0:1
bootdir=/boot/uboot

loadkernel=load usb ${bootpart} 0x80200000 /boot/uboot/${kernel_file}
loadinitrd=load usb ${bootpart} 0x81000000 /boot/uboot/${initrd_file}; setenv initrd_size ${filesize}
loadfdt=load usb ${bootpart} 0x815f0000 /boot/uboot/dtbs/${fdtfile}

uenvcmd=usb start; run boot_ftd; run device_args; bootz 0x80200000 0x81000000:${initrd_size} 0x815f0000

 

Abschluss und Boot

Am Ende die Laufwerke aushängen,

sudo sync 
cd /media/<UID> && sudo umount *

dann die SD-Karte in den BeagleBone stecken, die USB-Platte verbinden und dem Start zusehen. Entweder über den HDMI-Port oder über ein serielles Terminal.