I-RT-HOME

  1. Einführung

  2. ELinOS im RT-Lab

  3. Beispiel 1: BusyBox

  4. Beispiel 2: Zielsystem mit eigener Funktion

  5. Aufgabe


I-RT REALZEITSYSTEME WS0304
EX1: Erstellen von Zielsystemen mit ELinOS

	Achtung : Bei der ersten Übung hat sich gezeigt, dass die Quoten der StudentenInnen
			bei der Anwendung von ELinOS temporär zu klein sind. Um die Quoten bei den Teilnehmern
			anzupassen, benötigen wir von allen Teilnehmern eine Liste der Kennungen.  Diese werden
			während der nächsten Übungsstunden und bei der nächsten VL elektronisch erhoben.
				 
    Achtung : Skript ist nicht notwendigerweise identisch mit den  mündlichen Erläuterungen !!!
                        

AUTHOR: Gerd Döben-Henisch
DATE OF FIRST GENERATION: September-16, 2003
DATE OF LAST CHANGE: Oct-24, 2003,21:55h
EMAIL: Gerd Döben-Henisch



1. Einführung

Ziel der Übungen ist es, den praktischen Umgang mit konkreten Systemen einzuüben sowie Teile der theoretischen Konzepte in funktionierende Systeme umzusetzen.

Da das primäre Ziel darin besteht, Realzeitsysteme verstehen und erzeugen zu können, zielen die Übungen darauf ab, möglichst schnell ein Verständnis für die praktische Generierung von Realzeitsystemen zu bekommen um so die Voraussetzungen zu schaffen, eigene Modelle gezielt implementieren zu können.

Ziel der heutigen Übung ist es, zunächst das Entwicklungswerkzeug ELinOS der Firma Sysgo AG nutzen zu lernen, ohne dass schon alle technischen und theoretischen Hintergründe geklärt sind; dies erfolgt schrittweise im Velauf der nächsten Vorlesungen und Übungen.

Für die ersten Beispiele wird ferner angenommen, dass diese Systeme per Diskette gebootet werden sollen. Die Libraries für Intel- und PowerPC-Plattformen stehen zur Verfügung. Wir werden zunächst nur die Intel-Plattformen berücksichtigen. Damit kann jeder das selbst erzeugte Betriebssystem auf jedem Intel-PC ausprobieren bzw. auf dem Demo-PC im RT-Lab.



START



2. ELinOS im RT-Lab

Die folgenden Informationen stammen von Gabi Czermin. Sollte es bei der Umsetzung mit den Rechnern Probleme geben, bitte Sie direkt kontaktieren (BCN 101).

ELinOS ist auf den Rechnern informatik (Terminalserver für die Räume 103 und 105), majestix(Terminalserver für Raum 105) und den Linux-Workstations in Raum 104 installiert.

Im Realzeitlabor müssen sich die Studenten am Rechner informatik mit ihrer allgemeinen Benutzerkennung anmelden, um mit ELinOS zu arbeiten.

Leider kann unter dieser Kennung aber nicht auf das Diskettenlaufwerk zugegriffen werden. Als Übergangslösung für dieses Semester ist das Verzeichnis /home/student/public/rzlab_a des Fileservers auf dem Rechner rzl_pc1 unter der Kennung rsa_01 gelinkt. Die Studierenden müssen also folgendermaßen vorgehen, um ihre Dateien auf Diskette zu bringen:

  1. Anmelden an informatik auf irgendeinem Linux-PC in BCN 103 - 105 (Achtung: Zu diesem Zweck müssen die Linux-PCs aus BCN 103 eventuell neu gestartet werden. Bitte keine 'brute-force-Methode' durch einfaches Abschalten...)

  2. Auf diesem Rechner Erzeugen des Betriebssystems für die Diskette mit ELinOS

  3. Kopieren der Datei in das Verzeichnis /public/rzlab_a

  4. Abmelden auf dem Rechner und Anmelden auf rzl_pc1 (Rechner vorne beim Dozenten) mit der Benutzerkennung ( --- Vom Dozent zu erfragen --- ), dort ins Verzeichnis rzlab_a wechseln und von da die Dateien auf Diskette speichern.

  5. Nachdem die Dateien auf die Diskette kopiert wurden, muss die Diskette jetzt noch bootfähig gemacht werden. Dies geschieht in diesem Fall mit dem Programm 'syslinux' aus dem Verzeichnis '/opt/elinos/bin'. Zu diesem Zweck wurde das Verzeichnis '/opt/elinos' auf dem Rechner rcl_pc1 gemounted.



START



3. Beispiel 1: BusyBox

Wir beginnen damit, ein schon vorhandes Projekt mit Namen 'BusyBox' im Verzeichnis '/opt/elinos/demos' in ein lauffähiges eingebettetes System zu verwandeln.

Die BusyBox ist ein Programm, das mehr als 120 UNIX-Kommandos emuliert, inklusive einer einfachen Shell. Auf der Basis von BusyBox kann man ein fast vollständiges kommandozeilenorientiertes Linux erstellen.

Der erste Schritt besteht darin, einen 'Clone' dieses Projektes zu erzeugen. Dazu wird zunächst nicht das grafische frontend benutzt, sondern die verfügbaren Shell-Befehle, hier der Befehl elinos-cloneproject im Verzeichnis /opt/elinos/bin. Man muss das Quellprojekt angeben und den Zielnamen:

 gerd@kant:~> /opt/elinos/bin/elinos-cloneproject /opt/elinos/demos/BusyBox BusyBox

Es wird ein Shellfenster geöffnet, in dem dann einige zusätzliche Angaben verlangt werden:

 
CLONING PROJECT `BusyBox' FROM `/opt/elinos/demos/BusyBox'
==========================================================

Checking existing project /opt/elinos/demos/BusyBox... ok
Checking new project BusyBox... ok
Cloning project /opt/elinos/demos/BusyBox as BusyBox... ok

CONFIGURING PROJECT
===================

Configuration: reading from ./project.config... ok

Current Settings:

   ELINOS_BOARD      = custom
   ELINOS_CPU        = x86
   ELINOS_ARCH       = 386
   ELINOS_LIBC       = libc6
   ELINOS_DOSNAME    = busybox
   ELINOS_BOOT_STRAT = floppy

Please select your board type.
(1)     386_libc5
(2)     486_libc5
(3)     486_FPU_libc5
(4)     386_FPU_libc5
(5)     dilnet_pc_libc5
(6)     386
(7)     486
(8)     486_FPU
(9)     386_FPU
(10)    dilnet_pc
(11)    custom
Board Type [custom]: 7

Wir wählen zunächst mal die angabe mit den wenigstens Randbedingungen:

Project Name (8 characters at most, no blanks) [busybox]:
You must now select the boot strategy for your new project:
(1)     floppy -- Floppy Bootstrap
(2)     lilo -- Hard-Disk Bootstrap
(3)     rolo -- x86 ROM Bootstrap with ROLO
(4)     rolo_rawdisk -- ROLO disk boot image (eg. for CompactFlash)
(5)     etherboot -- Diskless Network Bootstrap
(6)     etherboot_multi -- Diskless Network Bootstrap (one Image for Kernel/Root-Filesystem)
Boot Strategy: [floppy]: 1
Please select your kernel source tree. The suggested order is:
(1)     linux-x86-2.4.18
Kernel Source Tree [1]:
Checking Kernel-Source /opt/elinos/linux/linux-x86-2.4.18... ok
Wiping old kernel... ok
Setting up new kernel... ok

Writing file ./project.config... ok
Writing file ELINOS.sh... ok

Nach diesen Angaben kann ELinOS alle Eigenschaften definieren, die als Basis für die Erzeugung des Zielkerns gelten sollen:

 
Configuring Features in /home/gerd/BusyBox
==========================================

*** initializing features
*** feature input complete
*** initializing features
*** feature input complete
*** running feature configuration scripts ...
(prepare) done.
(commit) done.
(mkefs) done.
(kernel) done.
(unkernel) done.
*** merging kernel configuration with feature-config ...

Feature build complete.

----------------------------------------------
Your new project has been set up successfully.
To work on it, type:

  sh# cd "/home/gerd/BusyBox"
  sh# . ELINOS.sh
----------------------------------------------

CLONING DONE.

Das Shellskript ELINOS.sh hat die Funktion, eine Reihe von Umgebungsvariablen zu setzen.

Man muss jetzt in das Projektverzeichnis wechseln und dort weiterarbeiten:

gerd@kant:~> cd /home/gerd/BusyBox
gerd@kant:~/BusyBox> l
insgesamt 72
drwxr-xr-x    8 gerd     users         504 2003-10-15 08:55 ./
drwxr-xr-x   72 gerd     users        3368 2003-10-15 09:04 ../
-rw-r--r--    1 gerd     users       12708 2003-10-15 08:55 .features
-rw-r--r--    1 gerd     users        2702 2003-10-15 08:55 ELINOS.sh
-rw-r--r--    1 gerd     users        5085 2003-10-15 08:53 Makefile
-rw-r--r--    1 gerd     users         644 2003-10-15 08:53 README
drwxr-xr-x    2 gerd     users          48 2003-10-15 08:53 app.rootfs/
drwxr-xr-x    2 gerd     users          48 2003-10-15 08:53 boot/
-rw-r--r--    1 gerd     users          63 2003-10-15 08:53 busybox.mkefs
lrwxrwxrwx    1 gerd     users          32 2003-10-15 08:53 configure -> /opt/elinos/bin/elinos-configure*
lrwxrwxrwx    1 gerd     users          19 2003-10-15 08:53 elk -> /opt/elinos/bin/elk*
-rw-r--r--    1 gerd     users         210 2003-10-15 08:55 feature.mkefs
drwxr-xr-x    3 gerd     users          72 2003-10-15 08:55 feature.rootfs/
drwxr-xr-x    2 gerd     users          48 2003-10-15 08:53 kernel.rootfs/
drwxr-xr-x   14 gerd     users         688 2003-10-15 08:56 linux/
-rwxr-xr-x    1 gerd     users       21761 2003-10-15 08:53 makeboot*
-rw-r--r--    1 gerd     users         855 2003-10-15 08:55 project.config
drwxr-xr-x    3 gerd     users          72 2003-10-15 08:53 src/

gerd@kant:~/BusyBox> . ELINOS.sh

STARTING ELINOS SESSION
=======================

Setting up CDK x86_386 for libc6

$ELINOS_BOARD      = 486
$ELINOS_BIN_PREFIX = x86_386
$ELINOS_PROJECT    = /home/gerd/BusyBox
$ELINOS_DOSNAME    = busybox
$CC                = x86_386-gcc
$CXX               = x86_386-g++
$AS                = x86_386-as
$GDB               = x86_386-gdb

gerd@kant:~/BusyBox> make boot

Hiermit beginnt die eigentliche Erzeugung des neuen Zielkerns. Die Bildschirmausgabe ist nur zu Beginn und zum Ende wiedergegeben, da sie zu umfangreich ist:

