Betriebssysteme. Der Linux-Kernel und der Boot-Prozess. Linux Kernel / Boot-Prozess



Ähnliche Dokumente
SelfLinux Der Linux-Kernel

1. Vorbereiten das Host, folgende Software Pakete müssen installiert werden: gnome-devel bison flex texinfo libncurses5-dev git codeblocks putty

Installations-Dokumentation, YALG Team

4D Server v12 64-bit Version BETA VERSION

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Treiber Kernel und Module bauen

Tutorial -

Handbuch PCI Treiber-Installation

Lokale Installation von DotNetNuke 4 ohne IIS

Knoppix Micro-Remastering

Softwaren Engineering I

MailUtilities: Remote Deployment - Einführung

C++ mit Eclipse & GCC unter Windows

Workshop: Eigenes Image ohne VMware-Programme erstellen

SANDBOXIE konfigurieren

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Umgang mit der Software ebuddy Ändern von IP Adresse, Firmware und erstellen von Backups von ewon Geräten.

Technische Alternative elektronische Steuerungsgerätegesellschaft mbh. A-3872 Amaliendorf, Langestr. 124 Tel +43 (0)

BitDefender Client Security Kurzanleitung

Aufbau einer Testumgebung mit VMware Server

Installationsanleitung dateiagent Pro

Kurzanleitung zu XML2DB

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Installationsanleitung für pcvisit Server (pcvisit 12.0)

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Initramfs - The initial RAM filesystem

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Hex Datei mit Atmel Studio 6 erstellen

Bilder zum Upload verkleinern

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Avira Management Console Optimierung für großes Netzwerk. Kurzanleitung

Auto-Provisionierung tiptel 30x0 mit Yeastar MyPBX

Daten-Synchronisation zwischen Mozilla Thunderbird (Lightning) / Mozilla Sunbird und dem ZDV Webmailer

Internet Explorer Version 6

KEIL software. Inhaltsverzeichnis UPDATE. 1. Wichtige Informationen 1.1. Welche Änderungen gibt es?

MetaQuotes Empfehlungen zum Gebrauch von

Thomas Wagner 2009 (im Rahmen der TA) Installation von MySQL 5.0 und Tomcat 5.5

Wählen Sie bitte START EINSTELLUNGEN SYSTEMSTEUERUNG VERWALTUNG und Sie erhalten unter Windows 2000 die folgende Darstellung:

Verschlüsselte Dateisysteme unter Linux

Installationsanleitung für pcvisit Server (pcvisit 15.0)

Java Entwicklung für Embedded Devices Best & Worst Practices!

QUICK INSTALLATION GUIDE

Informationen zur Verwendung von Visual Studio und cmake

Verwendung des Terminalservers der MUG

Nuetzlicher Kleinkram

Leitfaden zum Sichern einer Festplatte als Image mit der System Rescue CD

0. VORBEMERKUNG VORBEREITUNG DES SYSTEMS INSTALLATION UND KONFIGURATION VON PD-ADMIN Installation...3

SFTP SCP - Synology Wiki

Informatik I Tutorial

Herbstsemester cs106 Informatiklabor Teil 4: Partitionierung & Linux Installation. P.Huber@stud.unibas.ch

Virtual Channel installieren

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

INHALT 1. INSTALLATION DES V-MODELL XT UNTER WINDOWS 7 2. INSTALLATION DES V-MODELL XT UNTER WINDOWS VISTA

mygesuad Download: Wamp/Lamp Systemumgebungen:

DeltaVision Computer Software Programmierung Internet Beratung Schulung

Powermanager Server- Client- Installation

Step by Step Webserver unter Windows Server von Christian Bartl

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Wissenswertes über LiveUpdate

Eigenen WSUS Server mit dem UNI WSUS Server Synchronisieren

Version 0.3. Installation von MinGW und Eclipse CDT

Die DeskCenter Management Suite veröffentlicht neue Version 8.1

3 Installation von Exchange

