Lange Zeit habe ich mich von einem aeltlichen Notebook, einem Toshiba Satellite mit einem "ready for Windows 98!"-Aufkleber ins Internet bringen lassen. Schon laenger stoerte mich, dass dieser nur durch zwei 1MBit-Netzwerkkarten angebunden war. Irgendwann reichte dann das Geld aus und ich habe mir ein ALIX embedded-System bei meconet bestellt. Hier soll es nun darum gehen, wie man es in Betrieb bekommt und, interessanter noch, wie man darauf ein aktuelles FreeBSD installiert bekommt.

Die Hardware

Embedded-Board klingt ersteinmal gewaltig, ist aber lange nicht so eindrucksvoll. Im Details verfuegt das Board ueber die folgende Ausstattung:

Was ich noch dazu brauche, ehe das Ganze sich der Funktionalitaet naehert ist primaer ein Netzteil, ein Gehaeuse und eine 512-MB-CF-Karte. Fuer die Installation selbst benoetigt man dann noch ein in irgendeiner Form laufendes FreeBSD, einen CF-Kartenleser (ich habe da das USB-Geraetchen genommen, mit dem ich sonst Bilder von den Karten hole) und die Verzeichnisse base/ und kernels/ einer halbwegs aktuellen FreeBSD-Distribution (ich habe einen Snapshot von 8-current vom 09.2008 genommen).

Installationsvorbereitungen

Ganz am Anfang steht die Frage, "wie mach ich das jetzt". Folgender Anfang hat sich bei mir bewaehrt:
Einrichten einer seriellen Konsole. Damit kann schonmal ueberprueft werden, ob das Board sich bis zum BIOS meldet. Die Konsole wird auf die folgenden Einstellungen gesetzt:

Baudrate:  34800
Bits:      8
Paritaet:  N
Stoppbits: 1
Vorsicht: Diese Einstellung ist kein typischer Standard -- der waeren 9600 Baud bei gleichen restlichen Einstellungen. Nachdem eine so eingestellte Konsole angehaengt ist, kann das Board mit Strom versorgt werden. Es solllten erste Debug-Ausgaben in ungefaehr der folgenden Form ueber den Bildschirm laufen (es ist noch keine CF-Karte eingesetzt):
PC Engines ALIX.2 v0.99
640 KB Base Memory
261120 KB Extended Memory

01F0 - no drive found !
No boot device available, press Enter to continue.
Um in das kleine BIOS zu gelangen, dass das Board mit sich bringt, ist waehrend der Speichertest durchlaeuft "s" zu druecken. Dann sieht das Ergebnis so aus:
PC Engines ALIX.2 v0.99
640 KB Base Memory
261120 KB Extended Memory

01F0 - no drive found !

BIOS setup:

*9* 9600 baud (2) 19200 baud (3) 38400 baud (5) 57600 baud (1) 115200 baud
(C) CHS mode *L* LBA mode (W) HDD wait (V) HDD slave (U) UDMA enable
*M* MFGPT workaround
(P) late PCI init
*R* Serial console enable
(E) PXE boot enable
(X) Xmodem upload
(Q) Quit
Hier laesst sich auch die Verbindungsgeschwindigkeit der seriellen Konsole anpassen, PXE aktivieren oder ein BIOS-Upgrade per Xmodem durchfuehren. Da ich bei solchen Dingen immer uebervorsichtig bin, lasse ich das BIOS wie es ist und werde lieber erstmal ein Betriebssystem auf eine CF-Karte installieren.

(Manuelle) Installation von FreeBSD

In diesem Schritt soll nun ein FreeBSD seinen Weg auf eine CF-Card finden. Dazu benoetigt werden:

Weshalb das Booten von der Installations-CD? Es ist prinzipiell nicht notwendig, benoetigt werden von der Installations-CD nur die Verzeichnisse base/ und kernels/. Aber ich habe immer Angst, dass ich versehentlich mein auf der HDD installiertes System bei der Arbeit mit fdisk und Co zerstoere. Eigentlich kann es bei sorgfaeltiger Arbeit nicht passieren. Aber Vorsicht ist die Mutter der Porzellankiste und so arbeite ich lieber an einem CD-Live-System auf einer Maschine mit ausgebautem Laufwerk :)
Nachdem das Installer-System da ist, waehle man aus dem Installer-Hauptmenue den Punkt "Fixit" und anschliessend "CDROM/DVD" woraufhin man in einer Shell landet. Ab hier habe ich mich an der Anleitung zur manuellen FreeBSD-Installation von lando (http://http://wp.lando.cc/blog/2008/07/15/fbsd7amd64-auf-s4y/) orientiert. Allerdings mit ein paar Abwandlungen fuer meinen besonderen Zweck.

1. Schritt: CF-Card einrichten und partitionieren

Die Karte im Leser an das System anstoepseln. Sie wird bei mir als /dev/da0 erkannt. Das erste Ziel ist, alles, was dort an Partitionsinformationen oder Aehnlichem gespeichert ist zu entfernen. Dafuer bewaehrt hat sich ein ueberschreiben des Anfangs der Platte, am einfachsten mit einem

dd if=/dev/zero of=/dev/da0 bs=1024 count=100
Danach sind die ersten 102400 Bytes ueberschrieben, der Bootsektor und die Paritionsinformatinen hinueber. Ein Listing in /dev ergibt nur noch einen Eintrag fuer da0 keine Slices mehr.
Nun wieder lando folgen:
fdisk -I /dev/da0
und nicht an den Fehlermeldungen stoeren. Danach ist es Zeit, die Slices anzulegen:
bsdlabel -w /dev/da0s1
Anschliessend kann man sich ansehen, was dabei passiert ist, indem man
bsdlabel -e /dev/da0s1
aufruft. Hier ist nun Zeit, die Paritionen zu konfigurieren. Anders als lando habe ich nur 512 MB zur Verfuegung, entsprechend sieht meine Konfiguration leicht geaendert aus:
# /dev/da0
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a:   819200       16    4.2BSD        0     0       0
  b:   180176   819216      swap
  c:  1000944        0    unused        0     0         # "raw" part, don't edit
Nachdem die Groessen festliegen (und ein ls in /dev ergibt, dass sowas wie /dev/da0s1 existiert), kann mit
newfs /dev/da0s1a
eine Partition angelegt werden.
Diese laesst sich nun mit einem normalen Mountbefehl z.B. nach /mnt mounten.

Installation von Welt und Kernel

Fuer Erklaerungen verweise ich auf landos Blog, hier nur die Readers Digest Kurzdarstellung (in /mnt3 liegen bei mir base/ und kernels/ -- auf dem CD-Livesysten liegen diese Normalerweise innerhalb von /dist/7.0-CURRENT-200703/ oder welchen Snapshot man auch haben mag):

Fixit# mount /dev/da0s1a /mnt
Fixit# cd /mnt3/base
Fixit# export DESTDIR=/mnt
Fixit# sh ./install.sh
You are about to extract the base distribution into /mnt - are you SURE
you want to do this over your installed system (y/n)? y
./: Could not unlink: Operation not permitted: Operation not permitted
Fixit# cd ../kernels/
Fixit# sh ./install.sh GENERIC
Fixit#
Der Schritt des Installieren des Grundsystems dauert (abhaengig von der CF-Karte und ihrem Anschluss mehr oder weniger am laengsten).

Konfigruation

Nachdem nun das System prinzipiell auf der Karte ist, muss noch dafuer gesorgt werden, dass es auch ein paar Informationen hat. Z.B. sollten in der /boot/loader.conf die folgenden Zeilen stehen:

console=comconsole
kernel="GENERIC"
In der /etc/ttys muss dafuer gesorgt werden, dass man auch ordentlich am seriellen Terminal gearbeitet werden kann -- deshalb wird die Zeile des ersten seriellen Terminals aktiviert und der Typ auf vt100 gesetzt; die "normalen" virtuellen Terminals werden ausgeschaltet:
ttyv0   "/usr/libexec/getty Pc"         cons25  off  secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"         cons25  off  secure
ttyv2   "/usr/libexec/getty Pc"         cons25  off  secure
ttyv3   "/usr/libexec/getty Pc"         cons25  off  secure
ttyv4   "/usr/libexec/getty Pc"         cons25  off  secure
ttyv5   "/usr/libexec/getty Pc"         cons25  off  secure
ttyv6   "/usr/libexec/getty Pc"         cons25  off  secure
ttyv7   "/usr/libexec/getty Pc"         cons25  off  secure

# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyd0   "/usr/libexec/getty std.9600"   vt100  on secure
ttyd1   "/usr/libexec/getty std.9600"   dialup  off secure
ttyd2   "/usr/libexec/getty std.9600"   dialup  off secure
ttyd3   "/usr/libexec/getty std.9600"   dialup  off secure


Nun braucht es noch Informationen darueber, wo welche Partition liegt: Die /etc/fstab:
/dev/ad0s1a             /               ufs     rw              1       1
So. Nun fehlt nur noch Eines:

Bootbar machen

lando hat eine Weile gesessen und gebastelt, so ging es auch mir. Denn der normale Bootloader zeigte mir auf der Konsole zwar die Auswahl ueber die Betriebssysteme an, aber dann ging nichts mehr. Nix da mit booten. Dann aber hatte ich eine Idee.

fdisk -B -b /mnt/boot/boot1 /dev/da0
bsdlabel -B /dev/da0s1
Der erste Befehl schreibt den Bootcode -- und das ist hier nicht boot0, der FreeBSD-Bootmanager (der mit der Konsole nicht weitermachen wollte) sondern direkt der Kernelloader boot1 .

Der erste Lauf

Dann kam er, der magische Moment, in dem die Hardware das erste Mal zeigen konnte, was in ihr steckt. Das Ganze sieht in der seriellen Konsole dann wie folgt aus (wenn nur wirrer Kram kommt, dann die Konsole auf 9600 Baud zurueckstellen -- das Board hat von sich aus mit 34800 Baud gearbeitet. Der Wert des Boardes laesst sich im BIOS allerdings leicht aendern. Und da es "nur" um eine Konsole und nicht um Datenuebertragungen geht, sind die 9600 Baud auch ganz gut zu ertragen...):


PC Engines ALIX.2 v0.99
640 KB Base Memory
261120 KB Extended Memory

01F0 Master 848A Hitachi XX.V.3.5.0.0
Phys C/H/S 993/16/63 Log C/H/S 496/32/63
/boot/GENERIC/kernel text=0x7a4f80 data=0xd7600+0x1c0c38 syms=[0x4+0x82d80+0x4+0xaeaac\
 
 
                                                  ______
                                                 |  ____| __ ___  ___
            Welcome to FreeBSD!                  | |__ | '__/ _ \/ _ \
                                                 |  __|| | |  __/  __/
                                                 | |   | | |    |    |
    1. Boot FreeBSD [default]                    |_|   |_|  \___|\___|
    2. Boot FreeBSD with ACPI enabled             ____   _____ _____
    3. Boot FreeBSD in Safe Mode                 |  _ \ / ____|  __ \
    4. Boot FreeBSD in single user mode          | |_) | (___ | |  | |
    5. Boot FreeBSD with verbose logging         |  _ < \___ \| |  | |
    6. Escape to loader prompt                   | |_) |____) | |__| |
    7. Reboot                                    |     |      |      |
                                                 |____/|_____/|_____/
                                            
                                            
                                            
    Select option, [Enter] for default      
    or [Space] to pause timer  0            