Reading feature configuration ... complete
Reading implications from /opt/elinos/elk/valid.elk ... ok.
Reading implications from /home/gerd/BusyBox/valid.elk ... n/a.
make -C /home/gerd/BusyBox/linux symlinks clean install
make[1]: Entering directory `/home/gerd/BusyBox/linux'
rm -f include/asm
( cd include ; ln -sf asm-i386 asm)
( cd drivers/rtai/include ; rm -f asm ; ln -s asm-i386 asm)
make[2]: Entering directory `/home/gerd/BusyBox/linux/arch/i386/boot'
rm -f tools/build
rm -f setup bootsect zImage compressed/vmlinux.out
rm -f bsetup bbootsect bzImage compressed/bvmlinux.out
make[3]: Entering directory `/home/gerd/BusyBox/linux/arch/i386/boot/compressed'
rm -f vmlinux bvmlinux _tmp_*
make[3]: Leaving directory `/home/gerd/BusyBox/linux/arch/i386/boot/compressed'
make[2]: Leaving directory `/home/gerd/BusyBox/linux/arch/i386/boot'
.......
usw. usw.
........
 x86_386-objcopy -O binary -R .note -R .comment -S compressed/bvmlinux compressed/bvmlinux.out
tools/build -b bbootsect bsetup compressed/bvmlinux.out CURRENT > bzImage
Root device is (3, 2)
Boot sector 512 bytes.
Setup is 2516 bytes.
System is 316 kB
sh -x ./install.sh 2.4.18 bzImage /home/gerd/BusyBox/linux/System.map "/home/gerd/BusyBox/boot"
+ '[' -z x86_386 ']'
+ '[' -n /home/gerd/BusyBox/boot ']'
+ '[' '!' -d /home/gerd/BusyBox/boot ']'
+ '[' -f /home/gerd/BusyBox/boot/vmlinuz ']'
+ '[' -f /home/gerd/BusyBox/boot/System.map ']'
+ cat bzImage
+ cp /home/gerd/BusyBox/linux/System.map /home/gerd/BusyBox/boot/System.map
+ '[' -z x86_386 ']'
make[2]: Leaving directory `/home/gerd/BusyBox/linux/arch/i386/boot'
make[1]: Leaving directory `/home/gerd/BusyBox/linux'
No modules, skipping module build.
(if [ -z `sed -n '/^CONFIG_MODULES/p' /home/gerd/BusyBox/linux/.config` ]; then \
  echo "No modules, skipping module dependencies."; \
else \
  make -C /home/gerd/BusyBox/linux _modinst_post; \
fi)
No modules, skipping module dependencies.
Checking device node type on target file system ... device file system
Reading kernel configuration ... complete
Reading feature configuration ... complete
Running mkefs ... complete
Reading target file system ... complete
Reading implications from /opt/elinos/elk/valid.elk ... ok.
Reading implications from /home/gerd/BusyBox/valid.elk ... n/a.
./makeboot busybox.tgz
Checking for CONFIG_ELINOS_CMDLINE ... adding custom parameters:
"devfs=mount rw root=ramfs"

Preparing for floppy-boot:
Checking for banner ... installing default banner.
Writing syslinux.cfg ... ok.
Ok.

As a final step to get a bootable floppy disk, please copy the
following files to an empty, MS-DOS formatted floppy:

   cp syslinux.cfg /floppy/syslinux.cfg
   cp banner /floppy/banner
   cp boot/vmlinuz /floppy/linux
   cp busybox.tgz /floppy/busybox.tgz

To make the floppy bootable, please type:

   /opt/elinos/bin/syslinux /dev/fd0

                             - NOTE -

   You may need root privileges to execute the above commands.

                             - NOTE -

   You may want to customise this script to meet any special
   requirements of your target hardware. For instance, you could
   add the commands neccessary to copy the boot files to a floppy
   disk, or to the download directory of your tftp-server.
   The script is located here:
   /home/gerd/BusyBox/makeboot

gerd@kant:~/BusyBox>  

Um die neuen Systemdateien auf den Zielrechner zu bringen, muss eine Bootdiskette erzeugt werden und die Dateien müssen auf diese Diskette kopiert werden (dazu wurde vom Autor der Rechner (von 'kant' nach 'turing') gewechselt):

gerd@turing:~/BusyBox> fdformat /dev/fd0h1440
Doppelseitig, 80 Spuren, 18 Sektoren/Spur, Totale Kapazität: 1440kB.
Formatieren ... Beendet
Überprüfen ... Beendet

Falls die 'mtools' installiert sind, genügt jetzt der Befehl 'mformat':

 
gerd@turing:~/BusyBox> mformat a:
gerd@turing:~/BusyBox> mdir
 Volume in drive A has no label
 Volume Serial Number is 65B9-5AD6
Directory for A:/

No files
                          1 457 664 bytes free

gerd@turing:~/BusyBox> mcopy syslinux.cfg banner busybox.tgz a:
gerd@turing:~/BusyBox> mcopy boot/vmlinuz a:linux
gerd@turing:~/BusyBox> mdir
 Volume in drive A has no label
 Volume Serial Number is 65B9-5AD6
Directory for A:/

syslinux cfg        77 2003-10-15   9:38
banner            2532 2003-10-15   9:38
busybox  tgz    650128 2003-10-15   9:38
linux           327658 2003-10-15   9:40
        4 files             980 395 bytes
                            476 672 bytes free

Damit diese Diskette mit den Dateien als Bootdiskette angenommen wird, muss sie noch mit dem Befehl 'syslinux' bearbeitet werden:

 
gerd@turing:/> /opt/elinos/bin/syslinux /dev/fd0
gerd@turing:/>
 

Ab jetzt sollte diese Diskette von jedem geeigneten Intel-PC als Bootdiskette akzeptiert werden.

Eine anmerkung zum Dateisystem des Projektes BusyBox. Schaut man sich den Inhalt der tar-Datei an (siehe unten), dann erkennt man, dass alle Shellbefehle symbolisch auf ein einziges Programm 'busybox' gelinkt werden. Dies hängt damit zusammen, dass busybox tatsächlich nur ein einziges Binärprogramm ist, für das die Befehlsnamen der shellbefehle Eingabeparameter darstellen.

gerd@kant:~/ELINOS-TEST/BusyBox> tar ztvf busybox.tgz
 
drwxr-xr-x 0/0               0 2003-10-15 08:53:34 ./
drwxr-xr-x 0/0               0 2003-10-15 08:55:31 ./
drwxr-xr-x 0/0               0 2003-10-15 08:55:38 etc/
-rw-r--r-- 0/0              57 2003-10-15 08:55:38 etc/fstab
-rw-r--r-- 0/0              62 2003-10-15 08:55:35 etc/inittab
-rwxr-xr-x 0/0            1038 2003-10-15 08:55:31 etc/profile
drwxr-xr-x 0/0               0 2003-10-15 09:23:16 proc/
drwxr-xr-x 0/0               0 2003-10-15 09:23:16 dev/
drwxr-xr-x 0/0               0 2003-10-15 09:23:16 tmp/
drwxr-xr-x 0/0               0 2003-09-23 09:42:37 ./
drwxr-xr-x 0/0               0 2003-09-23 09:42:37 bin/
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/dd -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/cp -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/df -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/ln -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/ls -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/mv -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/ps -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/rm -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/sh -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/vi -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/cat -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/msh -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/pwd -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/sed -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/tar -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/date -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/echo -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/grep -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/gzip -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/kill -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/more -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/ping -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/stty -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/sync -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/true -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/zcat -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/chgrp -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/chmod -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/chown -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/dmesg -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/false -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/mkdir -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/mknod -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/mount -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/pidof -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/rmdir -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/sleep -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/touch -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/uname -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/gunzip -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/hostname -> busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 bin/umount -> busybox
-rwsr-sr-x 0/0          247296 2003-10-15 09:23:16 bin/busybox
drwxr-xr-x 0/0               0 2003-09-23 09:42:37 usr/
drwxr-xr-x 0/0               0 2003-09-23 09:42:37 usr/bin/
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/[ -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/du -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/id -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/nc -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/wc -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/cut -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/env -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/tee -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/tty -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/yes -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/chvt -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/find -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/free -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/head -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/tail -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/sort -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/test -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/uniq -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/dirname -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/killall -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/clear -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/reset -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/which -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/xargs -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/logger -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/telnet -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/uptime -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/whoami -> ../../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/bin/basename -> ../../bin/busybox
drwxr-xr-x 0/0               0 2003-09-23 09:42:37 usr/sbin/
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 usr/sbin/chroot -> ../../bin/busybox
drwxr-xr-x 0/0               0 2003-09-23 09:42:37 sbin/
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/halt -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/init -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/klogd -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/lsmod -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/rmmod -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/route -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/modprobe -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/poweroff -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/swapoff -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/syslogd -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/insmod -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/mkswap -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/ifconfig -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/reboot -> ../bin/busybox
lrwxrwxrwx 0/0               0 2003-09-23 09:42:37 sbin/swapon -> ../bin/busybox
drwxr-xr-x 0/0               0 2003-10-15 09:23:16 lib/
lrwxrwxrwx 0/0               0 2003-10-15 09:23:16 lib/libc.so.6 -> libc-2.2.5.so
-rwxr-xr-x 0/0         1218408 2003-10-15 09:23:17 lib/libc-2.2.5.so
lrwxrwxrwx 0/0               0 2003-10-15 09:23:17 lib/ld-linux.so.2 -> ld-2.2.5.so
-rwxr-xr-x 0/0           83220 2003-10-15 09:23:17 lib/ld-2.2.5.so
  

START



4. Beispiel 2: Zielsystem mit eigener Funktion

gerd@kant:~> /opt/elinos/bin/elinos-cloneproject /opt/elinos/demos/Hello MyFirst

CLONING PROJECT `MyFirst' FROM `/opt/elinos/demos/Hello'
========================================================

