Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
software:linux:emdebian:rootfs_erstellen [2014-10-08 15:26] grafsoftware:linux:emdebian:rootfs_erstellen [2014-10-09 11:51] graf
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 weiter unten). 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 erstellen: <code>nano phycorempc5200b.multistrap</code> <file - phycorempc5200b.multistrap>[General] +...
-arch=powerpc +
-directory=/opt/multistrap/ +
-cleanup=true +
-retainsources= +
-noauth=true +
-unpack=true +
-bootstrap=Grip +
-aptsources=Grip Debian+
  
 [Grip] [Grip]
-packages=ifupdown procps iputils-ping module-init-tools openssh-server nano +...
-source=http://www.emdebian.org/grip/ +
-keyring=emdebian-archive-keyring +
-suite=wheezy-grip+
  
 [Debian] [Debian]
-packages= +...
-source=http://ftp.ch.debian.org/debian/ +
-keyring=debian-archive-keyring +
-suite=wheezy+
 </file> </file>
-  - Root File System bootstrappen: <code>multistrap -f phycorempc5200b.multistrap </code> +  - Root File System bootstrappen. Dies erstellt ein Grundsystem im Verzeichnis ''/opt/multistrap/'': <code>multistrap -f myBoard.multistrap </code> 
-==== Automatisches Build Skript ==== +  - Skript für automatische Konfiguration erstellen: <code>nano /opt/multistrap/autoconfig.sh</code>  <file bash autoconfig.sh>#!/bin/sh 
-Das folgende Skript erstellt automatisch ein neues RootFS-Image+export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true 
-<code bash+export LC_ALL=C LANGUAGE=C LANG=
-#!/bin/bash+/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
  
-MULTISTRAP_CONFIG=myConfig.grip.multistrap # give name of configuration file +auto eth0 
-ROOTFS_DIR=/opt/multistrap +iface eth0 inet static 
-ROOTFS_IMG=rootfs.jffs2 # choose a suitable file system format +           address 146.136.36.x 
-FILE_DIR=files +           netmask 255.255.252.0 
-DEV_TABLE=device_table+           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>
  
-set -e 
  
-echo "Multistrapping... " +==== Automatisches Build Skript ==== 
-if [ ! -d $ROOTFS_DIR ]; then mkdir -p $ROOTFS_DIR; fi +Ein Root-Filesystem kann auch mit einem automatischen Build-Script erstellt werdenDas folgende {{:software:linux:emdebian:buildscript.sh|Skript}} zeigt ein Beispiel.
-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!" +===== Buildroot ===== 
-</code>+Wir benutzen [[http://buildroot.uclibc.org/|Buildroot]] für die Erstellung eines Root-Filesystems. 
 +TODO