Installationsanleitung LogControl DL-Software

Paragon Online WinPE Builder Service

Smap3D PDM 10. Installation. Stand-Alone-Migration-Analyzer

Laufwerke unter Linux - Festplatten - - USB Sticks - September 2010 Oliver Werner Linuxgrundlagen 1

Stecken Sie Ihren USB Stick oder Ihre externe USB Festplatte in den USB Steckplatz des Sinus 154 DSL SE.

Die Installation von D-Link WLAN Karten unter Windows Vista

1. Einleitung. 2. Einrichtung. 1.1 Was ist distcc? 2.1 Abhängigkeiten. 2.2 Installing Distcc. 2.3 Portage so einrichten, dass es Distcc benutzt

Das Handbuch zu KAppTemplate. Anne-Marie Mahfouf Übersetzung: Burkhard Lück

KNX BAOS Gadget. Installations- und Bedienanleitung. WEINZIERL ENGINEERING GmbH. DE Burgkirchen Web:

In 15 einfachen Schritten zum mobilen PC mit Paragon Drive Copy 10 und Microsoft Windows Virtual PC

Windows Server 2012 R2 Essentials & Hyper-V

Kurzanleitung zur Softwareverteilung von BitDefender Produkten...2

Inbetriebnahme Profinet mit Engineer. Inhaltsverzeichnis. Verwendete Komponenten im Beispiel:

Einführung in TexMaker

Persona-SVS e-sync GUI/Client Installation

2008 Linke, Walter IAV4 1

HOWTO: Multi Boot USB Stick erstellen

U4 Arbeiten mit eigenen PSpice-Modellen

Schritt-Schritt-Anleitung zum mobilen PC mit Paragon Drive Copy 10 und VMware Player

SFKV MAP Offline-Erfassungstool. Installationsanleitung

Kleines Handbuch zur Fotogalerie der Pixel AG

LPT1 Anschluss mit PCMCIA Karte

Um zu prüfen welche Version auf dem betroffenen Client enthalten ist, gehen Sie bitte wie folgt vor:

Installationsanleitungen

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

Installation von MailON2!

Internet online Update (Mozilla Firefox)

mit dem TeXnicCenter von Andreas Both

EASYINSTALLER Ⅲ SuSE Linux Installation

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

Benachrichtigungsmöglichkeiten in SMC 2.6

Anleitung zur Redisys Installation. Inhaltsverzeichnis

Transkript:

Der Linux-Kernel und der Boot-Prozess

Linux Kernel Download: ftp.de.kernel.org -> pub/linux/kernel/v2.6 get xxx.yyy.bz2 cd /usr/src tar xvzf xxx.yyy.tgz Kernel Sourcen liegen in linux-xxx.yyy

Linux Source Tree (1) arch/ COPYING CREDITS crypto/ Documentation/ drivers/ fs/ include/ include/asm <arch> include/linux init/ ipc/ Architecture dependent code Linux copying conditions (GNU GPL) Linux main contributors Cryptographic libraries Kernel documentation. Don't miss it! All device drivers (drivers/usb/, etc.) Filesystems (fs/ext3/, etc.) Kernel headers Architecture dependent headers Linux kernel core headers Linux initialization (including main.c) Code used for process communication

Kernel Source Tree (2) kernel/ lib/ MAINTAINERS Makefile mm/ net/ README REPORTING BUGS scripts/ security/ sound/ usr/ Linux kernel core (very small!) Misc library routines (zlib, crc32...) Maintainers of each kernel part. Very useful! Top Linux makefile (sets arch and version) Memory management code (small too!) Network support code (not drivers) Overview and building instructions Bug report instructions Scripts for internal or external use Security model implementations (SELinux...) Sound support code and drivers Early user-space code (initramfs)