Checking existing project /opt/elinos/demos/Hello... ok
Checking new project MyFirst... ok
Cloning project /opt/elinos/demos/Hello as MyFirst... ok

CONFIGURING PROJECT
===================

Configuration: reading from ./project.config... ok

Current Settings:

   ELINOS_BOARD      = custom
   ELINOS_CPU        = x86
   ELINOS_ARCH       = 386
   ELINOS_LIBC       = libc6
   ELINOS_DOSNAME    = hello
   ELINOS_BOOT_STRAT = floppy

Please select your board type.
(1)     386_libc5
(2)     486_libc5
(3)     486_FPU_libc5
(4)     386_FPU_libc5
(5)     dilnet_pc_libc5
(6)     386
(7)     486
(8)     486_FPU
(9)     386_FPU
(10)    dilnet_pc
(11)    custom
Board Type [custom]: 7
Project Name (8 characters at most, no blanks) [hello]: myfirst
You must now select the boot strategy for your new project:
(1)     floppy -- Floppy Bootstrap
(2)     lilo -- Hard-Disk Bootstrap
(3)     rolo -- x86 ROM Bootstrap with ROLO
(4)     rolo_rawdisk -- ROLO disk boot image (eg. for CompactFlash)
(5)     etherboot -- Diskless Network Bootstrap
(6)     etherboot_multi -- Diskless Network Bootstrap (one Image for Kernel/Root-Filesystem)
Boot Strategy: [floppy]:
Please select your kernel source tree. The suggested order is:
(1)     linux-x86-2.4.18
Kernel Source Tree [1]:
Checking Kernel-Source /opt/elinos/linux/linux-x86-2.4.18... ok
Wiping old kernel... ok
Setting up new kernel... ok
Rename mkefs script "hello.mkefs" to match new project name? [y]:

