06_Pr_senztag_part2_Z Flashcards

1
Q

Was sind Major- und Minor-Nummern bei Gerätedateien?

A

Major- und Minor-Nummern sind Zahlen, die Gerätedateien zugeordnet werden. Die Major-Nummer identifiziert den zugehörigen Treiber, während die Minor-Nummer zwischen mehreren Gerätedateien desselben Treibers differenziert. Zum Beispiel zeigt der Befehl ls -l /dev/random die Major-Nummer 1 und die Minor-Nummer 8.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Wie funktionieren Gerätedateien?

A

Gerätedateien dienen als Schnittstelle zwischen User-Space und Kernel-Space. Anwendungen laufen im User-Space und greifen über Gerätedateien auf Kernelmodule zu, die im Kernel-Space laufen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wie kann man in C Zufallszahlen aus einer Gerätedatei lesen?

A
c int fd = open("/dev/random", O_RDONLY); int randomnumber; read(fd, &randomnumber, sizeof(int)); close(fd);
Dieser Code öffnet die Gerätedatei /dev/random, liest eine Zufallszahl und schließt die Datei.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wie funktioniert die Kommunikation über eine serielle Schnittstelle in C?

A
c int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY); write(fd, "Hallo Welt!", 12); char buffer[128]; read(fd, buffer, 128); printf("Received: %s\n", buffer); close(fd);
In diesem Beispiel wird die serielle Schnittstelle /dev/ttyUSB0 geöffnet, eine Nachricht gesendet, eine Antwort gelesen und die Datei wieder geschlossen.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wie erstellt man ein Festplatten-Image in C?

A
c int fd1 = open("/dev/sda1", O_RDONLY); int fd2 = open("harddisk.image", O_WRONLY | O_CREAT); char buffer[1024]; int readcount; while ((readcount = read(fd1, buffer, 1024)) > 0) { write(fd2, buffer, readcount); } close(fd1); close(fd2);
Dieser Code kopiert den Inhalt der Festplatte /dev/sda1 in eine Image-Datei harddisk.image.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Was ist ein Kernelmodul?

A

Ein Kernelmodul ist eine Erweiterung des Kernels, die zur Laufzeit geladen und entladen werden kann, um zusätzliche Funktionen bereitzustellen. Es bietet eine Funktionszeigertabelle, in der benutzerdefinierte Funktionen für Dateioperationen eingetragen werden können.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wie sieht ein einfaches Kernelmodul aus, das ein konfigurierbares Zeichen wiederholt ausgibt?

A
c #include  #include  #include  #include  #include  static int \_\_init my_init(void) { ... } static void \_\_exit my_exit(void) { ... } static int my_open(struct inode*, struct file*) { ... } static int my_release(struct inode*, struct file*) { ... } static ssize_t my_read(struct file*, char*, size_t, loff_t*) { ... } static ssize_t my_write(struct file*, const char*, size_t, loff_t*) { ... } static struct file_operations fops = { .owner = THIS_MODULE, .read = my_read, .write = my_write, .open = my_open, .release = my_release }; module_init(my_init); module_exit(my_exit); MODULE_LICENSE("Some License"); MODULE_AUTHOR("Matthias Janetschek"); MODULE_DESCRIPTION("An example module");
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Was sind wichtige Dateioperationen in Kernelmodulen?

A

Wichtige Dateioperationen in Kernelmodulen sind open(), release(), read(), write(), und ioctl(). Diese werden in der Datei /linux/fs.h definiert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Wie erfolgt der Datentransfer zwischen Kernel- und User-Space in Kernelmodulen?

A

Anwendungen übergeben Buffer im User-Space. Kernelmodule nutzen spezielle Kopierbefehle wie copy_to_user() und copy_from_user(), um Daten zwischen User-Space und Kernel-Space zu transferieren.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie können Kernelmodule parametrisiert werden?

A

Kernelmodule können mit Parametern versehen werden, wie im folgenden Beispiel:

c static char myparam = '1'; module_param(myparam, byte, 0660); MODULE_PARM_DESC(myparam, "A sample parameter");
Dies erlaubt es, Parameter beim Laden des Moduls zu übergeben.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wie kompiliert man ein Kernelmodul?

A

Kernelmodule können out-of-tree oder in-tree kompiliert werden. Ein Beispiel-Makefile für die Kompilierung eines Moduls sieht wie folgt aus:

makefile obj-m := mymodule.o CURRENT = $(shell uname -r) KDIR = /lib/modules/$(CURRENT)/build PWD = $(shell pwd) default: make -C $(KDIR) M=$(PWD) modules clean: make -C $(KDIR) M=$(PWD) clean
Dieses Makefile kompiliert das Modul mymodule.o unter Verwendung der aktuellen Kernel-Build-Umgebung.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly