Debian on Kirkwood, fra USB-stick, SD-card, SATA-disk, FLASH, og NFS

Nu hvor vi har u-Boot bootloaderen på plads, er det på tide at vi får bootet noget. Der er nok at vælge imellem:

  • Debian Linux
  • Arch Linux
  • Openwrt Linux
  • NetBSD UNIX
  • FreeBSD UNIX

Jeg vælger Debian, mest fordi det er det jeg er vandt til, og fordi der er masser af andre der gør det, og dermed er der stortset altid et svar at finde på nettet når man løber ind i et problem. Jeg kørte Arch Linux en overgang, men det var “anderledes” så jeg er endnu engang kommet tilbage til Debian.

Og hvilket medium skal der bootes fra

  • USB stick
  • sd-card
  • SATA harddisk
  • intern FLASH formateret som JFFS2
  • intern FLASH formateret som UBIFS
  • NFS Network File System

u-Boot kan programmeres i et sprog meget lig Bourne shell (HuSH), så vi kan forholdsvis enkelt lave et system der kan boote fra alle de ovenstående muligheder, i prioriteret rækkefølge, således at man f.ex normalt booter fra den interne FLASH, men hvis man forbinder en USB-stick så vil den boote derfra.

Den nye u-Boot har support for Flattened Device Tree (FDT) så vi kan bruge den samme kernel til mange forskellige systemer, For ikke alt for længe siden skulle de hver have haft en lidt forskellig Linux-kernel, disse kernels kaldes “uImage” og bootes med “bootm” kommandoen. F.ex u-Boot som Pogoplug-en blev leveret med havde kun “bootm”.

En FDT kerne benævnes “zImage” og bootes med “bootz” kommandoen.   Bootloaderen tilføjer så en FDT beskrivelse af maskinen.  I stedet for at lægge FDT-beskrivelse fast i bootloaderen (som er normalt) kan vi loade beskrivelsen når vi booter, “/boot/dts/kirkwood-pogoplug_v4.dtb” indeholder information om hvordan denne box er skruet sammen.  Med dette lille trick kan vi bruge vores USB-stick til at boote mange forskellige Kirkwood maskiner. Og vi behøver ikke at installere en ny u-Boot når vi ændrer maskinen (eller beskrivelsen af maskinen)

u-Boot har en hel del kommandoer og et “environment” der består af variable lige som i Bourne Shell, Environment variable bliver så brugt og/eller sat af de forskellige kommandoer. Man kan selve sætte disse variable, og køre små programmer gemt i disse variable.  Når systemet starter udfører den disse to komandoer “run preboot; run bootcmd” hvorefter den kommer med interaktiv prompt.  Man kan ikke overføre parametre på samme måde som i shellen, men kan nå langt alligevel, f.ex:

Den sidste linie vil forsøge at loade uImage fra ext2-filsystem på den første USB device (0) første partition (1 = sda1) nærmere bestemt bliver nedenstående udført:

hvis dette går godt skrives der “USB-boot” på konsollen, hvis det fejler loader vi uImage via nettet fra $serverip, der bliver her udført:

Jeg har altid lavet shell-scripts der laver shell-scripts, det giver mulighed for at se hvad der skal ske inden man udfører det og evt. splitter maskine ad.  Derfor producerer nedenstående shell-script et shell-script som sætter u-Boot environment variable.

kører vi programmet på en af mine PogoPlug v4 ser vi:

For at installere disse opdateringer pipes outputtet blot til en ny shell

Nu er u-Boot sat op til at boot i prioriteret rækkefølge fra “$default ide usb mmc nfs jffs2  ubi”

Så mangler vi blot at lave og formattere partion 1 på vores USB-stick/SD-card/SATA-disk og kopiere et Debian system derpå, dette kan foregå på en hvilken som helst Linux komputer

Nu kan USB-sticken sættes i en PogoPlug og Den er klar til service.

Næste gang ser vi på hvordan man booter fra nettet:

Print Friendly, PDF & Email
This entry was posted in HomeAutomation, Linux. Bookmark the permalink.