Writing file ./project.config... ok
Writing file ELINOS.sh... ok


Configuring Features in /home/gerd/MyFirst
==========================================

*** initializing features
*** feature input complete
*** initializing features
*** feature input complete
*** running feature configuration scripts ...
(prepare) done.
(commit) done.
(mkefs) done.
(kernel) done.
(unkernel) done.
*** merging kernel configuration with feature-config ...

Feature build complete.

----------------------------------------------
Your new project has been set up successfully.
To work on it, type:

  sh# cd "/home/gerd/MyFirst"
  sh# . ELINOS.sh
----------------------------------------------

CLONING DONE.

gerd@kant:~>  
 erd@kant:~> cd MyFirst/
gerd@kant:~/MyFirst> l
insgesamt 76
drwxr-xr-x    8 gerd     users         536 2003-10-15 10:34 ./
drwxr-xr-x   72 gerd     users        3376 2003-10-15 10:33 ../
-rw-r--r--    1 gerd     users       12625 2003-10-15 10:34 .features
-rw-r--r--    1 gerd     users        2702 2003-10-15 10:34 ELINOS.sh
-rw-r--r--    1 gerd     users        5085 2003-10-15 10:33 Makefile
-rw-r--r--    1 gerd     users         367 2003-10-15 10:33 README
drwxr-xr-x    2 gerd     users          48 2003-10-15 10:33 app.rootfs/
-rwxr-xr-x    1 gerd     users        1178 2003-10-15 10:33 autonode.sh*
drwxr-xr-x    2 gerd     users          48 2003-10-15 10:33 boot/
lrwxrwxrwx    1 gerd     users          32 2003-10-15 10:33 configure -> /opt/elinos/bin/elinos-configure*
lrwxrwxrwx    1 gerd     users          19 2003-10-15 10:33 elk -> /opt/elinos/bin/elk*
-rw-r--r--    1 gerd     users         235 2003-10-15 10:34 feature.mkefs
drwxr-xr-x    3 gerd     users          72 2003-10-15 10:34 feature.rootfs/
drwxr-xr-x    2 gerd     users          48 2003-10-15 10:33 kernel.rootfs/
drwxr-xr-x   14 gerd     users         688 2003-10-15 10:35 linux/
-rwxr-xr-x    1 gerd     users       21761 2003-10-15 10:33 makeboot*
-rw-r--r--    1 gerd     users          39 2003-10-15 10:33 myfirst.mkefs
-rw-r--r--    1 gerd     users         855 2003-10-15 10:34 project.config
drwxr-xr-x    3 gerd     users          72 2003-10-15 10:33 src/
gerd@kant:~/MyFirst> . ELINOS.sh

