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 @2.4MHz
# -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.
~$ lsblk

NAME                     MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
sda                        8:0    0 223,6G  0 disk  
├─sda1                     8:1    0   245M  0 part  /boot/efi
├─sda2                     8:2    0   511M  0 part  /boot
└─sda3                     8:3    0 222,9G  0 part  
  └─sda3_crypt           253:0    0 222,8G  0 crypt 
    ├─xubuntu--vg-root   253:1    0 215,1G  0 lvm   /
    └─xubuntu--vg-swap_1 253:2    0   7,7G  0 lvm  

  
Interessante Dateien:

/etc/default/grub -> Anpassungen

/etc/grub.d/ -> scripts die boot.cfg generieren

00_header*
05_debian_theme*
10_linux*
20_linux_xen*
20_memtest86+*
30_os-prober*
30_uefi-firmware*
40_custom*
41_custom*

/boot/grub/grub.cfg -> nicht bearbeiten!

/etc/default/grub


GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

GRUB_BACKGROUND="/usr/share/images/grub/050817-N-3488C-028.tga"

Aussehen verändern

nach Änderung:

sudo update-grub
optional: grub-customizer

grub-customizer aus quellen bauen

grub-customizer ppa