Site Loader
Steinrieselstrasse 52, 3203 Mühleberg

freeBSD für embedded System’s. Bei jeder freeBSD Installation ist ein Shell-Script (nanobsd.sh) unter

/usr/src/tools/tools/nanobsd/

vorhanden, mit welchem es sehr einfach ist, ein angepasstes Image für diverse embedded Systeme zu erstellen.
Für jene welche kein freeBSD auf einem Rechner haben, einfach mit VirtualBox eines installieren, geht ganz schnell.

Usage: nanobsd.sh [-bfhiKknqvwX] [-c config_file]
-b    suppress builds (both kernel and world)
-c    specify config file
-f    suppress code slice extraction
-h    print this help summary page
-i    suppress disk image build
-K    suppress installkernel
-k    suppress buildkernel
-n    add -DNO_CLEAN to buildworld, buildkernel, etc
-q    make output more quiet
-v    make output more verbose
-w    suppress buildworld
-X    make native-xtools

Unsere Anpassungen werden wir in einem Konfigfile definieren, welches wir dem nanobsd.sh Script übergeben. Im folgenden ein kleine Beispiel, wie diese für ein APU Board aussehen könnte.

NANO_NAME=APU
NANO_SRC=/usr/src
#NANO_KERNEL=<Kernel-Konfig>
NANO_IMAGES=2
NANO_IMGNAME=<Name_des_Images>
NANO_DRIVE=ada0        # SSD
#NANO_DRIVE=ad0        # SD

NANO_BOOTLOADER="boot/boot0"
NANO_BOOTCFG="-o nopacket -s 1 -m 3"

#  APU  Disksize
NANO_MEDIASIZE=11566800 # 6GB gesamt Speicher (2 Images)
NANO_HEADS=255
NANO_SECTS=63
NANO_RAM_ETCSIZE=19532    # 10 MB /etc 19532*512 (Blocksize)
NANO_TMP_VARSIZE=19532    # 10 MB /var

Der Parameter <NANO_KERNEL=> wird vorerst ausgeblendet. Es wird ein GENERIC Kernel kompiliert. Später, wenn das Image auf dem System läuft, kann man mit

pciconv

die verwendete Hardware ausgeben, und wenn notwendig den Kernel anpassen.

Im nächsten Teil kommen wir zum , den Optionen für den INSTALLWORLD Prozess.

CONF_INSTALL='
WITHOUT_FLOPPY=YES
WITHOUT_WIRELESS=YES
WITHOUT_GDB=YES
WITHOUT_BLUETOOTH=YES
WITHOUT_GNU=YES
'

Unser embedded System hat kein Floppy und kein WLAN also teilen wir dem INSTALLWORLD Prozess mit, dass er sich diese Paket sparen kann.

Dies sind nur Beispiel Definition, je nach dem was unser System machen soll, kann man sehr viele Pakete aus dem INSTALLWORLD Prozess entfernen, um so das Image klein zu halten.

Nun kommen ein paar Funktionen,

cust_nobeastie() (
	touch ${NANO_WORLDDIR}/boot/loader.conf
	echo "beastie_disable=\"YES\"" >> ${NANO_WORLDDIR}/boot/loader.conf
	echo "comconsole_speed=\"115200\"" >> ${NANO_WORLDDIR}/boot/loader.conf

	)

Die wichtigste für uns, ist der comconsole_speed, wir können uns an der APU mit 115200 Baud verbinden und erhalten eine Shell. Diese benötigen wir, um das ROOT Kennwort zu ändern, denn der SSH Server lässt nur root Logins zu, wenn ein Passwort gesetzt ist.

cust_install() (
	cp /etc/resolv.conf ${NANO_WORLDDIR}/etc/
	pkg -c ${NANO_WORLDDIR} update
	pkg -c ${NANO_WORLDDIR} install -y nano
)

Jetzt kommt der interessante Teil, unsere Tools welche auf dem System laufen sollen. Das -c steht für CHROOT von pkg. Die resolv.conf ist wichtig für die DNS Auflösung. PKG kann sonst kein Update machen.

Zum Schluss unsere Konfig sind folgende Funktionen angeführt

customize_cmd cust_comconsole
customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie
customize_cmd cust_install
customize_cmd cust_install_files

Funktionen wie cust_comconsole,cust_allow_ssh_root,cust_install_files sind nanobsd Subfunktionen.

Möchte man Files auf das System kopieren, kann man sie in der richtigen Hierachie unter

/usr/src/tools/tools/nanobsd/files/

ablegen.

Legt man ein File an wie folgt

/usr/src/tools/tools/nanobsd/files/root/test

so findet sich dieses dann unter /root/

Man kann so auch Konfigurationsdateien wie z.B. /etc/rc.conf ersetzen, einfach darauf achten, dass die Funktion cust_install_files als LETZTERES ausgeführt wird, da es sonst möglich ist, dass das File wieder ersetzt wird.

Nanobsd mountet nur read only und legt für /etc /var Memory Disks an. Dies ist besonders bei Systemen mit SD Karte sehr wichtig. Die Lebenszeit wird dadurch um ein vielfaches erhöht. Zudem werden sie sehr resistent gegen Fehler, welche durch Stromausfälle oder Hard-Resets verursacht werden.

Nach dem ersten Login sind deshalb folgenden Befehle auszuführen

sh change_password
sh save_sshkeys
sh save_cfg

Um Änderungen in /etc permanent zu machen, muss nach Konfigurationen immer sh save_cfg ausgeführt werden. dadurch werden diese in das eigentliche /etc geschrieben.

Viel Spass!

Post Author: roema

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.