Grundlagen der Betriebssysteme

Praktische Einführung mit Virtualisierung

Stefan Bosse

Universität Koblenz - FB Informatik

1 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS ::

Das Basekernel OS

  1. Kernel

  2. Anwenderprogrammme

  3. Standardbibliothek

2 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Kernel

Kernel

Der Kernel des Basesystem OS hat eine klassische monolithische Kernelarchitektur. Wesentliche Bestandteile der innersten ersten Schicht und Basisdienste sind:

  1. Kernel Startup (aka. "main" Funktion)
    • Assembler kernelcore.S
    • C main.c
  2. Speichermanagement
    • page.c (VMM)
    • pagetable.c (VMM)
    • kmalloc.c
  3. Prozessmanagement
    • process.c (Programmausführung)
    • elf.c (Programmformat)
  4. Systemaufruf Schnittstelle (für Anwendungsprogramme)
    • syscall_handler.c
  5. Ereignismanagement
    • event.c
    • interrupt.c
3 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Kernel

Kernel

Weitere Bestandteile der zweiten Schicht und Basisdienste sind:

  1. Gerätemanagement

    • device.c (Gerätetreiberschnittstelle)
    • pipe.c (Queues zwischen Prozessen)
  2. Dateisystem

    • diskfs.c
    • fs.c (allgemeine Dateisystemschnittstelle)
    • cdromfs.c
  3. (Block) Cache

    • bcache.c
  4. Ein- und Ausgabe (eher minimale Standardblibliothek für den Kernel)

    • console.c
    • `graphics.c'
    • printf.c
    • string.c
4 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Kernel

Kernel

Weitere Bestandteile der nullten Schicht sind hardwarenahe Komponenten:

  1. Gerätetreiber

    • console.c
    • graphics.c
    • pic.c (Interruptcontroller)
    • ata.c (Parallele Geräteschnittstelle für Blockgeräte, HDD, CDROM)
    • clock.c (Timer)
    • keyboard.c (Tastatur)
    • serical.c (Serielle UART Schnittstelle)
    • rtc.c (Real Time Clock ⇒ Systemuhr)
  2. Datenstrukturen

    • list.c
    • hash_set.c
5 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Kernel

Kernel

Schichtenaufbau des monolithischen Basekernel

6 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Standardbibliothek

Standardbibliothek

Die Standardbibliothek implementiert häufig vorkommende Funktionen für:

  • Ein- und Ausgabe
  • Dateioperationen
  • Speichermanagement (oder eine Schnittstelle dazu)
  • Systemaufrufe

Sie wird von allen Nutzerprogrammen (user space) verwendet. Funktionen für Netzwerkzugriff (Sockets) und vieles mehr kann noch enthalten sein.

7 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Standardbibliothek

Standardbibliothek

  1. Systemaufrufschnittstelle

    • C syscalls.s
    • Assembler syscall.S
  2. Speichermanagement (USer space)

    • malloc.c
  3. Ein- und Ausgabe

    • stdio.c
  4. Sonstiges

    • user_start-c (Start eines Benutzerprogramms)
    • errno.c (Fehlerbehandlung)
8 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Standardbibliothek

Standardbibliothek

  1. Zeichenketten

    • string.c
  2. Allgemeine Funktionen

    • stdlib.c (Programmausführung, Zeit, Systeminformation usw.)
  3. Konsole und Grafiksystem (Fenster)

    • nwindow.c
9 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Benutzerpogramme

Benutzerpogramme

Im wesentlichen gibt es nur eine Shell. Die Aufgabe einer Shell ist:

  1. Interaktive eingegebene Befehle von einer Kommandozeile unmittelbar ausführen ⇒ Nutzerbetrieb
  2. Shellskripte (kleine Programme als Sammlung von Shellbefehlen) ausführen ⇒ Stapelbetrieb

Dabei sollen zwei primäre Schnittstellen zum Betriebssystem auf programmatische und interaktive Weise zur Verfügung gestellt werden (Operationalität):

  1. Dateisystem, Textdatein
  2. Prozesse und Programme
  3. Ein-und Ausgabe (Terminal)
10 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Shell

Shell

Die meisten gängigen Unix-Shells bieten die folgenden Funktionen:

Wikipedia

  • Starten von Kommandos
  • Dateinamen-Wildcards (globs) als Kommandoargumente
  • Bedingungen (if, case) und Schleifen (while, for)
  • interne Kommandos (cd, read)
  • interne Variablen ($HOME)
  • Manipulation der Umgebungsvariablen für die neuen Prozesse
  • Ein-/Ausgabeumlenkung
  • Starten mehrerer Prozesse, Verkettung über Pipes
  • Starten von Prozessen im Hintergrund
11 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Shell

Shell

Moderne Shells können darüber hinaus:

  • Vervollständigung von Kommandos, Dateinamen und Variablen (completion system)
  • Editieren der Kommandozeile (command line editing)
  • Wiederholung und Editieren früherer Kommandos (command history)
  • Stoppen und erneutes Starten von Prozessen (job control)
  • Verschieben von Prozessen aus dem Vordergrund in den Hintergrund und umgekehrt (job control)
  • Eingebautes Kommando zur Durchführung von Berechnungen ($((2+2)))
  • Eingebautes Kommando zum Testen von Dateieigenschaften (test)
12 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Shell

Shell

Skripte

  • Shellskripte sind Text-Dateien und stellen kleine Programme dar.

    • Sie werden vom Anwender geschrieben und beim Aufruf von der Shell gelesen und ausgeführt.
    • Muss man z. B. immer wieder in seinem Arbeitsalltag fünf Befehle nacheinander in die Shell eintippen, kann man das vereinfachen, indem man diese Befehle in einem Skript sammelt und dann nur noch das ganze Skript aufruft.
  • Die Shell liest das Skript aus und führt die Befehle entsprechend aus. Zu beachten ist, dass man alle Befehle, die man „händisch“ in die Shell eingibt, auch über ein Skript ausführen kann und umgekehrt.

13 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Dienstprogramme

Dienstprogramme

  1. Shell
    • shell.c (sehr einfacher Shell Intepreter, kein Skripting)
  2. Prozess Manager
    • Nur Prozessinformation durch procstat.c
    • Steuerung von Prozessausführung (stoppen) gibt es hier nicht
  3. Systeminformationen
    • systats.c
  4. Dateisystemedienste
    • livestat.c (Information über Gerätetreiber/Gerät und Cache)
    • copy.c (Datei kopieren)
  5. Fenstermanager
    • manager.c (Grafiksystem, Verwaltung von Fenstern)
14 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Der Erzeugungsprozess

Der Erzeugungsprozess

Es müssen folgende Komponenten von Quellcode (C/Assembler) in binäre Programmdaten übersetzt werden:

  1. Der Kernel (kernel) und Bootloader (bootblock)
  2. Die Standardbibliothek (baselib.a)
    • Hier nur als Archiv (a), nicht als geteilte (shared) Bibliothek (dll/so) baselib.a
    • Alle Programme werden statisch (d.h. vollständig enthaltend) kompiliert und erzeugt.
  3. Die Nutzerprogramme

Für den gesamtn Übersetzungsprozess wird ein GCC Kompiler verwendet. Dieser enthält neben dem Präprozessor cpp, den eigentlichen Kompiler cc noch einen Assembler as und einen Linker ld. Weitere Hilfsprogramme vor allem für das ELF Format werden benutzt (objdump, objcopy, ar).

15 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Der Erzeugungsprozess

Der Erzeugungsprozess

Es muss GCC mit 32 Bit x86 ELF (Executable Link Format) verwendet werden. Andere Prrogrammformate und Prozessorarchitekturen führen zu einem nicht funktionieren Basekernl OS (sowohl Kernel als auch Nutzerprogramme).

  • Der gesamte Übersetzungsprozess wird mit dem make Programm gesteuert.

make (englisch für machen, erstellen) ist ein Build-Management-Tool, das Kommandos in Abhängigkeit von Bedingungen ausführt. Es wird hauptsächlich bei der Softwareentwicklung als Programmierwerkzeug eingesetzt.

16 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Der Erzeugungsprozess

Der Erzeugungsprozess

  • make liest eine teils prozedurale und teils deklarative Anweisungsdatei (Makefile), in dem die Abhängigkeiten des Übersetzungsprozesses von Programmen formalisiert erfasst sind.

  • Diese Formalisierung beschreibt, welche Quelltextdateien auf welche Weise durch den Compiler oder durch andere Programme zu welchen Objektdateien bzw. Ergebnissen verarbeitet werden, bzw. welche Objektdateien vom Linker zu Programmbibliotheken oder ausführbaren Programmen verbunden werden.

  • Alle Schritte erfolgen unter Beachtung der im Makefile erfassten Abhängigkeiten.[2]

  • Wenn das Makefile vom make-Programm abgearbeitet wird, wird eine Umwandlung etwa einer Quelldatei in eine Objektdatei nur dann vorgenommen, wenn die Quelldatei neuer als die bereits vorliegende Version der Ergebnisdatei ist, bzw. wenn keine Ergebnisdatei vorhanden ist.

  • Bei der Entwicklung großer Programmpakete mit vielen Quelldateien und vielen ausführbaren Programmen entfällt so die Notwendigkeit, bei einer Reihe kleiner Veränderungen alle Kompilierungen erneut durchzuführen.
17 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K Das Basekernel OS :: Der Erzeugungsprozess

Makefile (main)

include Makefile.config
LIBRARY_SOURCES=$(wildcard library/*.c)
LIBRARY_HEADERS=$(wildcard library/*.h)
USER_SOURCES=$(wildcard user/*.c)
USER_PROGRAMS=$(USER_SOURCES:c=exe)
KERNEL_SOURCES=$(wildcard kernel/*.[chS])
WORDS=/usr/share/dict/words
.PHONY: build-kernel build-library build-userspace build-cdrom-image
all: build-cdrom-image
build-kernel: kernel/basekernel.img
build-library: library/baselib.a
build-userspace: $(USER_PROGRAMS)
build-cdrom-image: basekernel.iso
kernel/basekernel.img: $(KERNEL_SOURCES) $(LIBRARY_HEADERS)
cd kernel && make
library/baselib.a: $(LIBRARY_SOURCES) $(LIBRARY_HEADERS)
cd library && make
$(USER_PROGRAMS): $(USER_SOURCES) library/baselib.a $(LIBRARY_HEADERS)
cd user && make
image: kernel/basekernel.img $(USER_PROGRAMS)
rm -rf image
mkdir image image/boot image/bin image/data
cp kernel/basekernel.img image/boot
cp $(USER_PROGRAMS) image/bin
if [ -f ${WORDS} ]; then head -2000 ${WORDS} > image/data/words; fi
basekernel.iso: image
${ISOGEN} -input-charset utf-8 -iso-level 2 -J -R -o $@ -b boot/basekernel.img image
disk.img:
qemu-img create disk.img 10M
run: basekernel.iso disk.img
qemu-system-i386 -cdrom basekernel.iso -hda disk.img
debug: basekernel.iso disk.img
qemu-system-i386 -cdrom basekernel.iso -hda disk.img -s -S &
clean:
rm -rf basekernel.iso image disk.img
cd kernel && make clean
cd library && make clean
cd user && make clean
18 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K and uncomment this: :: Der Erzeugungsprozess

Makefile (config)

KERNEL_CCFLAGS=-Wall -c -ffreestanding -fno-pie -g -std=gnu99
# These settings select the native compiler,
# which is likely to work on native linux-x86.
#
CC=gcc -m32
LD=ld -melf_i386
#LD=ld -arch i386
AR=ar
OBJCOPY=objcopy -R .note.gnu.property
ISOGEN=genisoimage
# If you are compiling from another platform,
# then use the script build-cross-compiler.sh
# add cross/bin to your path, and uncomment these lines:
#CC=i686-elf-gcc
#LD=i686-elf-ld
#AR=i686-elf-ar
#OBJCOPY=i686-elf-objcopy
# If building on OSX, then install mkisofs via ports or brew
# and uncomment this:
#ISOGEN=mkisofs
19 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K and uncomment this: :: Der Erzeugungsprozess

Makefile (kernel)

include ../Makefile.config
KERNEL_OBJECTS=kernelcore.o main.o console.o page.o keyboard.o mouse.o event_queue.o clock.o interrupt.o kmalloc.o pic.o ata.o cdromfs.o string.o bitmap.o graphics.o font.o syscall_handler.o process.o mutex.o list.o pagetable.o rtc.o kshell.o fs.o hash_set.o diskfs.o serial.o elf.o device.o kobject.o pipe.o bcache.o printf.o is_valid.o window.o
basekernel.img: bootblock kernel
cat bootblock kernel /dev/zero | head -c 1474560 > basekernel.img
kernel: kernel.elf
${OBJCOPY} -O binary $< $@
bootblock: bootblock.elf
${OBJCOPY} -O binary $< $@
kernel.elf: ${KERNEL_OBJECTS}
${LD} ${KERNEL_LDFLAGS} -Ttext 0x10000 ${KERNEL_OBJECTS} -o $@
bootblock.elf: bootblock.o
${LD} ${KERNEL_LDFLAGS} -Ttext 0 $< -o $@
%.o: %.c
${CC} ${KERNEL_CCFLAGS} -I ../include $< -o $@
%.o: %.S
${CC} ${KERNEL_CCFLAGS} -I ../include $< -o $@
clean:
rm -rf basekernel.img *.o *.elf kernel bootblock bootblock.o
20 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K and uncomment this: :: Der Erzeugungsprozess

make it all

cd kernel && make
make[1]: Entering directory '/home/sbosse/proj/vm42/src/basekernel/kernel'
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include bootblock.S -o bootblock.o
ld -melf_i386 -Ttext 0 bootblock.o -o bootblock.elf
objcopy -R .note.gnu.property -O binary bootblock.elf bootblock
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include kernelcore.S -o kernelcore.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include main.c -o main.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include console.c -o console.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include page.c -o page.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include keyboard.c -o keyboard.o
In file included from keyboard.c:42:
keymap.de.pc.c:5:7: warning: multi-character character constant [-Wmultichar]
{'3', '§', '3', 0},
^~~~
keymap.de.pc.c:5:7: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘49831’ to ‘-89’ [-Woverflow]
keymap.de.pc.c:13:2: warning: multi-character character constant [-Wmultichar]
{'ß', '?', 'ß','\\'},
^~~~
keymap.de.pc.c:13:2: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50079’ to ‘-97’ [-Woverflow]
keymap.de.pc.c:13:13: warning: multi-character character constant [-Wmultichar]
{'ß', '?', 'ß','\\'},
^~~~
keymap.de.pc.c:13:13: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50079’ to ‘-97’ [-Woverflow]
keymap.de.pc.c:14:2: warning: multi-character character constant [-Wmultichar]
{'´', '`', '´',0},
^~~~
keymap.de.pc.c:14:2: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘49844’ to ‘-76’ [-Woverflow]
keymap.de.pc.c:14:13: warning: multi-character character constant [-Wmultichar]
{'´', '`', '´',0},
^~~~
keymap.de.pc.c:14:13: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘49844’ to ‘-76’ [-Woverflow]
keymap.de.pc.c:27:2: warning: multi-character character constant [-Wmultichar]
{'ü', 'Ü', 0, 0},
^~~~
keymap.de.pc.c:27:2: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50108’ to ‘-68’ [-Woverflow]
keymap.de.pc.c:27:8: warning: multi-character character constant [-Wmultichar]
{'ü', 'Ü', 0, 0},
^~~~
keymap.de.pc.c:27:8: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50076’ to ‘-100’ [-Woverflow]
keymap.de.pc.c:40:2: warning: multi-character character constant [-Wmultichar]
{'ö', 'Ö', 'ö', 0},
^~~~
keymap.de.pc.c:40:2: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50102’ to ‘-74’ [-Woverflow]
keymap.de.pc.c:40:8: warning: multi-character character constant [-Wmultichar]
{'ö', 'Ö', 'ö', 0},
^~~~
keymap.de.pc.c:40:8: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50070’ to ‘-106’ [-Woverflow]
keymap.de.pc.c:40:14: warning: multi-character character constant [-Wmultichar]
{'ö', 'Ö', 'ö', 0},
^~~~
keymap.de.pc.c:40:14: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50102’ to ‘-74’ [-Woverflow]
keymap.de.pc.c:41:2: warning: multi-character character constant [-Wmultichar]
{'ä', 'Ä', 'ä', 0},
^~~~
keymap.de.pc.c:41:2: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50084’ to ‘-92’ [-Woverflow]
keymap.de.pc.c:41:8: warning: multi-character character constant [-Wmultichar]
{'ä', 'Ä', 'ä', 0},
^~~~
keymap.de.pc.c:41:8: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50052’ to ‘-124’ [-Woverflow]
keymap.de.pc.c:41:14: warning: multi-character character constant [-Wmultichar]
{'ä', 'Ä', 'ä', 0},
^~~~
keymap.de.pc.c:41:14: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘50084’ to ‘-92’ [-Woverflow]
keymap.de.pc.c:42:7: warning: multi-character character constant [-Wmultichar]
{'^', '°', '^', 0},
^~~~
keymap.de.pc.c:42:7: warning: overflow in conversion from ‘int’ to ‘char’ changes value from ‘49840’ to ‘-80’ [-Woverflow]
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include mouse.c -o mouse.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include event_queue.c -o event_queue.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include clock.c -o clock.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include interrupt.c -o interrupt.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include kmalloc.c -o kmalloc.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include pic.c -o pic.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include ata.c -o ata.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include cdromfs.c -o cdromfs.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include string.c -o string.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include bitmap.c -o bitmap.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include graphics.c -o graphics.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include font.c -o font.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include syscall_handler.c -o syscall_handler.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include process.c -o process.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include mutex.c -o mutex.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include list.c -o list.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include pagetable.c -o pagetable.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include rtc.c -o rtc.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include kshell.c -o kshell.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include fs.c -o fs.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include hash_set.c -o hash_set.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include diskfs.c -o diskfs.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include serial.c -o serial.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include elf.c -o elf.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include device.c -o device.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include kobject.c -o kobject.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include pipe.c -o pipe.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include bcache.c -o bcache.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include printf.c -o printf.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include is_valid.c -o is_valid.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include window.c -o window.o
ld -melf_i386 -Ttext 0x10000 kernelcore.o main.o console.o page.o keyboard.o mouse.o event_queue.o clock.o interrupt.o kmalloc.o pic.o ata.o cdromfs.o string.o bitmap.o graphics.o font.o syscall_handler.o process.o mutex.o list.o pagetable.o rtc.o kshell.o fs.o hash_set.o diskfs.o serial.o elf.o device.o kobject.o pipe.o bcache.o printf.o is_valid.o window.o -o kernel.elf
objcopy -R .note.gnu.property -O binary kernel.elf kernel
cat bootblock kernel /dev/zero | head -c 1474560 > basekernel.img
make[1]: Leaving directory '/home/sbosse/proj/vm42/src/basekernel/kernel'
cd library && make
make[1]: Entering directory '/home/sbosse/proj/vm42/src/basekernel/library'
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include user-start.c -o user-start.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include errno.c -o errno.o
gcc -m32 -c -o syscall.o syscall.S
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include syscalls.c -o syscalls.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include string.c -o string.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include stdio.c -o stdio.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include stdlib.c -o stdlib.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include malloc.c -o malloc.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include kernel_object_string.c -o kernel_object_string.o
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -I ../include nwindow.c -o nwindow.o
ar rv baselib.a errno.o syscall.o syscalls.o string.o stdio.o stdlib.o malloc.o kernel_object_string.o nwindow.o
ar: creating baselib.a
a - errno.o
a - syscall.o
a - syscalls.o
a - string.o
a - stdio.o
a - stdlib.o
a - malloc.o
a - kernel_object_string.o
a - nwindow.o
make[1]: Leaving directory '/home/sbosse/proj/vm42/src/basekernel/library'
cd user && make
make[1]: Entering directory '/home/sbosse/proj/vm42/src/basekernel/user'
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include ball.c -o ball.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o ball.o ../library/baselib.a -o ball.exe
objcopy -R .note.gnu.property -R .comment --strip-debug ball.exe
objcopy: ball.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include clock.c -o clock.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o clock.o ../library/baselib.a -o clock.exe
objcopy -R .note.gnu.property -R .comment --strip-debug clock.exe
objcopy: clock.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include copy.c -o copy.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o copy.o ../library/baselib.a -o copy.exe
objcopy -R .note.gnu.property -R .comment --strip-debug copy.exe
objcopy: copy.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include livestat.c -o livestat.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o livestat.o ../library/baselib.a -o livestat.exe
objcopy -R .note.gnu.property -R .comment --strip-debug livestat.exe
objcopy: livestat.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include manager.c -o manager.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o manager.o ../library/baselib.a -o manager.exe
objcopy -R .note.gnu.property -R .comment --strip-debug manager.exe
objcopy: manager.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include fractal.c -o fractal.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o fractal.o ../library/baselib.a -o fractal.exe
objcopy -R .note.gnu.property -R .comment --strip-debug fractal.exe
objcopy: fractal.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include procstat.c -o procstat.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o procstat.o ../library/baselib.a -o procstat.exe
objcopy -R .note.gnu.property -R .comment --strip-debug procstat.exe
objcopy: procstat.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include saver.c -o saver.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o saver.o ../library/baselib.a -o saver.exe
objcopy -R .note.gnu.property -R .comment --strip-debug saver.exe
objcopy: saver.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include shell.c -o shell.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o shell.o ../library/baselib.a -o shell.exe
objcopy -R .note.gnu.property -R .comment --strip-debug shell.exe
objcopy: shell.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include snake.c -o snake.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o snake.o ../library/baselib.a -o snake.exe
objcopy -R .note.gnu.property -R .comment --strip-debug snake.exe
objcopy: snake.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
gcc -m32 -Wall -c -ffreestanding -fno-pie -g -std=gnu99 -O2 -I ../include sysstat.c -o sysstat.o
ld -melf_i386 -Ttext 0x80000000 ../library/user-start.o sysstat.o ../library/baselib.a -o sysstat.exe
objcopy -R .note.gnu.property -R .comment --strip-debug sysstat.exe
objcopy: sysstat.exe: warning: empty loadable segment detected at vaddr=0x8048000, is this intentional?
rm manager.o ball.o copy.o shell.o saver.o fractal.o snake.o livestat.o procstat.o clock.o sysstat.o
make[1]: Leaving directory '/home/sbosse/proj/vm42/src/basekernel/user'
rm -rf image
mkdir image image/boot image/bin image/data
cp kernel/basekernel.img image/boot
cp user/manager.exe user/fractal.exe user/sysstat.exe user/shell.exe user/saver.exe user/clock.exe user/copy.exe user/livestat.exe user/ball.exe user/procstat.exe user/snake.exe image/bin
if [ -f /usr/share/dict/words ]; then head -2000 /usr/share/dict/words > image/data/words; fi
genisoimage -input-charset utf-8 -iso-level 2 -J -R -o basekernel.iso -b boot/basekernel.img image
Size of boot image is 2880 sectors -> Emulating a 1440 kB floppy
Total translation table size: 2048
Total rockridge attributes bytes: 1946
Total directory bytes: 6854
Path table size(bytes): 46
Max brk space used 1a000
1159 extents written (2 MB)
21 / 22

Stefan Bosse - Grundlagen der Betriebssysteme - Modul K and uncomment this: :: TODO

TODO

22 / 22