rfc2324.org - HowTo

Linux auf einer Netstation mit CompactFlash


Vim - The Editor
Valid HTML 4.01 Strict Valid CSS!

Dieser Howto liegt MiniLinux distribution for usage on CF Cards or USB Sticks von Flo zugrunde

Basierend darauf gibt es einige Änderungen, die einige Extrafeatures ermöglichen sollen:

Wie im Makefile.diff zu sehen habe ich ein paar Dinge an der RMPKG-Liste geändert:
  1. libgcrypt11 scheint eine neue Abhängigkeit zu sein und wird mit entfernt
  2. pppoeconf + pppconfig sind von whiptail abhängig, dass entfernt werden soll;
    meines Erachtens unnötige Pakete

Grub

Da syslinux bei mir nicht wollte, habe ich grub einfach direkt installiert :-)
Da das grub-install Skript ein paar Macken hat, machen wir das per Hand:
(Falls grub auf dem build-system nicht installiert sein sollte, können die Dateien aus dem rootfs genutzt werden; dort wird grub mit der gepatchten Version des Makefile installiert.)

 
  # Dem CF eine primaere Parition verpassen (Type: 0b)
  # <DEVICE> könnte z.B. für /dev/sda stehen
  fdisk  <DEVICE>

  # Dateisystem anlegen
  mkfs.msdos -F 32 <DEVICE>1
  
  mount <DEVICE>1 /mnt
  mkdir /mnt/grub

  # Grup Load Dateien kopieren
  cp /lib/grub/i386-pc/{fat_stage1_5,stage1,stage2} /mnt/grub

  # Device Map erstellen
  # (hd1) ist nur ein workaround um nichts an der build-maschine zu veraendern
  cat << EOF > /mnt/grub/device.map
  (hd0)   /dev/hda
  (hd1)	<DEVICE>
  EOF
  
  cp <BUILD-DIR>/kernel/boot/* /mnt
  cp <BUILD-DIR>/initrd /mnt
  
  # /mnt/grub/menu.lst anlegen
  # Es kann direkt die unten angegeben verwendet werden
  
  grub --no-floppy --device-map=/mnt/grub/device.map

  in der grub-shell:
   root (hd1,0)
   setup --stage2=/mnt/grub/stage2 --prefix=/grub (hd1)
   quit
 
  umount /mnt
 

Ab hier ist das CF bootfähig!

serieller Zugriff
Um bereits auf den Bootmanager über die serielle Konsole zugreifen zu können, müssen ein paar Eintragunen in der menu.lst gemacht werden. Dies könnte etwa so aussehen:

default 0
timeout=10

serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console

title linux-2.6.9-max (seriell, tty0)
  kernel (hd0,0)/linux-2.6.9 root=/dev/ram0 console=tty0 console=ttyS0
  initrd (hd0,0)/initrd

title linux-2.6.9-max (local)
  kernel (hd0,0)/linux-2.6.9 root=/dev/ram0
  initrd (hd0,0)/initrd
 

Die relevanten Parameter sind einmal die serial-Zeile, die die erste serielle Schnittstelle initialisiert, sowie die terminal-Zeile, die besagt, dass 10 Sekunden lang sowohl auf der seriellen, als auch auf der lokalen Konsole auf Input gewartet werden soll und - sofern nicht interaktiv anders entschieden - mit der seriellen gebootet wird.
Der standardmäßig gebootete Kernel schmeisst alle Meldungn primär auf die Serielle.

Die gepatchte Version des Makefiles sollte den entsprechenden Eintrag in der initrd und dem rootfs anlegen und die Konsole in der inittab aktivieren.


Das System

Nun muss nur noch das System - sprich die Datei rootfs.squashfs nach /mnt/rootfs kopiert werden und der Router kann gebootet werden.

Dateien:

  1. Kernel 2.6.9 inkl. Modulen (debian-image)
  2. Makefile.diff