GDB: no debug ports present
KDB: debugger backends: ddb
KDB: current backend: ddb
Copyright (c) 1992-2008 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 8.0-CURRENT-200809 #0: Sun Sep  7 22:13:46 UTC 2008
    root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC
WARNING: WITNESS option enabled, expect reduced performance.
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Geode(TM) Integrated Processor by AMD PCS (498.05-MHz 586-class CPU)
  Origin = "AuthenticAMD"  Id = 0x5a2  Stepping = 2
  Features=0x88a93d
  AMD Features=0xc0400000
real memory  = 268435456 (256 MB)
avail memory = 248889344 (237 MB)
pnpbios: Bad PnP BIOS data checksum
kbd0 at kbdmux0
K6-family MTRR support enabled (2 registers)
ath_hal: 0.10.5.10 (AR5210, AR5211, AR5212, AR5416, RF5111, RF5112, RF2413, RF5413, RF2133, RF2425, RF2417)
pcib0:  pcibus 0 on motherboard
pci0:  on pcib0
pci0:  at device 1.2 (no driver attached)
vr0:  port 0x1000-0x10ff mem 0xe0000000-0xe00000ff irq 10 at device 9.0 on pci0
vr0: Quirks: 0x6
vr0: Revision: 0x96
miibus0:  on vr0
ukphy0:  PHY 1 on miibus0
ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
vr0: Ethernet address: 00:0d:b9:15:67:64
vr0: [ITHREAD]
vr1:  port 0x1400-0x14ff mem 0xe0040000-0xe00400ff irq 11 at device 10.0 on pci0
vr1: Quirks: 0x6
vr1: Revision: 0x96
miibus1:  on vr1
ukphy1:  PHY 1 on miibus1
ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
vr1: Ethernet address: 00:0d:b9:15:67:65
vr1: [ITHREAD]
vr2:  port 0x1800-0x18ff mem 0xe0080000-0xe00800ff irq 12 at device 11.0 on pci0
vr2: Quirks: 0x6
vr2: Revision: 0x96
miibus2:  on vr2
ukphy2:  PHY 1 on miibus2
ukphy2:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
vr2: Ethernet address: 00:0d:b9:15:67:66
vr2: [ITHREAD]
isab0:  port 0x6000-0x6007,0x6100-0x61ff,0x6200-0x623f,0x9d00-0x9d7f,0x9c00-0x9c3f at device 15.0 on pci0
isa0:  on isab0
atapci0:  port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xff00-0xff0f at device 15.2 on pci0
ata0:  on atapci0
ata0: [ITHREAD]
ata1:  on atapci0
ata1: [ITHREAD]
ohci0:  mem 0xefffe000-0xefffefff irq 15 at device 15.4 on pci0
ohci0: [GIANT-LOCKED]
ohci0: [ITHREAD]
usb0: OHCI version 1.0, legacy support
usb0:  on ohci0
usb0: USB revision 1.0
uhub0:  on usb0
uhub0: 4 ports with 4 removable, self powered
ehci0:  mem 0xefffd000-0xefffdfff irq 15 at device 15.5 on pci0
ehci0: [GIANT-LOCKED]
ehci0: [ITHREAD]
usb1: EHCI version 1.0
usb1: companion controller, 4 ports each: usb0
usb1:  on ehci0
usb1: USB revision 2.0
uhub1:  on usb1
uhub1: 4 ports with 4 removable, self powered
cpu0 on motherboard
pmtimer0 on isa0
orm0:  at iomem 0xe0000-0xea7ff pnpid ORM0000 on isa0
atrtc0:  at port 0x70 irq 8 on isa0
ppc0: parallel port not found.
uart0: <16550 or compatible> at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
uart0: [FILTER]
uart0: console (9600,n,8,1)
Timecounter "TSC" frequency 498054007 Hz quality 800
Timecounters tick every 1.000 msec
ad0: 488MB  at ata0-master PIO4