Kernel Konfiguration Makefile: Setzten der Version (Sub-Version) und der Ziel- Architektur Kernel Konfiguration: definiert, welche Features im Kernel enthalten sind. make [config xconfig gconfig menuconfig oldconfig] Kernel Konfiguration (Makefile syntax) wird in der Datei.config gespeichert. Die Konfigurationsdatei wird normalweise auch zum jeweiligen Kernel unter /boot/ gespeichert.

Makefile Änderungen Um verscheidene Builds der gleichen Kernel- Version zu unterscheiden, hilft das Setzten des Flags EXTRAVERSION: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 7 EXTRAVERSION = maechtel uname r will return: 2.6.7 maechtel

make xconfig make xconfig qconf: neues qt Konfigurations-Interface für Linux 2.6. Sehr einfach zu benutzen. Unbedingt lesen help > introduction: useful options! File Browser: damit ist es einfacher, Konfigurationsdateien zu laden.

make xconfig screenshot

make config / menuconfig / gconfig make config Fragt jede Kernel Einstellung nacheinander ab. Extrem lang! make menuconfig Bekanntes Text Interface zur Konfiguration. Nützlich, wenn keine QT Umgebung (Grafik) zur Verfügung steht. make gconfig Neues GTK Interface. Ähnlich wie make xconfig.

make oldconfig make oldconfig Wird sehr oft benutzt! Nützlich um die.config Datei einer früheren Kernel-Version upzudaten. Gibt Warnung aus, für nicht mehr enthaltene Optionen. Fragt nach Werten für neue Optionen Wenn die Datei.config von Hand editiert wird, ist es ratsam, danach make oldconfig auszuführen!

make allnoconfig make allnoconfig Setzt nur die unbedingt benötigten Optionen des Kernels auf y. Alles andere auf n. Nützlich für eingebettete System, um mit einem Minimum an Features und Treibern in einer Kernel-Konfiguration zu starten. Weitaus besser, als z.b. Mit der Konfiguration einer Host.config Datei zu starten und eine Option nach der anderen zu deaktivieren (n).

make help make help Listet alle make Optionen auf. Hilfreich, um einen Überblick über die Optionen zu bekommen und auch um neue Optionen (bei neuen Kernel-Releases) zu entdecken.

Kompilieren und Installieren Compiling step make Install steps (logged as root!) make install make modules_install Obsolete commands make depends make modules (done by make)

Dependency Wird in den Kernel-Quellen nur eine Datei geändert, so hilft make dabei, nur die Dateien noch einmal zu compilieren, die durch die Änderung betroffen sind (spart Zeit). Jedoch ist die 'Einstellung' von make etwas zu pessimistisch! Kleine Änderungen an der.config Datei verursachen oft unnötige Recompilierungen von Source-Dateien (spart doch nicht so viel Zeit...) Alternativen?

Schnellere Kompilierung (1) Multiprozessor Wird eine Multiprozessormaschine eingestzt mit n Prozessoren, so kann man make anweisen, mehrere Dateien parallel zu übersetzten. make j <n> Wann immer möglich, wird make nun Dateien echt parallel übersetzen. make j 2 oder make j 3 auf einer Einprozessormaschine hilft nicht sehr viel weiter (mögliche Zeitersparnis: 10%).

Schnellere Kompilierung (2) ccache http://ccache.samba.org/ Compiler Cache für C and C++, bei vielen Distribution schon installiert. Sehr nützlich, wenn die.config Datei sehr oft geändert wird. Folgende Änderungen müssen im Makefile gemacht werden: CC = ccache $(CROSS_COMPILE)gcc HOSTCC = ccache gcc Benchmarks: -63%: Fedora Core 3 config file (viele Module!) -82%: mit einem Embedded Linux config file (wenig Module!)

Schnellere Kompilierung (3) distcc Geeignet für eine Multi-Server Umgebung, in der auf allen Rechnern mit der gleichen gcc Version (!) gearbeitet wird. Aufsetzen des distccd auf den Servern. Auf dem Rechner, der die Kernel-Quellen übersetzt, müssen im Kernel Makefile folgende Anpassungen vorgenommen werden: CC HOSTCC = $(CROSS_COMPILE) distcc = distcc Kombination von distcc und ccache!

