Die Hardware
Embedded-Board klingt ersteinmal gewaltig, ist aber lange nicht so eindrucksvoll. Im Details verfuegt das Board ueber die folgende Ausstattung:
- AMD Geode als Prozessor (32 Bit-i386-Architektur)
- 256 MB RAM
- 3 Netzwerkinterfaces (Ethernet, 100MBit)
- Pins zum Anschluss von IDE-Geaeten, allerdings sind diese Pins im 2.5"-Abstand und nicht im 3.5"-Abstand, also laesst sich nicht einfach irgendein IDE-Geraet anschliessen
- CF-Card-Slot
- ein mini-PCI-Slot.. vielleicht mal fuer ein WLAN-Modul
- 2 USB-Anschluesse
- 1 serieller Anschluss fuer serielle Konsole
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: 1Vorsicht: 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) QuitHier 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:
- Ein Rechner, der von CD booten kann und eine FreeBSD-Installations-CD
- Ein CF-Card-Leser, der unter dem Fixit-Live-System von der CD erkannt wird und die Karte z.B. als
/dev/da0zur Verfuegung stellt. - Eine Compact Flash-Karte. Ich habe eine mit 521 MB genommen. Die kostet heute fast nichts mehr :)
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=100Danach 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/da0und nicht an den Fehlermeldungen stoeren. Danach ist es Zeit, die Slices anzulegen:
bsdlabel -w /dev/da0s1Anschliessend kann man sich ansehen, was dabei passiert ist, indem man
bsdlabel -e /dev/da0s1aufruft. 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 editNachdem die Groessen festliegen (und ein
ls in /dev ergibt, dass sowas wie /dev/da0s1 existiert), kann mit
newfs /dev/da0s1aeine 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 secureNun braucht es noch Informationen darueber, wo welche Partition liegt: Die
/etc/fstab:
/dev/ad0s1a / ufs rw 1 1So. 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/da0s1Der 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:
- vpnc installieren und einrichten, so dass eine Einwahl ins RUN moeglich ist.
- ipnat konfigurieren, so dass meine restlichen Rechner geroutet werden.
- routen setzen, so dass auch das Netz mit meinen WG-Mitbewohnern erreichbar ist
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:
| Posten | Preis |
| Mainboard | 118.32 Eur |
| Steckernetzteil | 6.01 Eur |
| Chassis Indoor schwarz | 11.48 Eur |
| Prozessorkuehler | 3.69 Eur |
| Versand u. Nachnahme | 11.50 Eur |
| Summe | 151.00 Eur |