LINUX

Das universelle Betriebssystem

Eine Einführung - Teil 14

Deutsche Angestellten Akademie

C und C-Compiler

Ein einfaches C-Programm

#include<stdio.h>
int main() {
	printf("Hello World\n");
	return 0;
}
						

Wir benötigen:

Code compilieren:
~$  gcc hello.c -o hello

# Programm ausführen
~$ ./hello
					

Begriffe

C Programmiersprache - Der Linux-Kernel ist in „C“ geschrieben
Compiler Übersetzt den Quellcode in Maschinencode
gcc Gnu C-Compiler Collection
Bibliotheken Fertige Funktionen, die in andere Programme eingebunden werden ( unter Windoes oft *.dll-Dateien )
make arbeitet Regeln und Abhängigkeitsdefinitionen in „Makefile“ ab -> startet den gcc

der Linux Kernel

Befehle

  • lsusb
  • lscpu
  • lspci
  • lsmem
  • lshw
  • Kernelmodule
  • lsmod
  • modprobe

Was zum?? ist ein Kernel Modul??

  • ein Stück kompilierten Codes, der zur Laufzeit in den Kernel eingefügt werden kann ( zb Treiber )
  • Erweitert d. Funktionalität d. Kernels
  • Reboot de Systems nicht nötig
  • Ohne Module müsste man Monolithische Kernel bauen und neue Funktionalität direkt ins Kernel Image integrieren
  • -> Kernel Image wird grösser sein
  • Die meisten Hardwarekomponenten in Ihrem Computer haben einen zugehörigen Treiber.
  • Ein großer Teil eines laufenden Kernels ist Treibercode.
  • Ein Treiber kann statisch in die Kerneldatei auf der Festplatte eingebaut werden.

Wir bauen ein Kernel-Modul

Der Quellcode mit Beschreibung https://github.com/usrbinnc/netcat-cpi-kernel-module

wir bauen uns einen Kernel

  1. Download der Kernel Quellen
  2. Installieren der build tools
  3. Kernel bauen ;-)

Aktuelle Kernel Quellen herunterladen https://www.kernel.org


$ sudo apt-get install build-essential \ 
	libncurses5-dev gcc libssl-dev bc

# für XXXXXXX entspr. Kernel Version einsetzen!
$ cd ~/Downloads
$ tar xvf linux-XXXXXXX.tar.xz

$ cd linux-XXXXXXX
$ cp /boot/config-4.13-XXXXXXX .config

$ make menuconfig

					
Folgendes bitte zu Hause probieren::
# Das dauert jetzt....
# ca 90min auf einem core i3 mit 2.4 MhZ
# -j 4 -> Nutze 4 Kerne

~$ make -j4 deb-pkg  

#Kernel installieren:
~$ sudo dpkg -i ../linux-*.deb

# reboot -> neuen Kernel wählen 
				

grub - Grand Unified Boot Loader

  • Liest verschiedene Dateisysteme:
  • Bootet verschiedene Betriebssysteme per Auswahlmenü und automatischem Zeitablauf (Linux und Windows als Multi-Boot-System).
  • Bootet Betriebssysteme von Festplatten, Disketten, CD- und DVD-Laufwerken sowie Flash-Disks.
  • Verfügt über einen eingebauten Kommandozeileninterpreter (Shell).
  • Ist relativ einfach konfigurierbar (Farben, Hintergrundbild, Struktur usw.).
  • Kann mit einem Passwort gesichert werden.
  • Kann über TFTP bereitgestellte Linux-Kernel booten.
  • mysql
  • LAMP
  • Multimedia
  • Gimp
Übungen C 11.11 [3] Besorgen Sie sich eine geeignete Datei (etwa ein größeres tar -Ar- chiv mit Quellcode, vielleicht für den Linux-Kernel) und komprimieren Sie sie jeweils mit gzip , bzip2 und xz . Messen Sie dabei die Ausführungszeit durch ein vorgesetztes time . Wie verhalten die Laufzeiten und die Kompri- mierungsraten sich zueinander? C 11.12 [2] Experimentieren Sie mit der Datei aus der vorigen Aufgabe und vergleichen Sie die Laufzeit und die Größe des Resultats für xz mit verschie- denen Effizienz-Optionen. Was ist der Unterschied zwischen -1 und -6 und zwischen -6 und -9 ?