Weitere Tipps Um die komplette Command Line von gcc, ld... zu sehen: make V=1 Löschen der durch Make generierten Obj-Files (um die Dateien auch wirklich noch einmal zu übersetzen): make clean Löschen aller durch make generierten Dateien, also auch der Datei.config! Bietet sich an, bevor man z.b. einen Patch erzeugt. make mrproper

Generierte Dateien Das Ausführen von make erzeugt: vmlinux Linux kernel image, nicht komprimiert. arch/<arch>/boot/zimage zlib komprimiertes kernel image Default auf der arm Architektur arch/<arch>/boot/bzimage Auch ein zlib komprimiertes Kernel Image. Achtung: bz bedeutet big zipped nicht bzip2! (bzip2 Komprimierung ist nur als Patch für die i386 Architektur erhältlich) bz ist Default auf i386 Architektur

Kernel Sourcen Browsen Source-Navigator LXR

Source Navigator http://sourcenav.sourceforge.net/ Wurde von RedHat entwickelt, GPL seit 2000. Viele nützliche Features: Indexing, Hierarchy browsing, Editing, Compiling... Sehr gute Doku. Unterstützt C, C++, Java, Tcl, FORTRAN und COBOL. Aber: keine aktive Entwicklung mehr seit 2003. Für sehr grosse Projekte geeignet (z.b. Linux Kernel). Sehr langsam: 2 Stunden um die Sourcen zu indizieren (Pentium M 1.6 Ghz). Grosse Datenbank (1,6 GB für 230 MB Quellen).

Source Navigator Screenshots

http://lxr.linux.no/ LXR: Linux Cross Reference generiert Source Index und erlaubt das Browsen im Code. Basiert auf einem Web-Server: sehr schnell Konfiguration tricky! Textuelle Suche über Identifier möglich. Suchfunktionen für Declarationen, Implementierung und der Benutzung von Symbolen. Unterstützt C und C++. Auch für sehr grosse Projekte geeignet (Linux Kernel: 230 M). Initialisierung und Füllen der Datenbank für 230 MB benötigt sehr viel Zeit! Für Standard Kernels ist kein eigenes Aufsetzen von LXR nötig: -> Einfach browsen unter http://lxr.linux.no/

LXR Screenshot

Bootvorgang 3 Software Komponenten entscheidend: Boot-Loader Kernel Root Filesystem INIT

Boot Details

Disks Beim Starten des System führt die Harware automatisch den Bootloader aus (feste Adresse!). Meistens ist der Platz für den Bootloader Code sehr beschränkt (wie z.b. der Boot-Sektor auf einer PC Festplatte) Aufgrund dieses Platzmangels werden 2 Boot Stufen definiert: 1 st stage: Minimale Funktionalität. Die Aufgabe ist nur, den 2. Stage des Bootloaders zu Laden (z.b. irgendwo auf der Platte) 2 nd stage: Volle Funktionalität. Keine Limits mehr für die Implementierung von Features. Kann selbst ein eigenes Betriebssystem sein! CPU/ Bootloader 2. Bootloader Kernel Root-FS

Bootloader / Monitor Lilo Grub Loadlin Etherboot U-Boot Linux-Bios Unterschiede: Filesystem notwendig? Features (Bootloader/Monitor) Konfiguration Unterstützte Hardwarearchitektur

Kein FS notwendig

FS notwendig

X86 Bootloaders LILO: LInux LOad. Das Orginal! Immer noch im Einsatz. http://freshmeat.net/projects/lilo/ Architektur: x86 GRUB: GRand Unified Bootloader von GNU. Bietet mehr Möglichkeiten als lilo. http://www.gnu.org/software/grub/ Architektur: x86 SYSLINUX: Tool, um über das Netzwerk oder Wechselmedien zu booten. http://syslinux.zytor.com Architektur: x86

