ELKS FAQ
Dieses ist eine Liste von Antworten zu haeufig gestellten Fragen ueber ELKS, auch bekannt als Linux-8086.
Diese FAQ werden von Alistair Riddoch unterhalten, basierend auf dem Original von Brian Candler; Bitte senden Sie alle Updates an air@ecs.soton.ac.uk. Die neueste Version dieses Dokuments ist unter http://www.ecs.soton.ac.uk/elks erhaeltlich. Bemerken Sie dass ELKS in der Fruehphase der Entwicklung steckt und diese Informationen moeglicherweise schnell veralten.
Uebersetzt ins Deutsche wurden die ELKS-FAQ von Gregor B. Heini. Er ist erreichbar unter tnt@swix.ch.
Zusaetzliche Informationen koennen auf der ELKS Homepage unter http://www.uk.linux.org/Linux8086.html gefunden werden.
Es gibt auch eine Mailing-Liste. Um sich anzumelden brauchen Sie bloss eine Nachricht an majordomo@vger.kernel.org zu schicken, welche den Text subscribe linux-8086 im Body enthaelt. Archive der Mailing-Liste koennen Sie unter http://epocha.pd.mcs.net/Linux8086/ erhalten. Im Moment funktioniert dieser Service jedoch nicht. Eine unoffizielle, alternative Mailing-Liste zu Linux-8086 war unter
http://www.cyberpass.net/~dummy/robert/archives/linux-8086/ zu erreichen, die aber momentan ebenfalls ausser Betrieb ist.
Bemerken Sie dass ELKS nicht gleichbedeutend mit Linux ist, und dass die Mailing-Liste nicht der richtige Ort ist um Fragen genereller Natur ueber Linux zu stellen (trotz des Namens). Diese koennen Sie stattdessen in einer der Linux-spezifischen Newsgroups, wie comp.os.linux.answers oder de.comp.os.linux.misc stellen.
Abschnitt 1 - Allgemeines
Abschnitt 2 - Uebersetzen und Installieren
Abschnitt 3 - Benuetzung von ELKS
- F3.1. Sind bcc Binaries unter Linux lauffaehig?
- F3.2. Kann ich ELKS unter DOSEMU booten?
Abschnitt 4 - Unbeantwortete Fragen
Abschnitt 1 - Allgemeines
ELKS ist das 'Embeddable Linux Kernel Subset', ein Projekt um eine kleine Kernel-Untermenge von Linux (welche im Kernel mehr oder weniger UNIX V7 Funktionalitaet bieten wird) aufzubauen, die auf Computern mit begrenzten Prozessor- und Speicherresourcen laeuft. Die anfaenglich gesetzten Ziele sind der 8086er und eventuell der 16-bit protected Mode des 286er. Ein Kernel der auf solcher Hardware lauffaehig ist, ist nuetzlich fuer Projekte von 'embedded systems', fuer dritte-Welt Entwicklungen wo andere Computer als XTs schwer erhaeltlich sind, und fuer den Gebrauch auf verschiedenen Palmtops.
Zusaetzliche Informationen ueber den Hintergrund, die Ziele und den aktuellen Zustand des Projekts koennen auf der ELKS homepage gefunden werden.
ELKS soll eine Untermenge des echten Linux sein, und klein genug um von einer einzelnen Person verstanden werden zu koennen, als ein unverzichtbares Lerninstrument. Es befindet sich in der sehr fruehen Phase der Entwicklung wo noch grosse Teile fehlen wie swapping, shared libraries,
paralleler und serieller I/O, und Netzwerkfunktionen. Trotzdem ist es bereits in der Lage zu booten, bietet virtuelle Konsolen, kann ein minix root Dateisystem auf Disketten laden, und verschiedene kleine Programme starten.
Noch nicht. Sie muessen einen ueblichen Computer mit Linux benuetzen,
die Quelldateien herunterladen und cross-compilieren um den 8086er Code zu erzeugen.
Boot und Root Diskettenabbilder sind bei der aktuellen Version von ELKS inbegriffen,
sie dienen jedoch nur als Testplattform fuer das System und sonst kann damit
nur wenig erreicht werden. Version 0.1 ist nicht mehr fern, und wenn sie veroeffentlicht werden wird, wird auch eine Art Distribution erhaeltlich
sein.
Der 8088er ist identisch zum 8086er, ausser dass er einen externen Datenbus mit nur 8-bit hat, anstatt 16-bit (und deshalb langsamer ist). Folglich laeuft ELKS mit diesem Prozessor.
Abschnitt 2 - Uebersetzen und Installieren
Der Haupt-FTP-Server
ftp://linux.mit.edu/pub/ELKS
ist momentan nicht erreichbar, und das wird wohl noch eine Weile so bleiben.Andere Adressen wo ELKS und Dev86 heruntergeladen werden kann sind:
ftp://ftp.ecs.soton.ac.uk/pub/elks/
ftp://cam053212.student.utwente.nl/pub/8086-nix/ELKS/
ftp://tsx-11.mit.edu/pub/linux/ALPHA/linux-16/
ftp://src.doc.ic.ac.uk/packages/linux/tsx-11-mirror/ALPHA/linux-16/
ftp://ftp.amscons.com/pubi/mirrors/ELKS
Wenn Sie noch weitere solche Adressen kennen oder selber eine einrichten moechten, dann benachrichtigen Sie bitte einen der Verantwortlichen.
Laden Sie dev86/Dev86-0.0.13.tar.gz und kernel/elks-0.0.66/elks-0.0.66.tar.gz (bzw. die neuesten Versionen davon) von
ftp://linux.mit.edu oder einer der anderen Adressen herunter. Entpacken Sie Dev86 in /usr/src (oder einem anderen Verzeichnis), und elks in /usr/src/linux-86:
tar -xvzf Dev86-0.0.12.tar.gz -C /usr/src
tar -xvzf elks-0.0.64.tar.gz -C /usr/src/linux-86
Die Entwicklungsumgebung wird in /usr/src/linux-86 erstellt, und die Kernelquellen sind in /usr/src/linux-86/elks.
Als Naechstes muessen Sie die Entwicklungswerkzeuge uebersetzen, welche den bcc Compiler beinhalten:
cd /usr/src/linux-86
make install
Dann koennen Sie Patches, welche auf diese Versions zugeschnitten sind auf das Quellverzeichnis anwenden;
Schliesslich uebersetzen Sie den Kernel:
# Patches anbringen (optional)
cd /usr/src/linux-86/elks
patch <patchfile
# Kernel uebersetzen
make config
make dep
make
'make config' funktioniert wie beim normalen Linux-Kernel. Die Default-Konfiguration wird auf fast allen
Systemen laufen. Aendern Sie besser keine der Einstellungen, es sei denn Sie wissen was Sie tun.
(Wenn Sie sich damit auskennen Linux Kernels mit gcc zu uebersetzen, dann werden Sie verbluefft sein wie schnell dies vonstatten geht :-) Das Resultat ist ein Disketten-Abbild namens "Image", welches Sie auf eine formatierte Disketten kopieren und davon booten koennen.
dd if=Image of=/dev/fd0
or
make disk
Sie sollten nun in der Lage sein mit dieser Diskette zu booten, aber Sie werden nicht weit kommen ohne eine root Diskette. Sie muessen mit bcc ein 'init' Programm und ein minix Dateisystem uebersetzen. Wie wird weiter unten erklaert.
Editieren Sie /usr/include/sys/vm86.h, und aendern Sie '#include <linux/vm86.h>' in '#include <asm/vm86.h>'
Nachdem der ELKS kernel gebootet hat wird er /bin/init starten. Weil wichtige Dinge wie exit() und signal() noch nicht implementiert sind kann dieses Programm nicht sehr anspruchsvoll sein. Aber Sie koennen ein einfaches 'Hallo Welt' Programm mit printf(...) oder write(STDOUT_FILENO,...) uebersetzen, und es sollte laufen.
Uebersetzen Sie Ihr Programm wie folgt:
bcc -0 -O -ansi -s sh.c -o sh
-0 waehlt 8086 Code Generierung,
-O aktiviert die Optimierungen,
-ansi schaltet ansi-style Funktionsprototypen ein, und
-s entfernt Debugsymbole aus dem Programm.
Eine echte Version von 'init' wird gerade fuer die Aufnahme in das tiny-utils Packet vorbereitet, welches ebenfalls auf linux.mit.edu erhaeltlich ist. Der Kernel Code wurde vor Kurzem geaendert, so dass er /bin/init laedt anstatt /bin/sh.
Kernel Version 0.0.66 beinhaltet eine Sammlung von nuetzlichen Werkzeugen in kernel/elks-0.0.66/elkscmd.tar.gz, welches ein init und ein login (ohne Passwortabfrage) beinhaltet. Um sie zu installieren muessen Sie beide mit
bcc -0 -O -s init.c -o init
bcc -0 -O -s login.c -o login
uebersetzen und in das /bin Verzeichnis Ihrer Root Diskette kopieren. Login benoetigt /etc/passwd und /etc/group aus einer standard Linux Distribution auf der root Diskette, damit ls -l richtig funktioniert, und /usr/lib/liberror.txt damit die Bash Fehlermeldungen richtig funktionieren.
Sie muessen eine minix Disketten erstellen die die notwendigen Dinge enthaelt. Im Moment brauchen Sie
bloss zwei Dateien - /dev/tty (4,0) und /bin/sh, welches Ihr 'Hallo Welt' Programm ist (siehe oben).
Erwarten Sie nicht mehr von ELKS im Moment... Es gibt noch sehr viel zu tun.
Bemerken Sie: /dev/tty ist verschieden vom normalen Linux welches (5,0) benuetzt.
mkdir /usr/src/root86
cd /usr/src/root86
mkdir dev
cd dev
mknod tty c 4 0
cd ..
mkdir bin
cd bin
cp <Ihr-Programm> sh
cd ..
fdformat /dev/fd0H1440 # Wenn die Disketten noch nicht formatiert wurde
mkfs -t minix /dev/fd0 1440
mount -t minix /dev/fd0 /a # Sie brauchen einen Mountpoint /a
cp -pR /usr/src/root86/* /a
umount /a
Wenn Sie einen 2.0.x Linux Kernel und mount-2.5k haben koennen Sie als
alternative das Loopback Dateisystem benuetzen um ein Diskettenabbild auf
Ihrer Harddisk zu erstellen, und es danach auf Diskette kopieren.
dd if=/dev/zero of=root.image bs=18k count=80
losetup /dev/loop0 root.image
mkfs -t minix /dev/loop0 1440
mount -t minix /dev/loop0 /a
...
umount /a
dd if=root.image of=/dev/fd0
Seit ELKS 0.0.53 funktionieren nun auch andere Disketten als 1.44M formatierte. Folgen Sie einfach den
obengenannten Anweisungen und ersetzen Sie die notwendigen Groessenangaben. Aufgrund der Art und Weise wie
360K Disketten von 1.2M Diskettenlaufwerken beschrieben werden, muessen die folgenden Anweisungen befolgt
werden wenn Sie von einem Computer mit einem 360K Laufwerk booten wollen.
Boot und Root Disketten zu erstellen die auf einem anderen Computer laufen sollen benoetigt etwas Gefuehl,
besonders wenn das Zielsystem ein 360K Diskettenlaufwerk besitzt. 360K Laufwerke (5.25 Zoll DD)
haben 40-Spur Lesekoepfe, und 1.2M (5.25 Zoll HD) haben 80-Spur Lesekoepfe. Ein 1.2M Laufwerk kann 360K Disketten
lesen, aber nicht zuverlaessig darauf schreiben, weil es magnetische Spuren schreibt die die halbe Breite haben
die ein 360K Laufwerk erwartet.
Eine Loesung ist ein 360K Laufwerk als zweites in Ihren Linux Computer einzubauen - Sie koennen dann
360K Disketten mit fdformat /dev/fd1d360 formatieren und wie ueblich Dateisysteme erstellen.
Andernfalls muessen Sie ein Diskettenabbild erstellen, es auf den PC mit dem 360K Laufwerk uebertragen
(z.B. mit einem Nullmodem-Kabel), und dann unter DOS mit rawrite auf die Diskette schreiben.
Boot Disketten.
Das 'Abbild' kann auf jede Art von Diskette geschrieben werden und wird erfolgreich booten, daher
muessen Sie bloss die Datei uebertragen und 'rawrite' benuetzen um die Diskette zu erstellen.
Root Disketten werden nun automatisch erkannt so dass Sie sie fuer andere Diskettengroessen als 1.44M nicht
mehr neu uebersetzen muessen.
Root Disketten
Sie koennen ein 360K root Abbild auf einem groesseren Laufwerk vorbereiten - wenn Sie den Befehl mkfs ausfuehren, muessen Sie '360' durch
die Groesse des Dateisystems ersetzen. Wenn Sie dann die Dateien auf diese Diskette kopiert haben unmounten
Sie sie und kreieren ein Diskettenabbild davon:
dd if=/dev/fd0 of=root.image bs=1k count=360
RAM Einschraenkungen
0.0.44 erwartet dass 640K RAM erhaeltlich ist. Die Probleme mit DEF_INITSEG und DEF_SETUPSEG wurden
jedoch behoben, so dass Sie nichts aendern muessen falls Sie nicht ueber 640K RAM verfuegen.
Die Bootdiskette Version 0.0.62 wurde dahingehend uebersetzt, dass das zweite Diskettenlaufwerk als Rootdisk benuetzt wird, weil die Funktion wait_for_keypress() noch nicht funktioniert. Sie koennen darum herumkommen wenn Sie nur ein Diskettenlaufwerk haben indem Sie einen HEX-Editor benuetzen um die Rootlaufwerk Nummer im Boot-Abbild zu aendern.
Wenn Sie eine Fehlermeldunge erhalten dass das Mounten der Root Diskette auf Laufwerk 03c0 fehlschlug,
dann laden Sie das Boot Abbild in einen HEX-Editor und suchen Sie nach c003h in der Naehe des Anfangs
und aendern Sie es auf 8003h (c003h ist 03c0h in Intel Big-Endian schreibweise). Das sollte mit jeder Version
funktionieren, jedoch ist nicht klar ob die zu aendernde Adresse von Version zu Version die selbe bleibt.
Jose@cnct.com berichtete dass die zwei zu aendernden Bytes in Version 0.0.62 0adf und 0ade seien.
Abschnitt 3 - Benuetzung von ELKS
Ja - indem Sie ein Kernel Modul laden koennen Sie ELKS Binaries direkt starten. Dies vereinfacht die
Entwicklung von Programmen unter ELKS erheblich, da man Sie auf einem normalen Linux System ausprobieren kann
(obwohl Sie moeglichweise trotzdem nicht unter ELKS laufen wenn Ihr Programm eine Kernelfunktion benuetzt die noch nicht
implementiert wurde).
cd /usr/src/linux-86/elksemu
make module
insmod binfmt_elks.o
Bemerken Sie auch dass Sie bei jedem Neustart die insmod-Zeile von neuem ausfuehren lassen muessen.
Einige kleine bcc-Testprogramme finden Sie unter /usr/src/linux-86/tests (wie z.B. eine Version von wc)
Wenn Sie beim Uebersetzen des Moduls eine Fehlermeldung "modversions.h: no such file or directory" kriegen,
dann muessen Sie das Makefile editieren um den Verweis auf diese Datei zu entfernen, also:
MODCFLAGS=-D__KERNEL__ -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer \
-fno-strength-reduce -pipe -m486 -DCPU=486 -DMODULE -DMODVERSIONS
Ja. ELKS kann unter DOSEMU 0.63.1.36 und Linux 2.0.7 aufstarten, und wahrscheinlich auch mit anderen Kombinationen der beiden.
Vergewissern Sie sich, dass Ihr Diskettenlaufwerk in /etc/dosemu.conf konfiguriert ist, und verwenden Sie das
-A Flag beim Starten von 'dos' oder 'xdos' wenn noetig, um ein Booten von Diskette zu erreichen.
floppy { device /dev/fd0 threeinch }
Abschnitt 4 - Unbeantwortete Fragen
Wir bitten Sie um Antworten auf die folgenden Fragen!
- Kann ich ELKS von DOS aus starten, wie ich Linux mit LOADLIN.EXE starten kann? Noch nicht,aber diese Moeglichkeit wird vielleicht spaeter implementiert.
- Mein Palmtop hat ein RAMDrive. Kann ELKS darauf zugreifen? (d.h. wenn/falls ELKS auf ein Msdos Dateisystem wird zugreifen koennen).
- Kann man das Boot und das Root Abbild kombinieren?
> From: Bar-David Yedidya
>
> Today I managed to combine root/boot disks using LILO. It just worked!
>
> I created /boot on the floppy, copied Image and boot.b to it,
> put in /etc (on the floppy) lilo.conf with this :
> boot=/dev/fd0
> compact
> image=/boot/Image
> label=lin16
> did lilo -r /mnt
> and Hopla!
> I didn't look at the kernel sources yet to compare the boot code of linux
> and linux-16, but I guess they act the same, and that's why lilo worked.
Es gibt Berichte dass dies unter den neuesten ELKS Versionen (>0.0.46?) nicht mehr funktioniert
(Bemerkung: wuerde dies auch mit pre 386 Computern noch funktionieren?)
Chad Page arbeitet an einem Einzel-Diskettensystem, welches in der naechsten Version erhaeltlich sein sollte.
Alistair Riddoch / last updated 15th July 1997
Uebersetzt ins Deutsche von Gregor B. Heini / 26.Oktober 1997
|