General Flashcards
In welcher Programmiersprache ist der Linux Kernel geschrieben und warum?
Hauptsächlich in C. Weil C hardwarenah & effizient ist.
Wenige Zeilen Assembler für:
- Hardware Initialisierung
- Interrupts
- Zeitkritische Funktionen
Warum muss zum Compilieren des Linux Kernels ein GNU Compiler verwendet werden?
Weil der Kernel auf besondere Funktionen des GNU Compilers angewiesen ist.
Wie arbeitet der Kernel mit Gleitkommazahlen?
Gar nicht! Mehr Aufwand durch Speichern der Floating-Point-Register.
Welche Dateien sind für die Konfiguration des Linux Kernels wichtig?
Das Makefile des Kernels und die .config-Datei die durch das Makefile erstellt wird.
Welche Tools stehen Ihnen für die Konfiguration des Kernels zur Verfügung?
Das Makefile des Kernels:
- make config
- make menuconfig
- make xconfig
- make gconfig
Nennen Sie drei wesentliche Unterschiede zwischen einem Embedded Device und einem Standard System.
Im Gegesatz zu einem PC hat ein Embedded System
… meist nur eine einzige Aufgabe (1)
… neben technischer auch zeitliche Anforderung (2)
… eine beschränkte Größe und Leistung (3)
… einen bregrenzten Speicher und Preis (3)
….eine hohe Langlebigkeit (3)
Nennen Sie drei Nachteile bei der Verwendung eines Linux auf einem Embedded Device.
- Hat eine lange Bootzeit (im Vergleich zu Microcontrollern)
- Mindestanforderungen an die Hardware: 32Bit, >4MB RAM
- (Noch) Einschränkungen im Safety-Critical und Realtime Bereich.
Erklären Sie den Unterschied zwischen der uClibc, glibc. Gehen Sie auch kurz auf die Vor- und Nachteile ein.
- glibc ist der Standard (wichtigste Funktijnen)
- uClibc ist kleiner und für die Embedded-Umgebung gedacht
Wie läuft der Kernel BUILD Prozess im Detail ab?
.config auslesen und die Abhängigkeiten der Module auflösen.
Warum benutzt man ‘static’ in Kernelmodulen?
Um im Namensraum Konflikte zu vermeiden.
Stichwort: Namespace Pollution
Wozu benutzt man ‘make oldconfig’?
- 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
Was macht ‘make allnoconfig’?
- Generiert minimale Kernel Konfiguration.
- Idealer Startpunkt für Embedded Systems!
- Setzt nur die unbedingt benötigten Optionen zum Kompilieren.
Über welche Technologien lassen sich kritische Abschnitte schützen?
- Mutex
- Semaphor
- Spinlock
- Test and Set
- Interruptsperre (1-Kern-Prozessor)
- Monitor
Nennen Sie zwei Ausprägungen von Kernel-Threads.
- Workqueue
- Event-Workqueue
Nennen sie die drei Systemkomponenten eines Embedded Linux!
- Firmware (+ 1.Bootloader)
- Bootloader
- Kernel & RootFS
Was ist ein Tasklet?
Eine Art Kernel-Timer der eine Funktion zu einer Zeit die der Kernel aussucht als SoftIRQ ausführt.
Was gibt der Kernel Build für Dateien aus?
- System.map Symboltabelle für die Zuordnung Objekt -> Adresse (wichtig beim Debuggen)
- vmlinux komplettes ELF Binary (’kernel proper’), wird
unabhängig von der Zielarchitektur erstellt. - vmlinux.bin (Image im compressed Ordner) Kernel Binary ohne Symbole, Bemerkungen und Kommentare (’stripped’)
- Target Objects head.o, misc.o Startup-Code und Kernel
Entpack-Code - piggy.gz/piggy.o ’Image’ komprimiert, bzw. als linkbares Objekt (.o)
- zImage/bzImage komprimiertes Kernel Image für Bootlader
Zeichnen Sie das Diagramm des Unterbrechungsmodells!
|≡Applikation≡|↔|≡Applikation≡|
———–↓——————————-↓——————
|≡Kernelfunktion≡|↔|≡Kernelfunktion≡|
↓↓
|≡≡≡≡≡≡≡≡≡≡Soft-IRQ≡≡≡≡≡≡≡≡≡≡|
↓↓
|≡≡≡HardIRQ≡≡≡|←|≡ HardIRQ ≡|
|”IRQF_SHARED”|
Welche Bedeutung hat die globale Variable JIFFIES im Linux-Kernel?
Anzahl an Timer-Interrupts die seit dem Systemboot ausgelöst wurden.
[ Masterfrage ;) ]
Was ist der Unterschied zwischen ‘register_chrdev_region(…)’ und ‘alloc_chrdev_region(…)’?
register_chrdev_region(dev_t first, unsigned int count, char *name) ist STATISCH.
Man gibt Major number selbst vor.
alloc_chrdev_region(dev_t *dev, unsigned int firstminor, unsigned int count, char *name) ist DYNAMISCH.
Findet freie Major number für dich.
Welche Aufgabe hat die Majornumber? Was ist die Minornumber? Worin liegt die zu Character-Devices unterschiedliche Bedeutung der Minornumber bei Blockgeräten?
- Majornumber: zur Identifikation des Treibers
- Minornumber: zur Unterscheidung zwischen einzelnen logischen Geräten (des Treibers)
Bei Character-Devices kann man sich die Minornumber frei wählen, bei Block-Devices wird die Minornumber vorgegeben.
Wie lautet das Unix Kommando (inkl. der Parameter) um Gerätedateien anzulegen?
mknod c MyDeviceName c Major Minor
Was für Operationen hat ein Linux Gerätetreiber normalerweise?
Characterdevices
open(), close(), read(), write()
Blockdevices ioctl(), select()/poll(), fcntl(), seek()
Wie lässt sich der Kernel BUILD Prozess beschleunigen?
- ccache
- distcc (distributed compiler)
- make -jx (um x Prozessoren zu benutzen)
Was ist das Early Userland?
Das RootFS wird beim Booten in die Ramdisk geladen und dort als ‘Early-Userland’ gemountet.
Wann ist ein Kernelmodul im Prozess-Kontext und was ist besonders in diesem Kontext?
Wenn aus dem Userspace ein Systemcall ausgeführt wird.
z.B. bei Charcterdevices: open(), close(), read(), write()
Aus dem Prozess-Kontext hat man Zugriff auf den Userspace Speicherberich.
Was ist der Unterschied zwichen MINOR() und iminor()?
MINOR() ist ein Makro und verlangt ein ‘struct device’
iminor ist ein Funktion und verlangt ein ‘struct inode’
Was ist der Unterschied zwischen initrd und initramfs?
initrd
- benötigt einen Filesystemtreiber/Blockgerätetreiber
- Speicherineffizient (caching durch FS-Treiber obwohl schon im RAM) [pagecache und dentry cache]
- nicht vergrößerbar
initramfs
- Gemounted als tmpfs
- Kein FS-Treiber notwendig
- vergrößerbar
Was ist der Unterschied zwischen ramfs und tmpfs?
ramfs
- kann ‘Überlaufen’ -> Systemabsturz
tmpfs (verbessertes ramfs)
- kann swap space benutzen
- kann nicht überlaufen
Welche Kontextarten gibt es und was ist der Unterschied ?
- Prozess-Kontext
- Kernel-Kontext
- Interrupt-Kontext
Interrupt-Kontext: Limitierte Funktionsauswahl, insbesondere
kein „Schlafen legen“ und kein Zugriff auf
Applikations-Speicherbereiche.
Kernel-Kontext: Zugriff auf sämtliche Funktionen des Kernels,
inklusive „Schlafen legen“.
Prozess-Kontext: Wie Kernel-Kontext, zusätzlich noch Zugriff auf
die Datenbereiche des gerade aktiven Rechenprozesses.
Wann sollte der return-Wert “-ERESTARTSYS” angegeben werden ?
Wenn blockierende Funktionen durch ein Signal unterbrochen werden.
Bsp: #define READ_POSSIBLE (atomic_read(&bytes_available) != 0)
if ( wait_event_interruptible( wq_read, READ_POSSIBLE ) ) {
return -ERESTARTSYS;
}
Welche Verzeichnisse müssen bei einem minimalen RootFS vorhanden sein ?
- /
- /usr
- /etc
- /lib
- /bin
- /tmp
- /var
- /dev