Kernelparameter Wie die meisten C Programms, so akzeptiert auch der Linux Kernel Kommando-Zeilen Parameter: Die sogenannten Kernel command line arguments sind Teil der Bootloader Konfiguration. Diese Parameter sind nützlich beim Booten, da Funktionen des Kernels ein-/ausgeschalten oder konfiguriert werden können, ohne dass ein neuer Kernel compiliert werden muss. Auch lassen sich damit Treiber initialisieren, ohne dass komplexe Skripte auf Anwenderebene ausgeführt werden müssen.

Typische Parameter root Identifiziert das Root Filesystem init Skript, welches nach der Kernel Initialisierung abgearbeitet wird. Default: /sbin/init console Konsole, auf der die Boot-Messages ausgegeben werden. ro / rw Mounted das Root Device als read-only / read-write Gerät... und noch viele weitere Kernel Parameter, die unter Documentation/kernel parameters.txt dokumentiert sind.

Beispiel: LILO / GRUB /etc/lilo.conf boot=/dev/hda root=/dev/hda5 delay=5 vga=normal default=embedded_test1 /boot/grub/menu.lst image=/boot/vmlinuz-2.6.8.1 label=embedded_test1 read-only append="elevator=deadline apm=power-off" restricted initrd=/boot/initrd-2.6.8.1 default 1 timeout 25 title Gentoo Linux 2.6.12-r6 kernel (hd0,2)/boot/vmlinuz.gentoo.2.6.12.r6 vga=0x31a root=/dev/sda3 selinux=0 \ console=tty0 resume=/dev/sda2 desktop elevator=as devfs=nomount showopts

Bootmanager Typische Bootsequenz mit initrd Linux Kernel + initrd Root-Image. Im Userspace: /linuxrc Skript von initrd: Führt Kommandos im Userspace aus, um Geräte zu konfigurieren (z.b. Das Setup des Netzwerks, mounting /proc und /sys...) Lädt Kernel Module (Treiber), die im initrd Image gespeichert sind, um das neue Root Filesystem später ansprechen zu können. Mounted das neue Root Filesystem. Über die Funktion (pivot_root) wird zu dem neuen Root Filesystem umgeschaltet. Führt z.b. /sbin/init im neuen Root-Image aus. Userspace: /sbin/init Weitere Kommandos zum Konfigurieren der Hardware, falls dies nicht schon im Skript von initrd ausgeführt wurde. Startet System Services (daemons, servers) und Benutzerprogramme.

Initrd selbst erzeugen mkdir /mnt/initrd dd if=/dev/zero of=initrd.img bs=1k count=2048 mkfs.ext2 F initrd.img mount o loop initrd.img /mnt/initrd Nun wird das Image gefüllt: busybox, modules, /linuxrc Skripte, aber dazu später mehr! umount /mnt/initrd gzip best c initrd.img > initrd

Initrd tools Skripte Sammlung für die init ramdisks in Standard GNU/Linux Distributionen. Sehr klein! Kann in initrds für Embedded Systems benutzt werden. Wird aber nicht so oft benutzt, da die gleiche Funktionalität auch in Busybox enthalten ist: Busybox ist auch sehr klein und da Busybox sehr oft in Embedded Systems verwendet wird, ist sehr viel Know-How in der Entwickler-Szene vorhanden.

Mehr Infos über initrd Weitere Infos finden sich in Documentation/initrd.txt und in den Kernel Sourcen! In dieser Doku ist auch bereits die Funktion pivot_root() dokumentiert.

mkinitrd mkinitrd [options] image kernel version Sehr komfortables Werkzeug um initrd für das root fs des hosts zu kreieren, nachdem der Kernel kompiliert wurde Enthält die Module, die benötigt werden, um das root Filesystem auf dem Host zu mounten. Erstellt wird ebenfalls das gesamte /linuxrc Skript. Die Konfiguration basiert auf / etc/fstab und /etc/modprobe.conf. Ist in den meisten GNU / Linux Distributionen enthalten.