Nachdem zuvor am Beispiel einer Live-CD, mit fertigem
Iso-Image,
gezeigt wurde, wie man Linux von der CD booten kann, auf dieser Basis
einen USB-Stick analysieren kann und man dann diesen USB-Stick
bootfähig machen kann, soll nun untersucht werden, wie man,
ausgehend
von den Quellen von Linux und RTAI zu einem Iso-Image kommen kann.
Ein Weg, wie man von den Linux-Quellen zu einer
bootfähigen Diskette
kommt, wurde in Übung
Nr.4
beschrieben. Ein Beispiel dazu hat auch Herr
Jozic
dokumentiert.
Ein Weg, wie man von den Linux-Quellen mit Hilfe einer
bootfähigen
Diskette
zu einer bootfähigen CD-ROM kommt, wurde ebenfalls von Herrn
Jozic
dokumentiert.
Ein Weg, wie man von den Linux-Quellen ohne eine
bootfähige
Diskette
direkt zu einer bootfähigen CD-ROM kommt, wurde ebenfalls von Herrn
Jozic
dokumentiert. Hier gibt es eine weitere, exzellente Dokumentation des A-Teams
(die Herren Ayik,
Krsic, Massong, Naccarato und Voscak). Sie benutzen eine
Live-CD,
um ohne Linux Linux kompilieren zu können. Ferner benutzen sie
als
Boot-Version unter ELinOS nicht floppy (1), sondern CD-ROM (2).
Der einfachste Weg ist natürlich der, entsprechend
den oben
dokumentierten Beispielen mit Hilfe von ELinOS eine bootfähige
Version
aus den Quellen zu erstellen. Man muss nur die Option RTAI
zusätzlich
angeben.
Bevor wir ein eigene kleine Anwendung unter RTAI betrachten, schauen wir uns an, wie man mit ELinOS v2.2 ein fertiges Projekt klont, realisiert und dann, in einem weiteren Schritt, zu einem anderen Projekt abwandeln kann. Das Projekt, das wir klonen wollen, nennt sich RTAI und findet sich im demos-Ordner von /opt/elinos.
(Hinweis fuer die Umgebung Realzeitlabor: es ist möglich, als normaler User --nicht Root!-- alle Quellen zu kompilieren und eine bootfähige Diskette zu erzeugen. Man muss nach dem Einsatz von Diskettenbefehle nur darauf achten, dass --falls notwendig--, das Diskettenlaufwerk mit dem Befehl umount /media/floppy wieder freigegeben wird. Andernfalls muesste ein neuer User den PC von neuem starten, was etwas aufwendig ist...)
gerd@turing:~/public_html/fh/I-RT04/VL/VL10> /opt/elinos/bin/elinos-cloneproject /opt/elinos/demos/RTAI RTAIDEMO
CLONING PROJECT `RTAIDEMO' FROM `/opt/elinos/demos/RTAI'
========================================================
Checking existing project /opt/elinos/demos/RTAI... ok
Checking new project RTAIDEMO... ok
Cloning project /opt/elinos/demos/RTAI as RTAIDEMO... 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 = realtime
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]: 486
Project Name (8 characters at most, no blanks) [realtime]: RTAIDEMO
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
Rename mkefs script "realtime.mkefs" to match new project name? [y]: y
Writing file ./project.config... ok
Writing file ELINOS.sh... ok
Configuring Features in /home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO
=========================================================================
*** 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/public_html/fh/I-RT04/VL/VL10/RTAIDEMO"
sh# . ELINOS.sh
----------------------------------------------
CLONING DONE.
gerd@turing:~/public_html/fh/I-RT04/VL/VL10> su
Password:
turing:/home/gerd/public_html/fh/I-RT04/VL/VL10 # cd RTAIDEMO/
turing:/home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO # . ELINOS.sh
STARTING ELINOS SESSION
=======================
Setting up CDK x86_386 for libc6
$ELINOS_BOARD = 486
$ELINOS_BIN_PREFIX = x86_386
$ELINOS_PROJECT = /home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO
$ELINOS_DOSNAME = RTAIDEMO
$CC = x86_386-gcc
$CXX = x86_386-g++
$AS = x86_386-as
$GDB = x86_386-gdb
turing:/home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO # l
insgesamt 70
drwxr-xr-x 8 gerd users 504 2004-12-11 15:47 ./
drwxr-xr-x 4 gerd users 472 2004-12-11 15:45 ../
drwxr-xr-x 2 gerd users 48 2004-12-11 15:45 app.rootfs/
drwxr-xr-x 2 gerd users 48 2004-12-11 15:45 boot/
lrwxrwxrwx 1 gerd users 32 2004-12-11 15:45 configure -> /opt/elinos/bin/elinos-configure*
-rw-r--r-- 1 gerd users 2732 2004-12-11 15:46 ELINOS.sh
lrwxrwxrwx 1 gerd users 19 2004-12-11 15:45 elk -> /opt/elinos/bin/elk*
-rw-r--r-- 1 gerd users 380 2004-12-11 15:47 feature.mkefs
drwxr-xr-x 3 gerd users 72 2004-12-11 15:46 feature.rootfs/
-rw-r--r-- 1 gerd users 12741 2004-12-11 15:46 .features
drwxr-xr-x 2 gerd users 48 2004-12-11 15:45 kernel.rootfs/
drwxr-xr-x 14 gerd users 688 2004-12-11 15:47 linux/
-rwxr-xr-x 1 gerd users 21761 2004-12-11 15:45 makeboot*
-rw-r--r-- 1 gerd users 5085 2004-12-11 15:45 Makefile
-rw-r--r-- 1 gerd users 885 2004-12-11 15:46 project.config
-rw-r--r-- 1 gerd users 191 2004-12-11 15:45 README
-rw-r--r-- 1 gerd users 63 2004-12-11 15:45 RTAIDEMO.mkefs
drwxr-xr-x 4 gerd users 96 2004-12-11 15:45 src/
(Anmerkung : der nachfolgende Wechsel nach root ist hier noch nicht notwendig !)
turing:/home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO # make boot
Reading feature configuration ... complete
Reading implications from /opt/elinos/elk/valid.elk ... ok.
Reading implications from /home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO/valid.elk ... n/a.
make -C /home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO/linux symlinks clean install
...
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 RTAIDEMO.tgz /floppy/RTAIDEMO.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/public_html/fh/I-RT04/VL/VL10/RTAIDEMO/makeboot
Achtung: Wechsel in den normalen User-Mode!
gerd@turing:~/public_html/fh/I-RT04/VL/VL10/RTAIDEMO> fdformat /dev/fd0h1440
Doppelseitig, 80 Spuren, 18 Sektoren/Spur, Totale Kapazität: 1440kB.
Formatieren ... Beendet
Überprüfen ... Beendet
gerd@turing:~/public_html/fh/I-RT04/VL/VL10/RTAIDEMO> mformat a:
gerd@turing:~/public_html/fh/I-RT04/VL/VL10/RTAIDEMO> mdir
Volume in drive A has no label
Volume Serial Number is 7E35-AA2E
Directory for A:/
No files
1 457 664 bytes free
gerd@turing:~/public_html/fh/I-RT04/VL/VL10/RTAIDEMO> mcopy syslinux.cfg banner RTAIDEMO.tgz a:
gerd@turing:~/public_html/fh/I-RT04/VL/VL10/RTAIDEMO> mcopy boot/vmlinuz a:linux
gerd@turing:~/public_html/fh/I-RT04/VL/VL10/RTAIDEMO> mdir
Volume in drive A has no label
Volume Serial Number is 7E35-AA2E
Directory for A:/
syslinux cfg 78 2004-12-11 16:12
banner 2532 2004-12-11 16:12
RTAIDEMO tgz 848088 2004-12-11 16:12
linux 339599 2004-12-11 16:15
4 files 1 190 297 bytes
266 240 bytes free
gerd@turing:~/public_html/fh/I-RT04/VL/VL10/RTAIDEMO> /opt/elinos/bin/syslinux /dev/fd0
umount: /media/floppy: Das Gerät wird momentan noch benutzt
Man muss jetzt wiedr in den root-Modus wechseln, um auf das Floppy schreiben zu können (Im Falle des Realzeitlabors ist dies nicht notwendig !).
gerd@turing:~/public_html/fh/I-RT04/VL/VL10/RTAIDEMO> su
Password:
turing:/home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO # /opt/elinos/bin/syslinux /dev/fd0
mount: /dev/fd0 ist bereits eingehängt oder /tmp/syslinux.mnt.10865.0 wird gerade benutzt
mount: Laut mtab ist /dev/fd0 auf /media/floppy eingehängt
turing:/home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO # umount /media/floppy
turing:/home/gerd/public_html/fh/I-RT04/VL/VL10/RTAIDEMO # /opt/elinos/bin/syslinux /dev/fd0
Wenn man den PC mit der Diskette gebootet hat, wird man aufgefordert, bestimmte Module zu laden:
insmod rtai
insmod rtai_sched_up
insmod rtai_fifos
insmod rt_process
Dann kann man sein eigenes Demoprogramm starten:
/bin/cscope
Beenden erfolgt über Ctrl-C gefolgt von
rmmod rt_process
Nach diesem vorgefertigten Beispiel aus dem demos-Verzeichnis von ELinOS hier eine Abwandlung des Beispiels mit einem eigenen kleinen Modul genannt rtai_hello.c. Man kann daran ersehen, dass sich die RTAI Module genauso wie Standard Linux-Module verhalten.
/*********************** * * rtai_hello.c * ************************/Dieses Beispiel beschreibt, wie eine Meldung mittels RTAI auf der Konsole ausgegeben werden kann.
Als erstes müssen die notwendigen Headerdateien eingebunden werden (module.h, rtai.h und rati_fifos). Dann muss man in dem Ordner src/rtproc die Quelldateien des ursprünglichen Projektes RTAI löschen und dafür die neue Quelldatei rtai_hello.c einfügen. Schliesslich muss man noch das Makefile ändern. Eine mögliche Version könnte lauten:
Makefile.elinos
Die Variablen in diesem Makefile werden durch die vorausgehende Initialisierung mit dem Befehl . ELINOS.sh gesetzt. So hat z.B. die Variable MODULE_TARGET im Ausdruck $(MODULE_TARGET) in unserem Beispiel hat den Wert 'kernel.rootfs/lib/modules/2.4.18'
Die Variable $< hat die Bedeutung, dass der Wert der ersten Voraussetzung eingesetzt werden soll, das ist hier rtai_hello.c
Die Variable $@ hat die Bedeutung, dass der Dateiname des ersten Zieles eingesetzt werden soll, das ist hier rtai_hello
Sehr wichtig in diesem Makefile ist der Befehl install:, da durch diesen Befehl das kompilierte Modul zu den Modulen von rtai hinzugefügt wird.
Der weitere Ablauf ist wie bei dem vorausgehenden Beispiel, nur mit anderen Projektnamen.
Nach dem Booten der Diskette lautet die Befehlssequenz für das Laden der Module wie folgt:
insmod rtaiMan sieht, dass jetzt das eigene Modul wie ein RTAI-Modul geladen wird. Die Printouts erscheinen beim Ablauf auf dem Bildschirm.
Man entfernt dieses Modul wieder durch:
rmmode rtai_helloAnalog wie oben.
Dieses Beispiel wurde mit dem Werkzeug eLinOS 4.0 der Firma Sysgo erstellt:
gerd@linux:~/public_html/RT/ELINOS> l
insgesamt 48
drwxr-xr-x 4 gerd users 4096 2006-05-29 20:50 ./
drwxrwxr-x 4 gerd users 4096 2006-05-29 19:41 ../
drwxr-xr-x 9 gerd users 4096 2006-05-29 20:47 Hello/
gerd@linux:~/public_html/RT/ELINOS> /opt/elinos-4.0/bin/elinos-cloneproject /opt/elinos-4.0/demos/RTAI RTAI
CLONING PROJECT `RTAI' FROM `/opt/elinos-4.0/demos/RTAI'
========================================================
Checking existing project /opt/elinos-4.0/demos/RTAI ... ok
Checking new project RTAI ... ok
Cloning project /opt/elinos-4.0/demos/RTAI as RTAI ... ok
CONFIGURING PROJECT
===================
Initializing ELinOS and project dependent configuration mask ...
Collecting project environment: CDK, boot strategies, boards. Done.
Creating configuration section 'Project settings'
Creating configuration section 'Board selection'
Creating configuration section 'CPU'
Creating configuration section 'Architecture'
Creating configuration section 'Library'
Creating configuration section 'Boot strategy'
Creating configuration section 'Kernel'
Configuration:
Preparation and editing of .elinosproject ...
Current Settings:
ELINOS_PREFIX = /opt/elinos-4.0
ELINOS_BOARD = 486_FPU
ELINOS_CPU = x86
ELINOS_ARCH = 486
ELINOS_LIBC = glibc-2.3.4
ELINOS_DOSNAME = RTAI
ELINOS_BOOT_STRAT = cdrom
ELINOS_KERNELPATH = linux/linux-x86-2.4.31
Checking Kernel-Source /opt/elinos-4.0/linux/linux-x86-2.4.31 ... ok
Wiping old kernel ... ok
Setting up new kernel ... ok
*** 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.
Renaming mkefs script "realtime.mkefs" to match new project name.
Writing file ELINOS.sh ... ok
----------------------------------------------
Your new project has been set up successfully.
To work on it, type:
sh# cd "/home/gerd/public_html/RT/ELINOS/RTAI"
sh# . ELINOS.sh
----------------------------------------------
CLONING DONE.
gerd@linux:~/public_html/RT/ELINOS> l
insgesamt 52
drwxr-xr-x 5 gerd users 4096 2006-05-30 07:17 ./
drwxrwxr-x 4 gerd users 4096 2006-05-29 19:41 ../
-rw-r--r-- 1 gerd users 12983 2006-05-29 19:41 elinos_v4.0_installation_290506.odt
drwxr-xr-x 9 gerd users 4096 2006-05-29 20:47 Hello/
-rw-r--r-- 1 gerd users 16217 2006-05-29 22:45 hello_bsp_fuer CDROM_290506.odt
drwxr-xr-x 2 gerd users 4096 2006-05-29 20:51 isolinux/
drwxr-xr-x 10 gerd users 4096 2006-05-30 07:20 RTAI/
gerd@linux:~/public_html/RT/ELINOS> cd RTAI
gerd@linux:~/public_html/RT/ELINOS/RTAI> . ELINOS.sh
STARTING ELINOS SESSION
=======================
Setting up CDK x86_486 for glibc-2.3.4
$ELINOS_PREFIX = /opt/elinos-4.0
$ELINOS_BOARD = 486_FPU
$ELINOS_BIN_PREFIX = x86_486
$ELINOS_BOOT_STRAT = cdrom
$ELINOS_KERNELPATH = linux/linux-x86-2.4.31
$ELINOS_PROJECT = /home/gerd/public_html/RT/ELINOS/RTAI
$ELINOS_DOSNAME = RTAI
$CC = x86_486-gcc
$CXX = x86_486-g++
$AS = x86_486-as
$GDB = x86_486-gdb
gerd@linux:~/public_html/RT/ELINOS/RTAI> make boot
.
.
.
make[3]: Leaving directory `/home/gerd/public_html/RT/ELINOS/RTAI/linux/arch/i386/boot/compressed'
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -o tools/build tools/build.c -I/home/gerd/public_html/RT/ELINOS/RTAI/linux/include
x86_486-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 2524 bytes.
System is 337 kB
make[2]: Leaving directory `/home/gerd/public_html/RT/ELINOS/RTAI/linux/arch/i386/boot'
make[1]: Leaving directory `/home/gerd/public_html/RT/ELINOS/RTAI/linux'
Checking for mkisofs ... ok.
Checking for banner ... installing default banner.
Writing isolinux.cfg ... ok.
Preparing kernel and filesystem images ... ok.
Creating ISO filesystem .../usr/bin/mkisofs: The option '-L' is reserved by POSIX.1-2001.
/usr/bin/mkisofs: The option '-L' means 'follow all symbolic links'.
/usr/bin/mkisofs: Mkisofs-2.02 will introduce POSIX semantics for '-L'.
/usr/bin/mkisofs: Use -allow-leading-dots in future to get old mkisofs behavior.
Warning: creating filesystem that does not conform to ISO-9660.
INFO: UTF-8 character encoding detected by locale settings.
Assuming UTF-8 encoded filenames on source filesystem,
use -input-charset to override.
Size of boot image is 4 sectors -> No emulation
Total translation table size: 2048
Total rockridge attributes bytes: 866
Total directory bytes: 2048
Path table size(bytes): 26
Max brk space used 0
762 extents written (1 MB)
ok.
The CDROM Image is /home/gerd/public_html/RT/ELINOS/RTAI/boot/RTAI.iso
Now you can burn the CDROM with cdrecord or something else
- 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/public_html/RT/ELINOS/RTAI/custom.boot
Edit the "final_steps" part, where you currently find this note.
gerd@linux:~/public_html/RT/ELINOS/RTAI> cdrecord speed=40 dev=/dev/hdd boot/RTAI.iso
cdrecord: No write mode specified.
cdrecord: Asuming -tao mode.
cdrecord: Future versions of cdrecord may have different drive dependent defaults.
cdrecord: Continuing in 5 seconds...
Cdrecord-Clone 2.01 (i686-suse-linux) Copyright (C) 1995-2004 Jörg Schilling
Note: This version is an unofficial (modified) version
Note: and therefore may have bugs that are not present in the original.
Note: Please send bug reports or support requests to http://www.suse.de/feedback
Note: The author of cdrecord should not be bothered with problems in this version.
cdrecord: Operation not permitted. WARNING: Cannot set RR-scheduler
cdrecord: Permission denied. WARNING: Cannot set priority using setpriority().
cdrecord: WARNING: This causes a high risk for buffer underruns.
cdrecord: Warning: not running as root user, fs= option ignored.
scsidev: '/dev/hdd'
devname: '/dev/hdd'
scsibus: -2 target: -2 lun: -2
Warning: Open by 'devname' is unintentional and not supported.
Linux sg driver version: 3.5.27
Using libscg version 'schily-0.8'.
cdrecord: Warning: using inofficial libscg transport code version (okir@suse.de-scsi-linux-sg.c-1.83-resmgr-patch '@(#)scsi-linux-sg.c 1.83 04/05/20 Copyright 1997 J. Schilling').
Device type : Removable CD-ROM
Version : 0
Response Format: 1
Vendor_info : 'CD-R/RW '
Identifikation : 'CW099D CD-R/RW '
Revision : '12SM'
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R/CD-RW driver (mmc_cdr).
Driver flags : MMC-3 SWABAUDIO BURNFREE
Supported modes: TAO PACKET SAO SAO/R96P SAO/R96R RAW/R16 RAW/R96P RAW/R96R
Starting to write CD/DVD at speed 40 in real TAO mode for single session.
Last chance to quit, starting real write 0 seconds. Operation starts.
Track 01: Total bytes read/written: 1560576/1560576 (762 sectors).
gerd@linux:~/public_html/RT/ELINOS/RTAI>
Mit zusätzlichen Optionen: -v -tao -eject und user: root
gerd@linux:~/public_html/RT/ELINOS/RTAI> su
Password:
linux:/home/gerd/public_html/RT/ELINOS/RTAI # cdrecord -v speed=40 dev=/dev/hdd -tao -eject boot/RTAI.iso
Cdrecord-Clone 2.01 (i686-suse-linux) Copyright (C) 1995-2004 Jörg Schilling
Note: This version is an unofficial (modified) version
Note: and therefore may have bugs that are not present in the original.
Note: Please send bug reports or support requests to http://www.suse.de/feedback
Note: The author of cdrecord should not be bothered with problems in this version.
TOC Type: 1 = CD-ROM
scsidev: '/dev/hdd'
devname: '/dev/hdd'
scsibus: -2 target: -2 lun: -2
Warning: Open by 'devname' is unintentional and not supported.
Linux sg driver version: 3.5.27
Using libscg version 'schily-0.8'.
cdrecord: Warning: using inofficial libscg transport code version (okir@suse.de-scsi-linux-sg.c-1.83-resmgr-patch '@(#)scsi-linux-sg.c 1.83 04/05/20 Copyright 1997 J. Schilling').
SCSI buffer size: 64512
atapi: 1
Device type : Removable CD-ROM
Version : 0
Response Format: 1
Vendor_info : 'CD-R/RW '
Identifikation : 'CW099D CD-R/RW '
Revision : '12SM'
Device seems to be: Generic mmc CD-RW.
Current: 0x0009
Profile: 0x000A
Profile: 0x0009 (current)
Profile: 0x0008
Profile: 0x0002 (current)
Using generic SCSI-3/mmc CD-R/CD-RW driver (mmc_cdr).
Driver flags : MMC-3 SWABAUDIO BURNFREE
Supported modes: TAO PACKET SAO SAO/R96P SAO/R96R RAW/R16 RAW/R96P RAW/R96R
Drive buf size : 1951488 = 1905 KB
FIFO size : 4194304 = 4096 KB
Track 01: data 1 MB
Total size: 1 MB (00:10.18) = 764 sectors
Lout start: 2 MB (00:12/14) = 764 sectors
Current Secsize: 2048
ATIP info from disk:
Indicated writing power: 5
Is not unrestricted
Is not erasable
Disk sub type: Medium Type B, low Beta category (B-) (4)
ATIP start of lead in: -11834 (97:24/16)
ATIP start of lead out: 359849 (79:59/74)
Disk type: Short strategy type (Phthalocyanine or similar)
Manuf. index: 24
Manufacturer: SONY Corporation
Blocks total: 359849 Blocks current: 359849 Blocks remaining: 359085
Starting to write CD/DVD at speed 32 in real TAO mode for single session.
Last chance to quit, starting real write 0 seconds. Operation starts.
Waiting for reader process to fill input buffer ... input buffer ready.
BURN-Free is OFF.
Performing OPC...
Starting new track at sector: 0
Track 01: 1 of 1 MB written (fifo 100%) [buf 76%] 181.0x.
Track 01: Total bytes read/written: 1560576/1560576 (762 sectors).
Writing time: 8.340s
Average write speed 2.5x.
Fixating...
Fixating time: 19.267s
cdrecord: fifo had 25 puts and 25 gets.
cdrecord: fifo was 0 times empty and 0 times full, min fill was 100%.
linux:/home/gerd/public_html/RT/ELINOS/RTAI #
Wer ein bootfähiges Medium mit Linux und RTAI ohne die Hilfe von ELinOS erstellen will,der muss sich die entsprechenden Quellen in den passenden Versionen samt den zugehörigen Built-Werkzeugen selbst zusammenstellen und 'per Hand' ausführen. Die wohl ausführlichste Dokumentation zu diesem Prozess stellt der Artikel von Shortridge dar (siehe: http://www.aao.gov.au/local/www/ks/documents/RTAI_Install.pdf oder lokal). Wie eigene Experimente aber schnell zeigen, ist dies nicht so 'leichtgängig' wie das Arbeiten mit einem entsprechend ausgelegten Werkzeug.
Idealerweise sollte man als Umgebung für die Kompilierung eine Distribution wählen, die den gleichen Kernel hat. Dies hat den Vorteil, dass die entsprechenden Entwicklungswerkzeuge schon verfügbar sind.
Folgende konkreten Tests:
Test 1 auf Laptop Dell Latitude 100L mit Suse 10.0 mit Kernel 2.6.13-15.7 als Umgebung.
Einrichtung eines Verzeichnisses:
/home/gerd/KERNEL/RTAI
In dieses Verzeichnis die Quellen von RTAI und Linux:
gerd@linux:~/KERNEL/RTAI> cd KERNEL/RTAI
gerd@linux:~/KERNEL/RTAI> bunzip rtai-3.2.tar.bz2
gerd@linux:~/KERNEL/RTAI> tar -xzvf linux-2.6.10.tar.gz
gerd@linux:~/KERNEL/RTAI> tar -xf rtai-3.2.tar
gerd@linux:~/KERNEL/RTAI> l
insgesamt 56648
drwxr-xr-x 4 gerd users 4096 2006-01-18 09:59 ./
drwxr-xr-x 3 gerd users 4096 2006-01-18 09:55 ../
drwxr-xr-x 18 gerd users 4096 2004-12-24 22:35 linux-2.6.10/
-rw-r--r-- 1 gerd users 45799369 2006-01-12 08:58 linux-2.6.10.tar.gz
drwxr-xr-x 7 gerd users 4096 2005-05-10 14:00 rtai-3.2/
-rw-r--r-- 1 gerd users 12124160 2006-01-11 22:35 rtai-3.2.tar
gerd@linux:~/KERNEL/RTAI/linux-2.6.10> cp arch/i386/defconfig .config
gerd@linux:~/KERNEL/RTAI/linux-2.6.10> make oldconfig
gerd@linux:~/KERNEL/RTAI/linux-2.6.10> make xconfig
gerd@linux:~/KERNEL/RTAI/linux-2.6.10> make bzImage
CHK include/linux/version.h
SPLIT include/linux/autoconf.h -> include/config/*
HOSTCC scripts/basic/fixdep
scripts/basic/fixdep.c: In Funktion »parse_config_file«:
scripts/basic/fixdep.c:245: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »use_config« unterscheiden sich im Vorzeichenbesitz
scripts/basic/fixdep.c: In Funktion »parse_dep_file«:
scripts/basic/fixdep.c:299: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strchr« unterscheiden sich im Vorzeichenbesitz
scripts/basic/fixdep.c:299: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
HOSTCC scripts/basic/split-include
scripts/basic/split-include.c: In Funktion »main«:
scripts/basic/split-include.c:113: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
HOSTCC scripts/basic/docproc
scripts/basic/docproc.c: In Funktion »find_export_symbols«:
scripts/basic/docproc.c:184: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
scripts/basic/docproc.c:185: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
scripts/basic/docproc.c:202: Warnung: Zeigerziele bei Übergabe des Arguments 2 von »add_new_symbol« unterscheiden sich im Vorzeichenbesitz
scripts/basic/docproc.c: In Funktion »singfunc«:
scripts/basic/docproc.c:274: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
scripts/basic/docproc.c: In Funktion »parse_file«:
scripts/basic/docproc.c:296: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
scripts/mod/sumversion.c: In Funktion »parse_file«:
scripts/mod/sumversion.c:260: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »grab_file« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:277: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »parse_string« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:283: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »parse_comment« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c: In Funktion »parse_source_files«:
scripts/mod/sumversion.c:335: Warnung: Zeigerziele in Initialisierung unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:344: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:357: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »parse_file« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c: In Funktion »strip_rcs_crap«:
scripts/mod/sumversion.c:463: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:463: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:463: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strcmp« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:463: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:463: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strcmp« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:463: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strcmp« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:463: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strcmp« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:463: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strncmp« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:467: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:467: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:467: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:483: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c:484: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/mod/sumversion.c: In Funktion »maybe_frob_rcs_version«:
scripts/mod/sumversion.c:494: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strip_rcs_crap« unterscheiden sich im Vorzeichenbesitz
HOSTLD scripts/mod/modpost
HOSTCC scripts/kallsyms
scripts/kallsyms.c: In Funktion »read_symbol«:
scripts/kallsyms.c:152: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
scripts/kallsyms.c:153: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strcpy« unterscheiden sich im Vorzeichenbesitz
scripts/kallsyms.c: In Funktion »symbol_valid«:
scripts/kallsyms.c:190: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strstr« unterscheiden sich im Vorzeichenbesitz
scripts/kallsyms.c:194: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/kallsyms.c:194: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strcmp« unterscheiden sich im Vorzeichenbesitz
scripts/kallsyms.c:194: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strlen« unterscheiden sich im Vorzeichenbesitz
scripts/kallsyms.c:194: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strcmp« unterscheiden sich im Vorzeichenbesitz
scripts/kallsyms.c:194: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strcmp« unterscheiden sich im Vorzeichenbesitz
scripts/kallsyms.c:194: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »__builtin_strcmp« unterscheiden sich im Vorzeichenbesitz
HOSTCC scripts/conmakehash
scripts/conmakehash.c: In Funktion »getunicode«:
scripts/conmakehash.c:36: Warnung: Zeigerziele in Initialisierung unterscheiden sich im Vorzeichenbesitz
scripts/conmakehash.c:44: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
scripts/conmakehash.c:45: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »strtol« unterscheiden sich im Vorzeichenbesitz
CC arch/i386/kernel/asm-offsets.s
CHK include/asm-i386/asm_offsets.h
init/main.c: In Funktion »maxcpus«:
init/main.c:150: Warnung: Zeigerziele bei Übergabe des Arguments 2 von »get_option« unterscheiden sich im Vorzeichenbesitz
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
CC init/do_mounts.o
LD init/mounts.o
CC init/initramfs.o
init/initramfs.c: In Funktion »flush_window«:
init/initramfs.c:402: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »flush_buffer« unterscheiden sich im Vorzeichenbesitz
init/initramfs.c: In Funktion »unpack_to_rootfs«:
init/initramfs.c:443: Warnung: Zeigerziele in Zuweisung unterscheiden sich im Vorzeichenbesitz
LD init/built-in.o
HOSTCC usr/gen_init_cpio
CHK usr/initramfs_list
UPD usr/initramfs_list
CPIO usr/initramfs_data.cpio
GZIP usr/initramfs_data.cpio.gz
AS usr/initramfs_data.o
LD usr/built-in.o
CC arch/i386/kernel/process.o
arch/i386/kernel/process.c: In Funktion »show_regs«:
arch/i386/kernel/process.c:262: Warnung: Zeigerziele bei Übergabe des Arguments 2 von »show_trace« unterscheiden sich im Vorzeichenbesitz
{standard input}: Assembler messages:
{standard input}:893: Error: suffix or operands invalid for `mov'
{standard input}:894: Error: suffix or operands invalid for `mov'
{standard input}:1102: Error: suffix or operands invalid for `mov'
{standard input}:1103: Error: suffix or operands invalid for `mov'
{standard input}:1182: Error: suffix or operands invalid for `mov'
{standard input}:1183: Error: suffix or operands invalid for `mov'
{standard input}:1253: Error: suffix or operands invalid for `mov'
{standard input}:1254: Error: suffix or operands invalid for `mov'
{standard input}:1388: Error: suffix or operands invalid for `mov'
{standard input}:1400: Error: suffix or operands invalid for `mov'
make[1]: *** [arch/i386/kernel/process.o] Fehler 1
make: *** [arch/i386/kernel] Fehler 2
gerd@linux:~/KERNEL/RTAI/linux-2.6.10>
Bevor man das im Detail
analysiert ein
anderer Versuch:
Test2 mit PC (CPU Intel Celeron 2 GHZ und Matrox
G400 und
RTL-8139) mit Suse 9.2 und Kernel 2.6.8-24
gerd@kant:~> cd KERNEL/RTAI
gerd@kant:~/KERNEL/RTAI> l
insgesamt 37084
drwxr-xr-x 2 gerd users 120 2006-01-18 16:13 ./
drwxr-xr-x 3 gerd users 72 2006-01-18 16:06 ../
-rw-r--r-- 1 gerd users 36261440 2006-01-18 15:09 linux-2.6.9.tar.bz2
-rw-r--r-- 1 gerd users 1671644 2006-01-11 22:54 rtai-3.2.tar.bz2
gerd@kant:~/KERNEL/RTAI> bunzip2 linux-2.6.9.tar.bz2
gerd@kant:~/KERNEL/RTAI> l
insgesamt 201653
drwxr-xr-x 2 gerd users 112 2006-01-18 16:16 ./
drwxr-xr-x 3 gerd users 72 2006-01-18 16:06 ../
-rw-r--r-- 1 gerd users 204615680 2006-01-18 15:09 linux-2.6.9.tar
-rw-r--r-- 1 gerd users 1671644 2006-01-11 22:54 rtai-3.2.tar.bz2
gerd@kant:~/KERNEL/RTAI> tar -xf linux-2.6.9.tar
gerd@kant:~/KERNEL/RTAI> bunzip2 rtai-3.2.tar.bz2
gerd@kant:~/KERNEL/RTAI> l
insgesamt 211867
drwxr-xr-x 3 gerd users 144 2006-01-18 16:18 ./
drwxr-xr-x 3 gerd users 72 2006-01-18 16:06 ../
drwxr-xr-x 18 gerd users 600 2004-10-18 23:55 linux-2.6.9/
-rw-r--r-- 1 gerd users 204615680 2006-01-18 15:09 linux-2.6.9.tar
-rw-r--r-- 1 gerd users 12124160 2006-01-11 22:54 rtai-3.2.tar
gerd@kant:~/KERNEL/RTAI> tar -xf rtai-3.2.tar
gerd@kant:~/KERNEL/RTAI> l
insgesamt 211867
drwxr-xr-x 4 gerd users 168 2006-01-18 16:18 ./
drwxr-xr-x 3 gerd users 72 2006-01-18 16:06 ../
drwxr-xr-x 18 gerd users 600 2004-10-18 23:55 linux-2.6.9/
-rw-r--r-- 1 gerd users 204615680 2006-01-18 15:09 linux-2.6.9.tar
drwxr-xr-x 7 gerd users 456 2005-05-10 14:00 rtai-3.2/
-rw-r--r-- 1 gerd users 12124160 2006-01-11 22:54 rtai-3.2.tar
gerd@kant:~/KERNEL/RTAI> cd linux-2.6.9
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> l
insgesamt 242
drwxr-xr-x 18 gerd users 600 2004-10-18 23:55 ./
drwxr-xr-x 4 gerd users 168 2006-01-18 16:18 ../
drwxr-xr-x 24 gerd users 584 2004-10-18 23:53 arch/
-rw-r--r-- 1 gerd users 18691 2004-10-18 23:54 COPYING
-rw-r--r-- 1 gerd users 88031 2004-10-18 23:54 CREDITS
drwxr-xr-x 2 gerd users 920 2004-10-18 23:55 crypto/
drwxr-xr-x 45 gerd users 4328 2004-10-18 23:55 Documentation/
drwxr-xr-x 46 gerd users 1176 2004-10-18 23:55 drivers/
drwxr-xr-x 54 gerd users 2864 2004-10-18 23:55 fs/
drwxr-xr-x 36 gerd users 944 2004-10-18 23:53 include/
drwxr-xr-x 2 gerd users 392 2004-10-18 23:55 init/
drwxr-xr-x 2 gerd users 304 2004-10-18 23:55 ipc/
drwxr-xr-x 3 gerd users 1216 2004-10-18 23:55 kernel/
drwxr-xr-x 4 gerd users 960 2004-10-18 23:55 lib/
-rw-r--r-- 1 gerd users 54549 2004-10-18 23:54 MAINTAINERS
-rw-r--r-- 1 gerd users 42213 2004-10-18 23:54 Makefile
drwxr-xr-x 2 gerd users 1088 2004-10-18 23:55 mm/
drwxr-xr-x 32 gerd users 968 2004-10-18 23:55 net/
-rw-r--r-- 1 gerd users 13970 2004-10-18 23:55 README
-rw-r--r-- 1 gerd users 2815 2004-10-18 23:54 REPORTING-BUGS
drwxr-xr-x 9 gerd users 1280 2004-10-18 23:55 scripts/
drwxr-xr-x 3 gerd users 272 2004-10-18 23:55 security/
drwxr-xr-x 15 gerd users 496 2004-10-18 23:55 sound/
drwxr-xr-x 2 gerd users 136 2004-10-18 23:55 usr/
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> patch -p1 < ../rtai-3.2/base/arch/i386/patches/hal-linux-2.6.9-i386-r9.patch
patching file Documentation/adeos.txt
patching file Makefile
patching file adeos/Kconfig
patching file adeos/Makefile
patching file adeos/generic.c
patching file adeos/x86.c
patching file arch/i386/Kconfig
patching file arch/i386/kernel/Makefile
patching file arch/i386/kernel/adeos.c
patching file arch/i386/kernel/apic.c
patching file arch/i386/kernel/cpu/mcheck/p4.c
patching file arch/i386/kernel/cpu/mtrr/cyrix.c
patching file arch/i386/kernel/cpu/mtrr/generic.c
patching file arch/i386/kernel/cpu/mtrr/state.c
patching file arch/i386/kernel/entry.S
patching file arch/i386/kernel/i386_ksyms.c
patching file arch/i386/kernel/i8259.c
patching file arch/i386/kernel/io_apic.c
patching file arch/i386/kernel/irq.c
patching file arch/i386/kernel/process.c
patching file arch/i386/kernel/smp.c
patching file arch/i386/kernel/smpboot.c
patching file arch/i386/kernel/time.c
patching file arch/i386/kernel/timers/timer_pit.c
patching file arch/i386/kernel/timers/timer_tsc.c
patching file arch/i386/kernel/traps.c
patching file arch/i386/mm/fault.c
patching file arch/i386/mm/ioremap.c
patching file include/asm-i386/adeos.h
patching file include/asm-i386/io_apic.h
patching file include/asm-i386/mach-default/do_timer.h
patching file include/asm-i386/mach-default/irq_vectors.h
patching file include/asm-i386/mach-visws/do_timer.h
patching file include/asm-i386/mach-visws/irq_vectors.h
patching file include/asm-i386/msi.h
patching file include/asm-i386/pgalloc.h
patching file include/asm-i386/smp.h
patching file include/asm-i386/spinlock.h
patching file include/asm-i386/system.h
patching file include/linux/adeos.h
patching file include/linux/init_task.h
patching file include/linux/preempt.h
patching file include/linux/sched.h
patching file init/Kconfig
patching file init/main.c
patching file kernel/Makefile
patching file kernel/adeos.c
patching file kernel/exit.c
patching file kernel/fork.c
patching file kernel/panic.c
patching file kernel/printk.c
patching file kernel/sched.c
patching file kernel/signal.c
patching file kernel/sysctl.c
patching file mm/vmalloc.c
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> cp arch/i386/defconfig .config
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> l
insgesamt 270
drwxr-xr-x 19 gerd users 648 2006-01-18 16:24 ./
drwxr-xr-x 4 gerd users 168 2006-01-18 16:18 ../
drwxr-xr-x 2 gerd users 152 2006-01-18 16:21 adeos/
drwxr-xr-x 24 gerd users 584 2004-10-18 23:53 arch/
-rw-r--r-- 1 gerd users 26771 2006-01-18 16:24 .config
-rw-r--r-- 1 gerd users 18691 2004-10-18 23:54 COPYING
-rw-r--r-- 1 gerd users 88031 2004-10-18 23:54 CREDITS
drwxr-xr-x 2 gerd users 920 2004-10-18 23:55 crypto/
drwxr-xr-x 45 gerd users 4360 2006-01-18 16:21 Documentation/
drwxr-xr-x 46 gerd users 1176 2004-10-18 23:55 drivers/
drwxr-xr-x 54 gerd users 2864 2004-10-18 23:55 fs/
drwxr-xr-x 36 gerd users 944 2004-10-18 23:53 include/
drwxr-xr-x 2 gerd users 392 2006-01-18 16:21 init/
drwxr-xr-x 2 gerd users 304 2004-10-18 23:55 ipc/
drwxr-xr-x 3 gerd users 1240 2006-01-18 16:21 kernel/
drwxr-xr-x 4 gerd users 960 2004-10-18 23:55 lib/
-rw-r--r-- 1 gerd users 54549 2004-10-18 23:54 MAINTAINERS
-rw-r--r-- 1 gerd users 42244 2006-01-18 16:21 Makefile
drwxr-xr-x 2 gerd users 1088 2006-01-18 16:21 mm/
drwxr-xr-x 32 gerd users 968 2004-10-18 23:55 net/
-rw-r--r-- 1 gerd users 13970 2004-10-18 23:55 README
-rw-r--r-- 1 gerd users 2815 2004-10-18 23:54 REPORTING-BUGS
drwxr-xr-x 9 gerd users 1280 2004-10-18 23:55 scripts/
drwxr-xr-x 3 gerd users 272 2004-10-18 23:55 security/
drwxr-xr-x 15 gerd users 496 2004-10-18 23:55 sound/
drwxr-xr-x 2 gerd users 136 2004-10-18 23:55 usr/
############
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> make xconfig
....
RealTek RTL-8139 PCI Fast Ethernet Adapter support (8139TOO)
This is a driver for the Fast Ethernet PCI network cards based on
the RTL8139 chips. If you have one of those, say Y and read
the Ethernet-HOWTO <http://www.tldp.org/docs.html#howto>.
To compile this driver as a module, choose M here: the module
will be called 8139too. This is recommended.
--------------
Loopback device support (BLK_DEV_LOOP)
Saying Y here will allow you to use a regular file as a block
device; you can then create a file system on that block device and
mount it just as you would mount other block devices such as hard
drive partitions, CD-ROM drives or floppy drives. The loop devices
are block special device files with major number 7 and typically
called /dev/loop0, /dev/loop1 etc.
This is useful if you want to check an ISO 9660 file system before
burning the CD, or if you want to use floppy images without first
writing them to floppy. Furthermore, some Linux distributions avoid
the need for a dedicated Linux partition by keeping their complete
root file system inside a DOS FAT file using this loop device
driver.
To use the loop device, you need the losetup utility, found in the
util-linux package, see
<ftp://ftp.kernel.org/pub/linux/utils/util-linux/>.
The loop device driver can also be used to "hide" a file system in
a disk partition, floppy, or regular file, either using encryption
(scrambling the data) or steganography (hiding the data in the low
bits of, say, a sound file). This is also safe if the file resides
on a remote file server.
There are several ways of encrypting disks. Some of these require
kernel patches. The vanilla kernel offers the cryptoloop option
and a Device Mapper target (which is superior, as it supports all
file systems). If you want to use the cryptoloop, say Y to both
LOOP and CRYPTOLOOP, and make sure you have a recent (version 2.12
or later) version of util-linux. Additionally, be aware that
the cryptoloop is not safe for storing journaled filesystems.
Note that this loop device has nothing to do with the loopback
device used for network connections from the machine to itself.
To compile this driver as a module, choose M here: the
module will be called loop.
Most users will answer N here.
------------------
Pipeline profiling (ADEOS_PROFILING)
This option activates the profiling code which collects the
timestamps needed to measure the propagation time of
interrupts through the pipeline. Say N if unsure.
------------
Enhanced Real Time Clock Support (RTC)
If you say Y here and create a character special file /dev/rtc with
major number 10 and minor number 135 using mknod ("man mknod"), you
will get access to the real time clock (or hardware clock) built
into your computer.
Every PC has such a clock built in. It can be used to generate
signals from as low as 1Hz up to 8192Hz, and can also be used
as a 24 hour alarm. It reports status information via the file
/proc/driver/rtc and its behaviour is set by various ioctls on
/dev/rtc.
If you run Linux on a multiprocessor machine and said Y to
"Symmetric Multi Processing" above, you should say Y here to read
and set the RTC in an SMP compatible fashion.
If you think you have a use for such a device (such as periodic data
sampling), then say Y here, and read <file:Documentation/rtc.txt>
for details.
To compile this driver as a module, choose M here: the
module will be called rtc.
##############
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> make dep
*** Warning: make dep is unnecessary now.
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> make clean
............
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> make bzImage
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> make dep
*** Warning: make dep is unnecessary now.
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> make clean
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> make bzImage
CHK include/linux/version.h
UPD include/linux/version.h
SYMLINK include/asm -> include/asm-i386
SPLIT include/linux/autoconf.h -> include/config/*
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
HOSTCC scripts/basic/docproc
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
HOSTCC scripts/kallsyms
HOSTCC scripts/conmakehash
CC arch/i386/kernel/asm-offsets.s
CHK include/asm-i386/asm_offsets.h
UPD include/asm-i386/asm_offsets.h
CC init/main.o
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
CC init/do_mounts.o
LD init/mounts.o
CC init/initramfs.o
LD init/built-in.o
HOSTCC usr/gen_init_cpio
CPIO usr/initramfs_data.cpio
GZIP usr/initramfs_data.cpio.gz
AS usr/initramfs_data.o
LD usr/built-in.o
CC arch/i386/kernel/process.o
CC arch/i386/kernel/semaphore.o
CC arch/i386/kernel/signal.o
AS arch/i386/kernel/entry.o
CC arch/i386/kernel/traps.o
CC arch/i386/kernel/irq.o
CC arch/i386/kernel/vm86.o
CC arch/i386/kernel/ptrace.o
CC arch/i386/kernel/i8259.o
CC arch/i386/kernel/ioport.o
CC arch/i386/kernel/ldt.o
CC arch/i386/kernel/setup.o
CC arch/i386/kernel/time.o
CC arch/i386/kernel/sys_i386.o
CC arch/i386/kernel/pci-dma.o
CC arch/i386/kernel/i386_ksyms.o
CC arch/i386/kernel/i387.o
CC arch/i386/kernel/dmi_scan.o
CC arch/i386/kernel/bootflag.o
CC arch/i386/kernel/doublefault.o
CC arch/i386/kernel/acpi/boot.o
CC arch/i386/kernel/acpi/sleep.o
AS arch/i386/kernel/acpi/wakeup.o
LD arch/i386/kernel/acpi/built-in.o
CC arch/i386/kernel/cpu/common.o
CC arch/i386/kernel/cpu/proc.o
CC arch/i386/kernel/cpu/amd.o
CC arch/i386/kernel/cpu/cyrix.o
CC arch/i386/kernel/cpu/centaur.o
CC arch/i386/kernel/cpu/transmeta.o
CC arch/i386/kernel/cpu/intel.o
CC arch/i386/kernel/cpu/rise.o
CC arch/i386/kernel/cpu/nexgen.o
CC arch/i386/kernel/cpu/umc.o
CC arch/i386/kernel/cpu/mcheck/mce.o
CC arch/i386/kernel/cpu/mcheck/k7.o
CC arch/i386/kernel/cpu/mcheck/p4.o
CC arch/i386/kernel/cpu/mcheck/p5.o
CC arch/i386/kernel/cpu/mcheck/p6.o
CC arch/i386/kernel/cpu/mcheck/winchip.o
CC arch/i386/kernel/cpu/mcheck/non-fatal.o
LD arch/i386/kernel/cpu/mcheck/built-in.o
CC arch/i386/kernel/cpu/mtrr/main.o
CC arch/i386/kernel/cpu/mtrr/if.o
CC arch/i386/kernel/cpu/mtrr/generic.o
CC arch/i386/kernel/cpu/mtrr/state.o
CC arch/i386/kernel/cpu/mtrr/amd.o
CC arch/i386/kernel/cpu/mtrr/cyrix.o
CC arch/i386/kernel/cpu/mtrr/centaur.o
LD arch/i386/kernel/cpu/mtrr/built-in.o
LD arch/i386/kernel/cpu/built-in.o
CC arch/i386/kernel/timers/timer.o
CC arch/i386/kernel/timers/timer_none.o
CC arch/i386/kernel/timers/timer_tsc.o
CC arch/i386/kernel/timers/timer_pit.o
CC arch/i386/kernel/timers/common.o
LD arch/i386/kernel/timers/built-in.o
CC arch/i386/kernel/adeos.o
CC arch/i386/kernel/reboot.o
CC arch/i386/kernel/smp.o
CC arch/i386/kernel/smpboot.o
AS arch/i386/kernel/trampoline.o
CC arch/i386/kernel/mpparse.o
CC arch/i386/kernel/apic.o
CC arch/i386/kernel/nmi.o
CC arch/i386/kernel/io_apic.o
CC arch/i386/kernel/module.o
CC arch/i386/kernel/sysenter.o
LDS arch/i386/kernel/vsyscall.lds
AS arch/i386/kernel/vsyscall-int80.o
SYSCALL arch/i386/kernel/vsyscall-int80.so
AS arch/i386/kernel/vsyscall-sysenter.o
SYSCALL arch/i386/kernel/vsyscall-sysenter.so
AS arch/i386/kernel/vsyscall.o
CC arch/i386/kernel/early_printk.o
SYSCALL arch/i386/kernel/vsyscall-syms.o
LD arch/i386/kernel/built-in.o
AS arch/i386/kernel/head.o
CC arch/i386/kernel/init_task.o
LDS arch/i386/kernel/vmlinux.lds
CC arch/i386/mm/init.o
CC arch/i386/mm/pgtable.o
CC arch/i386/mm/fault.o
CC arch/i386/mm/ioremap.o
CC arch/i386/mm/extable.o
CC arch/i386/mm/pageattr.o
CC arch/i386/mm/mmap.o
LD arch/i386/mm/built-in.o
CC arch/i386/mach-default/setup.o
CC arch/i386/mach-default/topology.o
LD arch/i386/mach-default/built-in.o
LD arch/i386/crypto/built-in.o
CC kernel/sched.o
CC kernel/fork.o
CC kernel/exec_domain.o
CC kernel/panic.o
CC kernel/printk.o
CC kernel/profile.o
CC kernel/exit.o
CC kernel/itimer.o
CC kernel/time.o
CC kernel/softirq.o
CC kernel/resource.o
CC kernel/sysctl.o
CC kernel/capability.o
CC kernel/ptrace.o
CC kernel/timer.o
CC kernel/user.o
CC kernel/signal.o
CC kernel/sys.o
CC kernel/kmod.o
CC kernel/workqueue.o
CC kernel/pid.o
CC kernel/rcupdate.o
CC kernel/intermodule.o
CC kernel/extable.o
CC kernel/params.o
CC kernel/posix-timers.o
CC kernel/kthread.o
CC kernel/adeos.o
CC kernel/futex.o
CC kernel/dma.o
CC kernel/cpu.o
CC kernel/spinlock.o
CC kernel/uid16.o
CC kernel/module.o
CC kernel/kallsyms.o
CC kernel/power/main.o
CC kernel/power/process.o
CC kernel/power/console.o
CC kernel/power/pm.o
CC kernel/power/swsusp.o
CC kernel/power/smp.o
CC kernel/power/disk.o
LD kernel/power/built-in.o
CC kernel/stop_machine.o
CC kernel/audit.o
CC kernel/auditsc.o
LD kernel/built-in.o
CC mm/bootmem.o
CC mm/filemap.o
CC mm/mempool.o
CC mm/oom_kill.o
CC mm/fadvise.o
CC mm/page_alloc.o
CC mm/page-writeback.o
CC mm/pdflush.o
CC mm/prio_tree.o
CC mm/readahead.o
CC mm/slab.o
CC mm/swap.o
CC mm/truncate.o
CC mm/vmscan.o
CC mm/fremap.o
CC mm/highmem.o
CC mm/madvise.o
CC mm/memory.o
CC mm/mincore.o
CC mm/mlock.o
CC mm/mmap.o
CC mm/mprotect.o
CC mm/mremap.o
CC mm/msync.o
CC mm/rmap.o
CC mm/vmalloc.o
CC mm/page_io.o
CC mm/swap_state.o
CC mm/swapfile.o
CC mm/thrash.o
CC mm/shmem.o
LD mm/built-in.o
CC fs/open.o
CC fs/read_write.o
CC fs/file_table.o
CC fs/buffer.o
CC fs/bio.o
CC fs/super.o
CC fs/block_dev.o
CC fs/char_dev.o
CC fs/stat.o
CC fs/exec.o
CC fs/pipe.o
CC fs/namei.o
CC fs/fcntl.o
CC fs/ioctl.o
CC fs/readdir.o
CC fs/select.o
CC fs/fifo.o
CC fs/locks.o
CC fs/dcache.o
CC fs/inode.o
CC fs/attr.o
CC fs/bad_inode.o
CC fs/file.o
CC fs/dnotify.o
CC fs/filesystems.o
CC fs/namespace.o
CC fs/seq_file.o
CC fs/xattr.o
CC fs/libfs.o
CC fs/fs-writeback.o
CC fs/mpage.o
CC fs/direct-io.o
CC fs/aio.o
CC fs/eventpoll.o
CC fs/nfsctl.o
CC fs/binfmt_aout.o
CC fs/binfmt_misc.o
CC fs/binfmt_script.o
CC fs/binfmt_elf.o
CC fs/mbcache.o
CC fs/autofs4/init.o
CC fs/autofs4/inode.o
CC fs/autofs4/root.o
CC fs/autofs4/symlink.o
CC fs/autofs4/waitq.o
CC fs/autofs4/expire.o
LD fs/autofs4/autofs4.o
LD fs/autofs4/built-in.o
CC fs/devpts/inode.o
LD fs/devpts/devpts.o
LD fs/devpts/built-in.o
CC fs/exportfs/expfs.o
LD fs/exportfs/exportfs.o
LD fs/exportfs/built-in.o
CC fs/ext2/balloc.o
CC fs/ext2/bitmap.o
CC fs/ext2/dir.o
CC fs/ext2/file.o
CC fs/ext2/fsync.o
..................
GEN .version
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
LD init/built-in.o
LD .tmp_vmlinux1
KSYM .tmp_kallsyms1.S
AS .tmp_kallsyms1.o
LD .tmp_vmlinux2
KSYM .tmp_kallsyms2.S
AS .tmp_kallsyms2.o
LD vmlinux
SYSMAP System.map
SYSMAP .tmp_System.map
AS arch/i386/boot/bootsect.o
LD arch/i386/boot/bootsect
AS arch/i386/boot/setup.o
LD arch/i386/boot/setup
AS arch/i386/boot/compressed/head.o
CC arch/i386/boot/compressed/misc.o
OBJCOPY arch/i386/boot/compressed/vmlinux.bin
GZIP arch/i386/boot/compressed/vmlinux.bin.gz
LD arch/i386/boot/compressed/piggy.o
LD arch/i386/boot/compressed/vmlinux
OBJCOPY arch/i386/boot/vmlinux.bin
HOSTCC arch/i386/boot/tools/build
BUILD arch/i386/boot/bzImage
Root device is (3, 2)
Boot sector 512 bytes.
Setup is 2346 bytes.
System is 1868 kB
Kernel: arch/i386/boot/bzImage is ready
gerd@kant:~/KERNEL/RTAI/linux-2.6.9>
################
gerd@kant:~/KERNEL/RTAI/linux-2.6.9> make modules
CHK include/linux/version.h
make[1]: »arch/i386/kernel/asm-offsets.s« ist bereits aktualisiert.
CC [M] drivers/base/firmware_class.o
CC [M] drivers/char/agp/intel-mch-agp.o
CC [M] drivers/net/dummy.o
CC [M] drivers/net/s2io.o
CC [M] drivers/scsi/dpt_i2o.o
drivers/scsi/dpt_i2o.c: In function `adpt_read_blink_led':
drivers/scsi/dpt_i2o.c:160: warning: passing arg 1 of `readb' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:161: warning: passing arg 1 of `readb' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c: In function `adpt_i2o_post_this':
drivers/scsi/dpt_i2o.c:1229: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:1246: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c: In function `adpt_i2o_reset_hba':
drivers/scsi/dpt_i2o.c:1305: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:1334: warning: passing arg 1 of `memcpy_toio' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:1336: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:1356: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c: In function `adpt_isr':
drivers/scsi/dpt_i2o.c:2018: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2019: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2023: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2032: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2033: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2039: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2044: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2045: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2048: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2050: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2057: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2064: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2071: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2078: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c: In function `adpt_i2o_to_scsi':
drivers/scsi/dpt_i2o.c:2241: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2245: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2250: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2261: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c: In function `adpt_send_nop':
drivers/scsi/dpt_i2o.c:2646: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2663: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c: In function `adpt_i2o_init_outbound_q':
drivers/scsi/dpt_i2o.c:2680: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2713: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2754: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c: In function `adpt_i2o_status_get':
drivers/scsi/dpt_i2o.c:2798: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/dpt_i2o.c:2825: warning: passing arg 2 of `writel' makes pointer from integer without a cast
CC [M] drivers/scsi/ipr.o
drivers/scsi/ipr.c: In function `ipr_mask_and_clear_interrupts':
drivers/scsi/ipr.c:522: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:525: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:526: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_do_req':
drivers/scsi/ipr.c:667: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_send_hcam':
drivers/scsi/ipr.c:760: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_wait_iodbg_ack':
drivers/scsi/ipr.c:1363: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_get_ldump_data_section':
drivers/scsi/ipr.c:1398: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:1410: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:1413: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:1417: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:1429: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c:1436: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:1442: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:1445: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:1449: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:1454: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_handle_other_interrupt':
drivers/scsi/ipr.c:3172: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:3175: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:3176: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_isr':
drivers/scsi/ipr.c:3225: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c:3226: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c:3277: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:3278: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_queuecommand':
drivers/scsi/ipr.c:3919: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_reset_enable_ioa':
drivers/scsi/ipr.c:4799: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c:4803: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:4804: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c:4809: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:4811: warning: passing arg 2 of `writel' makes pointer from integer without a cast
drivers/scsi/ipr.c:4812: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_get_unit_check_buffer':
drivers/scsi/ipr.c:4882: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_reset_allowed':
drivers/scsi/ipr.c:5018: warning: passing arg 1 of `readl' makes pointer from integer without a cast
drivers/scsi/ipr.c: In function `ipr_reset_alert':
drivers/scsi/ipr.c:5076: warning: passing arg 2 of `writel' makes pointer from integer without a cast
CC [M] drivers/scsi/sata_sis.o
CC [M] drivers/scsi/sata_sx4.o
CC [M] drivers/usb/input/touchkitusb.o
CC [M] drivers/usb/misc/cytherm.o
CC [M] drivers/usb/misc/phidgetservo.o
CC [M] net/ipv4/netfilter/iptable_raw.o
CC [M] net/ipv4/netfilter/ipt_NOTRACK.o
CC [M] lib/libcrc32c.o
Building modules, stage 2.
MODPOST
CC drivers/base/firmware_class.mod.o
LD [M] drivers/base/firmware_class.ko
CC drivers/char/agp/intel-mch-agp.mod.o
LD [M] drivers/char/agp/intel-mch-agp.ko
CC drivers/net/dummy.mod.o
LD [M] drivers/net/dummy.ko
CC drivers/net/s2io.mod.o
LD [M] drivers/net/s2io.ko
CC drivers/scsi/dpt_i2o.mod.o
LD [M] drivers/scsi/dpt_i2o.ko
CC drivers/scsi/ipr.mod.o
LD [M] drivers/scsi/ipr.ko
CC drivers/scsi/sata_sis.mod.o
LD [M] drivers/scsi/sata_sis.ko
CC drivers/scsi/sata_sx4.mod.o
LD [M] drivers/scsi/sata_sx4.ko
CC drivers/usb/input/touchkitusb.mod.o
LD [M] drivers/usb/input/touchkitusb.ko
CC drivers/usb/misc/cytherm.mod.o
LD [M] drivers/usb/misc/cytherm.ko
CC drivers/usb/misc/phidgetservo.mod.o
LD [M] drivers/usb/misc/phidgetservo.ko
CC lib/libcrc32c.mod.o
LD [M] lib/libcrc32c.ko
CC net/ipv4/netfilter/ipt_NOTRACK.mod.o
LD [M] net/ipv4/netfilter/ipt_NOTRACK.ko
CC net/ipv4/netfilter/iptable_raw.mod.o
LD [M] net/ipv4/netfilter/iptable_raw.ko
#################
gerd@kant:~/KERNEL/RTAI/linux-2.6.9>
su
Password:
kant:/home/gerd/KERNEL/RTAI/linux-2.6.9
# make modules_install
INSTALL drivers/base/firmware_class.ko
INSTALL drivers/char/agp/intel-mch-agp.ko
INSTALL drivers/net/dummy.ko
INSTALL drivers/net/s2io.ko
INSTALL drivers/scsi/dpt_i2o.ko
INSTALL drivers/scsi/ipr.ko
INSTALL drivers/scsi/sata_sis.ko
INSTALL drivers/scsi/sata_sx4.ko
INSTALL drivers/usb/input/touchkitusb.ko
INSTALL drivers/usb/misc/cytherm.ko
INSTALL drivers/usb/misc/phidgetservo.ko
INSTALL lib/libcrc32c.ko
INSTALL net/ipv4/netfilter/ipt_NOTRACK.ko
INSTALL net/ipv4/netfilter/iptable_raw.ko
if [ -r System.map ]; then /sbin/depmod -ae -F System.map 2.6.9-adeos; fi
---------------------------------------------------
Im Artikel von Shortridge heisst es nun:
"Create the initrd RAM disk
file.
mkinitrd
/boot/initrd-2.6.8.1-adeos.img 2.6.8.1-adeos
The second argument, the
version string,
allows mkinitrd to locate the files it needs to build the disk file
whose name is given in the first argument. For some reason I find I
keep forgetting the .img extension for this file, and I also seem
incapable of typing adeoa sorry,
adeos
properly. Just check your typing. The kernel build HOW-TO file points
out that some distributions, for example, SUSE, have a version of
mkinitrd that uses a slightly different syntax."
In der tat ist das Konzept
des scripts
mkinitrd bei Suse 9.2 so verschieden, dass eine direkte Fortsetzung
nicht möglich war.
Zum Thema 'mkinitrd' findet
sich einmal
eine ausführliche Doku bei den Quellen, darueberhinaus aber
auch
folgender Artikel:
http://www.almesberger.net/cv/papers/ols2k-9.ps.gz
oder lokal
-----------------------------------------------------------------------------------------------------------------------
Written 1996,2000 by Werner Almesberger <werner.almesberger@epfl.ch> and
Hans Lermen
<lermen@fgan.de>
initrd provides the capability to load a RAM disk by the boot loader.
This RAM disk can then be mounted as the root file system and programs
can be run from it. Afterwards, a new root file system can be mounted
from a different device. The previous root (from initrd) is then moved
to a directory and can be subsequently unmounted.
initrd is mainly designed to allow system startup to occur in two phases,
where the kernel comes up with a minimum set of compiled-in drivers, and
where additional modules are loaded from initrd.
This document gives a brief overview of the use of initrd. A more detailed
discussion of the boot process can be found in [1].
Operation
---------
When using initrd, the system typically boots as follows:
1) the boot loader loads the kernel and the initial RAM disk
2) the kernel converts initrd into a "normal" RAM disk and
frees the memory used by initrd
3) initrd is mounted read-write as root
4) /linuxrc is executed (this can be any valid executable, including
shell scripts; it is run with uid 0 and can do basically everything
init can do)
5) linuxrc mounts the "real" root file system
6) linuxrc places the root file system at the root directory using the
pivot_root system call
7) the usual boot sequence (e.g. invocation of /sbin/init) is performed
on the root file system
8) the initrd file system is removed
Note that changing the root directory does not involve unmounting it.
It is therefore possible to leave processes running on initrd during that
procedure. Also note that file systems mounted under initrd continue to
be accessible.
Operation
---------
When using initrd, the system typically boots as follows:
1) the boot loader loads the kernel and the initial RAM disk
2) the kernel converts initrd into a "normal" RAM disk and
frees the memory used by initrd
3) initrd is mounted read-write as root
4) /linuxrc is executed (this can be any valid executable, including
shell scripts; it is run with uid 0 and can do basically everything
init can do)
5) linuxrc mounts the "real" root file system
6) linuxrc places the root file system at the root directory using the
pivot_root system call
7) the usual boot sequence (e.g. invocation of /sbin/init) is performed
on the root file system
8) the initrd file system is removed
Note that changing the root directory does not involve unmounting it.
It is therefore possible to leave processes running on initrd during that
procedure. Also note that file systems mounted under initrd continue to
be accessible.
Installation
------------
First, a directory for the initrd file system has to be created on the
"normal" root file system, e.g.
# mkdir /initrd
The name is not relevant. More details can be found on the pivot_root(2)
man page.
If the root file system is created during the boot procedure (i.e. if
you're building an install floppy), the root file system creation
procedure should create the /initrd directory.
If initrd will not be mounted in some cases, its content is still
accessible if the following device has been created (note that this
does not work if using devfs):
# mknod /dev/initrd b 1 250
# chmod 400 /dev/initrd
Second, the kernel has to be compiled with RAM disk support and with
support for the initial RAM disk enabled. Also, at least all components
needed to execute programs from initrd (e.g. executable format and file
system) must be compiled into the kernel.
Third, you have to create the RAM disk image. This is done by creating a
file system on a block device, copying files to it as needed, and then
copying the content of the block device to the initrd file. With recent
kernels, at least three types of devices are suitable for that:
- a floppy disk (works everywhere but it's painfully slow)
- a RAM disk (fast, but allocates physical memory)
- a loopback device (the most elegant solution)
We'll describe the loopback device method:
1) make sure loopback block devices are configured into the kernel
2) create an empty file system of the appropriate size, e.g.
# dd if=/dev/zero of=initrd bs=300k count=1
# mke2fs -F -m0 initrd
(if space is critical, you may want to use the Minix FS instead of Ext2)
3) mount the file system, e.g.
# mount -t ext2 -o loop initrd /mnt
4) create the console device (not necessary if using devfs, but it can't
hurt to do it anyway):
# mkdir /mnt/dev
# mknod /mnt/dev/console c 5 1
5) copy all the files that are needed to properly use the initrd
environment. Don't forget the most important file, /linuxrc
Note that /linuxrc's permissions must include "x" (execute).
6) correct operation the initrd environment can frequently be tested
even without rebooting with the command
# chroot /mnt /linuxrc
This is of course limited to initrds that do not interfere with the
general system state (e.g. by reconfiguring network interfaces,
overwriting mounted devices, trying to start already running demons,
etc. Note however that it is usually possible to use pivot_root in
such a chroot'ed initrd environment.)
7) unmount the file system
# umount /mnt
8) the initrd is now in the file "initrd". Optionally, it can now be
compressed
# gzip -9 initrd
For experimenting with initrd, you may want to take a rescue floppy and
only add a symbolic link from /linuxrc to /bin/sh. Alternatively, you
can try the experimental newlib environment [2] to create a small
initrd.
Finally, you have to boot the kernel and load initrd. Almost all Linux
boot loaders support initrd. Since the boot process is still compatible
with an older mechanism, the following boot command line parameters
have to be given:
root=/dev/ram0 init=/linuxrc rw
if not using devfs, or
root=/dev/rd/0 init=/linuxrc rw
if using devfs. (rw is only necessary if writing to the initrd file
system.)
With LOADLIN, you simply execute
LOADLIN <kernel> initrd=<disk_image>
e.g. LOADLIN C:\LINUX\BZIMAGE initrd=C:\LINUX\INITRD.GZ root=/dev/ram0
init=/linuxrc rw
With LILO, you add the option INITRD=<path> to either the global section
or to the section of the respective kernel in /etc/lilo.conf, and pass
the options using APPEND, e.g.
image = /bzImage
initrd = /boot/initrd.gz
append = "root=/dev/ram0 init=/linuxrc rw"
and run /sbin/lilo
For other boot loaders, please refer to the respective documentation.
Now you can boot and enjoy using initrd.
Changing the root device
------------------------
When finished with its duties, linuxrc typically changes the root device
and proceeds with starting the Linux system on the "real" root device.
The procedure involves the following steps:
- mounting the new root file system
- turning it into the root file system
- removing all accesses to the old (initrd) root file system
- unmounting the initrd file system and de-allocating the RAM disk
Mounting the new root file system is easy: it just needs to be mounted on
a directory under the current root. Example:
# mkdir /new-root
# mount -o ro /dev/hda1 /new-root
The root change is accomplished with the pivot_root system call, which
is also available via the pivot_root utility (see pivot_root(8) man
page; pivot_root is distributed with util-linux version 2.10h or higher
[3]). pivot_root moves the current root to a directory under the new
root, and puts the new root at its place. The directory for the old root
must exist before calling pivot_root. Example:
# cd /new-root
# mkdir initrd
# pivot_root . initrd
Now, the linuxrc process may still access the old root via its
executable, shared libraries, standard input/output/error, and its
current root directory. All these references are dropped by the
following command:
# exec chroot . what-follows <dev/console >dev/console 2>&1
Where what-follows is a program under the new root, e.g. /sbin/init
If the new root file system will be used with devfs and has no valid
/dev directory, devfs must be mounted before invoking chroot in order to
provide /dev/console.
Note: implementation details of pivot_root may change with time. In order
to ensure compatibility, the following points should be observed:
- before calling pivot_root, the current directory of the invoking
process should point to the new root directory
- use . as the first argument, and the _relative_ path of the directory
for the old root as the second argument
- a chroot program must be available under the old and the new root
- chroot to the new root afterwards
- use relative paths for dev/console in the exec command
Now, the initrd can be unmounted and the memory allocated by the RAM
disk can be freed:
# umount /initrd
# blockdev --flushbufs /dev/ram0 # /dev/rd/0 if using devfs
It is also possible to use initrd with an NFS-mounted root, see the
pivot_root(8) man page for details.
Note: if linuxrc or any program exec'ed from it terminates for some
reason, the old change_root mechanism is invoked (see section "Obsolete
root change mechanism").
Usage scenarios
---------------
The main motivation for implementing initrd was to allow for modular
kernel configuration at system installation. The procedure would work
as follows:
1) system boots from floppy or other media with a minimal kernel
(e.g. support for RAM disks, initrd, a.out, and the Ext2 FS) and
loads initrd
2) /linuxrc determines what is needed to (1) mount the "real" root FS
(i.e. device type, device drivers, file system) and (2) the
distribution media (e.g. CD-ROM, network, tape, ...). This can be
done by asking the user, by auto-probing, or by using a hybrid
approach.
3) /linuxrc loads the necessary kernel modules
4) /linuxrc creates and populates the root file system (this doesn't
have to be a very usable system yet)
5) /linuxrc invokes pivot_root to change the root file system and
execs - via chroot - a program that continues the installation
6) the boot loader is installed
7) the boot loader is configured to load an initrd with the set of
modules that was used to bring up the system (e.g. /initrd can be
modified, then unmounted, and finally, the image is written from
/dev/ram0 or /dev/rd/0 to a file)
8) now the system is bootable and additional installation tasks can be
performed
The key role of initrd here is to re-use the configuration data during
normal system operation without requiring the use of a bloated "generic"
kernel or re-compiling or re-linking the kernel.
A second scenario is for installations where Linux runs on systems with
different hardware configurations in a single administrative domain. In
such cases, it is desirable to generate only a small set of kernels
(ideally only one) and to keep the system-specific part of configuration
information as small as possible. In this case, a common initrd could be
generated with all the necessary modules. Then, only /linuxrc or a file
read by it would have to be different.
A third scenario are more convenient recovery disks, because information
like the location of the root FS partition doesn't have to be provided at
boot time, but the system loaded from initrd can invoke a user-friendly
dialog and it can also perform some sanity checks (or even some form of
auto-detection).
Last not least, CD-ROM distributors may use it for better installation
from CD, e.g. by using a boot floppy and bootstrapping a bigger RAM disk
via initrd from CD; or by booting via a loader like LOADLIN or directly
from the CD-ROM, and loading the RAM disk from CD without need of
floppies.
Obsolete root change mechanism
------------------------------
The following mechanism was used before the introduction of pivot_root.
Current kernels still support it, but you should _not_ rely on its
continued availability.
............
Resources
[1] Almesberger, Werner; "Booting Linux: The History and the Future"
http://www.almesberger.net/cv/papers/ols2k-9.ps.gz
[2] newlib package (experimental), with initrd example
http://sources.redhat.com/newlib/
[3] Brouwer, Andries; "util-linux: Miscellaneous utilities for Linux"
ftp://ftp.win.tue.nl/pub/linux-local/utils/util-linux/
------------------------------------------------------------
Das Projekt ist damit noch
keinesfalls
an seinem Ende angelangt....
Noch zu schreiben...