Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:linux:emdebian:rootfs_erstellen [2014-10-08 15:34] grafsoftware:linux:emdebian:rootfs_erstellen [2014-11-12 10:47] (aktuell) – Buildroot Link hinzugefügt abajric
Zeile 3: Zeile 3:
 Der Speicherort des Root-Filesystems ist im Kernel fix einprogrammiert und lässt sich ändern mit //rdev//. Zum Root-Filesystem gehören einige wenige Toplevel-Verzeichnisse und die darin enthaltenen Unterverzeichnisse.  Der Speicherort des Root-Filesystems ist im Kernel fix einprogrammiert und lässt sich ändern mit //rdev//. Zum Root-Filesystem gehören einige wenige Toplevel-Verzeichnisse und die darin enthaltenen Unterverzeichnisse. 
  
-<box red right 35% | **Wichtig**> +<box red right 60% | **Wichtig**> 
- Ein Root-Filesystem kann mit Multistrap sehr einfach und elegant erstellt werden. Allerdings sind die Speicheranforderungen relativ hoch.+ Ein Root-Filesystem kann mit Multistrap sehr einfach und elegant erstellt werden. Allerdings sind die Speicheranforderungen relativ hoch. Mit Buildroot reduziert sich die Grösse stark, allerdings bedingt das einen grösseren Aufwand (siehe [[software:linux:buildroot:start|hier]]). Die Unterschiede werden in diesem [[http://mind.be/content/Presentation_Emdedded-distro-shootout.pdf|Artikel]] gut gezeigt.
 </box> </box>
  
Zeile 25: Zeile 25:
  
 ==== Erstellen ==== ==== Erstellen ====
-Achtung: Problem mit Ubuntu: siehe [[https://bugs.launchpad.net/ubuntu/+source/multistrap/+bug/1313787]] +  - Multistrap-Konfiguration im aktuellen Arbeitsverzeichnis erstellen (Achtung: Problem mit Ubuntu: siehe [[https://bugs.launchpad.net/ubuntu/+source/multistrap/+bug/1313787]], ''/usr/sbin/multistrap'' muss abgeändert werden): <code>nano myBoard.multistrap</code> <file - myBoard.multistrap> [General]
-  - Multistrap-Konfiguration im aktuellen Arbeitsverzeichnis erstellen +
-<code>nano myBoard.multistrap</code>  +
-<file - myBoard.multistrap> +
-[General]+
 ... ...
  
Zeile 38: Zeile 34:
 ... ...
 </file> </file>
 +  - Root File System bootstrappen. Dies erstellt ein Grundsystem im Verzeichnis ''/opt/multistrap/'': <code>multistrap -f myBoard.multistrap </code>
 +  - Skript für automatische Konfiguration erstellen: <code>nano /opt/multistrap/autoconfig.sh</code>  <file bash autoconfig.sh>#!/bin/sh
 +export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
 +export LC_ALL=C LANGUAGE=C LANG=C
 +/var/lib/dpkg/info/dash.preinst install
 +dpkg --configure -a
 +mount proc -t proc /proc
 +dpkg --configure -a</file>
 +  - Konfigurationsskript ausführbar machen: <code>chmod 755 /opt/multistrap/autoconfig.sh</code>
 +  - schroot Konfiguration erstellen: <code>nano /etc/schroot/chroot.d/my-emdebian-grip.conf</code> <file - my-emdebian-grip.conf>[my-emdebian-grip]
 +description=My schroot Configuration for Emdebian Grip Wheezy
 +aliases=my-emdebian
 +type=directory
 +directory=/opt/multistrap
 +root-groups=root
 +users=$USER
 +groups=sbuild</file>
 +  - Untere Adresslimitierung für Qemu deaktivieren: <code>echo 0 > /proc/sys/vm/mmap_min_addr</code>
 +  - Qemu-Binary in das eben erstellte Root-Filesystem kopieren (Achtung: hier muss das passende Binary ausgewählt werden): <code>cp /usr/bin/qemu-ppc-static /opt/multistrap/usr/bin/</code>
 +  - chroot Umgebung betreten (in Arbeitsverzeichnis ausführen): <code>schroot -c my-emdebian-grip</code>
 +  - Konfigurationsskipt ausführen: <code>(my-emdebian-grip)$ /autoconfig.sh</code>
 +  - Root Passwort festlegen: <code>(my-emdebian-grip)$ passwd</code>
 +  - APT Cache löschen: <code>(my-emdebian-grip)$ apt-get clean</code>
 +  - chroot Umgebung wieder verlassen: <code>(my-emdebian-grip)$ exit</code>
 +  - Mount-Punkte festlegen: <code>nano /opt/multistrap/etc/fstab</code> <file - fstab>#/etc/fstab
 +/dev/root  /               jffs2    defaults                        0  0
 +proc       /proc           proc     defaults                        0  0
 +...</file>
 +  - Serielles Terminal konfigurieren (board-spezifisch). 
 +    * Editieren von ''/opt/multistrap/etc/inittab</code>''
 +    * Sicherstellen, dass der Benutzer root sich am seriellen Terminal anmelden kann. Dazu muss in der Datei ''/opt/multistrap/etc/securetty'' die aktive ''tty'' Verbindung eingetragen sein.
 +  - Netzwerkkonfiguration (passend für NTB-Netz): <code>nano /opt/multistrap/etc/network/interfaces</code> <file - interfaces>auto lo
 +iface lo inet loopback
 +
 +auto eth0
 +iface eth0 inet static
 +           address 146.136.36.x
 +           netmask 255.255.252.0
 +           gateway 146.136.36.1</file>
 +  - Hostname konfigurieren: <code>echo myBoard > /opt/multistrap/etc/hostname</code>
 +  - Bash primary promt string (PS1-String) anpassen: <code>nano /opt/multistrap/etc/bash.bashrc</code>
 +    - Die Zeile: <code>PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '</code>
 +    - Ersetzen durch: <code>PS1='[MY_TARGET] \u@\h:\w\$ '</code>
 +  - Qemu-Binary im erstellten Root FS wieder löschen (Achtung: hier muss wiederum das passende Binary ausgewählt werden): <code>rm /opt/multistrap/usr/bin/qemu-ppc-static</code>
 +  - Device Node Tabelle im aktuellen Arbeitsverzeichnis erstellen (board-spezifisch): <code># nano device_table</code> <file - device_table># name type mode uid gid major minor start inc count
 +/dev/console c 600 0 0 5 1 0 0 -
 +...</file>
 +  - Dateisystemabbild erzeugen: <code># mkfs.jffs2 -n -e 0x40000 -p 0x40000 -b -d /opt/multistrap -D device_table -o my-rfs.jffs2</code>
 +<WRAP center round tip 80%>
 +Man kann das Image mit etwas Handarbeit verkleinern, indem vor dem Erzeugen des Images z.B. folgende Verzeichnisse gelöscht werden: ''/var/cache/'', ''/var/lib/dpkg/info/'', ''/usr/share/zoneinfo/'', ''/usr/share/perl/'', ''/usr/share/perl5/'', ''/usr/share/doc/''.
 +</WRAP>
  
-  - Root File System bootstrappen: <code>multistrap -f myBoard.multistrap </code> 
  
 ==== Automatisches Build Skript ==== ==== Automatisches Build Skript ====
-Das folgende Skript erstellt automatisch ein neues RootFS-Image. +Ein Root-Filesystem kann auch mit einem automatischen Build-Script erstellt werdenDas folgende {{:software:linux:emdebian:buildscript.sh|Skript}} zeigt ein Beispiel.
-<code bash> +
-#!/bin/bash +
- +
-MULTISTRAP_CONFIG=myConfig.grip.multistrap # give name of configuration file +
-ROOTFS_DIR=/opt/multistrap +
-ROOTFS_IMG=rootfs.jffs2 # choose a suitable file system format +
-FILE_DIR=files +
-DEV_TABLE=device_table +
- +
-set -+
- +
-echo "Multistrapping... " +
-if [ ! -d $ROOTFS_DIR ]; then mkdir -p $ROOTFS_DIR; fi +
-export MULTISTRAP_OUTPUT_DIR=$ROOTFS_DIR +
-multistrap -f $MULTISTRAP_CONFIG +
- +
-echo "Create missing folders on rootfs..." +
-if [ ! -d $ROOTFS_DIR/etc/network ]; then mkdir -p $ROOTFS_DIR/etc/network; fi +
-if [ ! -d $ROOTFS_DIR/etc/init.d ]; then mkdir -p $ROOTFS_DIR/etc/init.d; fi +
-if [ ! -d $ROOTFS_DIR/etc/dhcp3 ]; then mkdir -p $ROOTFS_DIR/etc/dhcp3; fi +
-if [ ! -d $ROOTFS_DIR/etc/apt/apt.conf.d/ ]; then mkdir -p $ROOTFS_DIR/etc/apt/apt.conf.d; fi +
-if [ ! -d $ROOTFS_DIR/lib/modules/2.6.31 ]; then mkdir -p $ROOTFS_DIR/lib/modules/2.6.31; fi +
-if [ ! -d $ROOTFS_DIR/dev/shm ]; then mkdir -p $ROOTFS_DIR/dev/shm; fi +
-if [ ! -d $ROOTFS_DIR/usr/share/man/man1 ]; then mkdir -p $ROOTFS_DIR/usr/share/man/man1; fi +
-if [ ! -d $ROOTFS_DIR/usr/share/man/man7 ]; then mkdir -p $ROOTFS_DIR/usr/share/man/man7; fi +
-# more folders ... +
- +
-echo "Copying config files to rootfs..." +
-cp -v $FILE_DIR/fstab $ROOTFS_DIR/etc/ +
-cp -v $FILE_DIR/hostname $ROOTFS_DIR/etc/ +
-cp -v $FILE_DIR/passwd $ROOTFS_DIR/etc/ +
-touch $ROOTFS_DIR/lib/modules/2.6.31/modules.dep +
-# more config files ... +
- +
-echo "Copying scripts to rootfs..." +
-cp -v $FILE_DIR/kversion $ROOTFS_DIR/opt/ntb/ +
-cp -v $FILE_DIR/hwversion $ROOTFS_DIR/opt/ntb/ +
-cp -v $FILE_DIR/hwclockfirst.sh $ROOTFS_DIR/etc/init.d/hwclockfirst.sh +
-cp -v $FILE_DIR/serial_config $ROOTFS_DIR/opt/ntb/ +
-# more scripts ... +
- +
-echo "Creating missing links on rootfs..." +
-if [ ! -L $ROOTFS_DIR/etc/mtab ]; then ln -v -s /proc/mounts $ROOTFS_DIR/etc/mtab; fi +
-if [ ! -L $ROOTFS_DIR/etc/rcS.d/S99smartmeter-init.sh ]; then ln -v -s ../init.d/smartmeter-init.sh $ROOTFS_DIR/etc/rcS.d/S99smartmeter-init.sh; fi +
-if [ ! -L $ROOTFS_DIR/etc/resolv.conf ]; then ln -v -s /var/run/resolv.conf $ROOTFS_DIR/etc/resolv.conf; fi +
-if [ ! -L $ROOTFS_DIR/etc/adjtime ]; then ln -v -s /var/local/adjtime $ROOTFS_DIR/etc/adjtime; fi +
- +
-echo "Generating rootfs image file..." +
-mkfs.jffs2 -n -e 0x20000 -p 0x20000 -D $DEV_TABLE -l -d $ROOTFS_DIR -o $ROOTFS_IMG+
  
-echo "All done!" 
-</code>