** hier spare ich mir ein paar traps, in die der kernel gelaufen ist -- ich hab ein 8-current, da gehoert das dazu ;) **

Entropy harvesting: interrupts ethernet point_to_point kickstart.
/dev/ad0s1a: FILE SYSTEM CLEAN; SKIPPING CHECKS
/dev/ad0s1a: clean, 64705 free (265 frags, 8055 blocks, 0.1% fragmentation)
/etc/rc: WARNING: $hostname is not set -- see rc.conf(5).
Starting Network: lo0.
vr0: link state changed to DOWN
vr1: link state changed to DOWN
vr2: link state changed to DOWN
Generating host.conf.
Jan  1 00:02:37  syslogd: /var/log/slip.log: No such file or directory
/etc/rc: WARNING: Dump device does not exist.  Savecore not run.

Sat Jan  1 00:02:46 UTC 2000

FreeBSD/i386 (Amnesiac) (ttyu0)

login: root
Jan  1 00:03:46  login: ROOT LOGIN (root) ON ttyu0
Last login: Sat Jan  1 00:01:18 on ttyu0
Copyright (c) 1992-2008 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.

FreeBSD 8.0-CURRENT-200809 (GENERIC) #0: Sun Sep  7 22:13:46 UTC 2008

Welcome to FreeBSD!

Before seeking technical support, please use the following resources:

o  Security advisories and updated errata information for all releases are
   at http://www.FreeBSD.org/releases/ - always consult the ERRATA section
   for your release first as it's updated frequently.

o  The Handbook and FAQ documents are at http://www.FreeBSD.org/ and,
   along with the mailing lists, can be searched by going to
   http://www.FreeBSD.org/search/.  If the doc distribution has
   been installed, they're also available formatted in /usr/share/doc.

If you still have a question or problem, please take the output of
`uname -a', along with any relevant error messages, and email it
as a question to the questions@FreeBSD.org mailing list.  If you are
unfamiliar with FreeBSD's directory layout, please refer to the hier(7)
manual page.  If you are not familiar with manual pages, type `man man'.

You may also use sysinstall(8) to re-enter the installation and
configuration utility.  Edit /etc/motd to change this login announcement.

# halt -p
Jan  1 00:04:00  halt: halted by root
Waiting (max 60 seconds) for system process `vnlru' to stop...done
Waiting (max 60 seconds) for system process `bufdaemon' to stop...done
Waiting (max 60 seconds) for system process `syncer' to stop...
Syncing disks, vnodes remaining...0 0 done
All buffers synced.

Uptime: 2m1s

The operating system has halted.
Please press any key to reboot.

Whohoo!

Was noch dazukommt

Nun muss fas FreeBSD nur noch zu einem vollwertigen Router werden. Aber das sind dann wieder Kleinigkeiten, wenn es erstmal laeuft. Bei mir wird das folgendes umfassen:

...aber das sind Details, die ich hier nun nicht noch ausfuehrlich beschreiben werde.

Was der Spass kostet

Wer das hier nun liest, der wird sich fragen, was das kostet und wie man zu sowas kommt.. darauf will ich mit einer kurzen Tabelle eingehen:

PostenPreis
Mainboard118.32 Eur
Steckernetzteil6.01 Eur
Chassis Indoor schwarz11.48 Eur
Prozessorkuehler3.69 Eur
Versand u. Nachnahme11.50 Eur
Summe151.00 Eur

Stichworte:


Impressum