STARTING ELINOS SESSION
=======================

Setting up CDK x86_386 for libc6

$ELINOS_BOARD      = 486
$ELINOS_BIN_PREFIX = x86_386
$ELINOS_PROJECT    = /home/gerd/MyFirst
$ELINOS_DOSNAME    = myfirst
$CC                = x86_386-gcc
$CXX               = x86_386-g++
$AS                = x86_386-as
$GDB               = x86_386-gdb

Eine eigenes Startprogramm durch Ersetzen der Datei /src/rc/init.c:

gerd@kant:~/MyFirst> cd src
gerd@kant:~/MyFirst/src> l
insgesamt 1
drwxr-xr-x    3 gerd     users          72 2003-10-15 10:33 ./
drwxr-xr-x    8 gerd     users         536 2003-10-15 10:34 ../
drwxr-xr-x    2 gerd     users         128 2003-10-15 10:43 rc/
gerd@kant:~/MyFirst/src> cd rc
gerd@kant:~/MyFirst/src/rc> l
insgesamt 12
drwxr-xr-x    2 gerd     users         128 2003-10-15 10:43 ./
drwxr-xr-x    3 gerd     users          72 2003-10-15 10:33 ../
-rw-r--r--    1 gerd     users         136 2003-10-15 10:33 Makefile.elinos
-rw-r--r--    1 gerd     users         461 2003-10-15 10:43 init.c
-rw-r--r--    1 gerd     users        1281 2003-10-15 10:33 init.c~

Die Datei init.c vom Projekt 'Hello' soll durch eine neue Datei ersetzt werden:




/*******************************
 *
 * init.c
 *
 * ****************************/

#include <stdio.h>
#include <unistd.h>


int main(void)
{
  int i;

  /***************************************
   Linux doesn_t like init to finish, therefore
   an infinite loop will be prepared...
  ***************************************/

	for(;;)
	{
		printf("Hallo wrld!!!\n");
		printf("This is the first Programm ...");
		for(i=0; i<100000000; i++){;}
	}
	
	return 0;
}



Die übrigen Schritte sind analog zum vorausgehenden Beispiel.


START



4. Aufgabe

Die Übung Nr.1 zielt darauf ab, (i) das Programm ELinOS so benutzen zu lernen, dass man eigene Betriebssystemkerne bootfähig erzeugen kann, und (ii), dass man im Rahmen des Betriebssystems ein eigenes Programm init.c implementieren kann, das das Verhalten des Systems steuert.

Für das Ziel (i) sollten die Beispiele aus der Übung ausreichend Informationen liefern.

Für das Ziel (ii) soll im folgenden eine Anwendungssituation skizziert werden, die den Ausgangspunkt für eine kleine Programmentwicklung darstellt (siehe nachfolgendes Diagramm):



usecase

Anwendungssituation für Übung Nr.1



  1. Eine Testperson soll anhand eines Programms getestet werden. Die Testperson muss sagen, wann das Testprogramm starten soll.

  2. Sobald die Testperson gesagt hat, dass Sie zum Test bereit ist, soll das Programm der Testperson eine kleine Testaufgabe erklären.

  3. Hat die Testperson nach der Erklärung der Aufgabe ihre Bereitschaft zum Test erklärt, dann beginnt der Test.

  4. Der Test läuft über ein bestimmtes Zeitintervall und umfasst verschiedene Aufgaben, die möglicherweise wiederholt werden.

  5. Ende des Tests ist entweder das Erreichen einer bestimmten Zeitmarke oder der Wunsch der Testperson, aufzuhören.

  6. Am Ende des Tests werden evtl. die Ergebnisse mitgeteilt.

  7. Möglicherweise kann der Test wiederholt werden.

Erwartete Ergebnisse: (i) eine bootfähige Diskette mit einem ausführbaren Programm; (ii) ein Printout mit Programm-Quelltext und hinreichenden Erläuterungen.


START