Fragen zu Embedded Linux

Hubert Högl, <Hubert.Hoegl@hs-augsburg.de>, 2021-2024

Siehe auch die Übungen https://hhoegl.informatik.hs-augsburg.de/elinux/kurs/uebungen/

1 BBB Hardware

  1. Prozessor

    Welche technische Daten hat der Prozessor: Hersteller, Jahr der Einführung, Typ, Kerne, ARM Modell, Datenbreite, Taktfrequenz.

  2. Welche Spannung darf bei den digitalen Ein-/Ausgabeschnittstellen nicht überschritten werden?

  3. DRAM (Hauptspeicher/RAM). Wie gross ist es?

  4. eMMC (Flash). Grösse?

  5. Micro-SD Karte (Flash). Wie gross ist die Karte üblicherweise?

  6. USB Hostschnittstelle. Welche maximale USB Geschwindigkeit erlaubt diese Schnittstelle?

  7. USB Gadget Schnittstelle (Mini-USB, Device)

  8. Ethernet Schnittstelle. Wie hoch ist die maximale Geschwindigkeit?

  9. Zwei Erweiterungsstecker. Was kann damit gemacht werden?

  10. Welche Versorgungsspannung (in Volt) benötigt das BBB? Auf welchen Wegen kann diese Spannung zur Verfügung gestellt werden?

    Welcher Stromfluss (in Ampere) ist ungefähr zu erwarten?

    Welche Leistungsaufnahme ist ungefähr zu erwarten (Strom * Spannung)?

2 Speicher flashen

  1. Wie flashen Sie eine Micro-SD Karte mit Debian Linux für den BBB?

  2. Wie flashen Sie den eMMC Speicher auf dem BBB mit Debian Linux?

3 Schnittstellen des BBB

3.1 Serielle Schnittstelle

  1. Nennen Sie mindestens drei Terminal Emulatoren.

  2. Welche Einstellungen müssen auf dem Hostrechner und auf dem BBB unbedingt identisch sein?

  3. Sie möchten auf die serielle Schnittstelle /dev/ttyUSB0 mit einem Terminal-Emulator zugreifen, merken jedoch, dass Sie Root-Rechte bräuchten.

    1. Ist es eine gute Idee, als root User darauf zuzugreifen? Ja oder nein, mit kurzer Begründung.

    2. Wie kann man das Problem lösen?

  4. An Ihrem Notebook sind viele Gerätedateien für serielle Schnittstellen /dev/ttyACM* und /dev/ttyUSB* vorhanden. Wie finden Sie heraus, was die einzelnen Geräte machen?

  5. Udev Regeln

    1. Was ist eine udev Regel?

    2. Welche Details kann man damit zum Beispiel einstellen?

    3. Wo werden die Regel-Dateien abgelegt?

3.2 USB gadget device

  1. Welche Schnittstelle am BBB ist als gadget device ausgeführt?

  2. Welche Dienste sind am gadget device verfügbar?

  3. Ab wann ist diese Schnittstelle in der Boot-Reihenfolge zur Verwendung bereit?

  4. Wo liegt der Unterschied zum UART (serielle Konsole), die auch über ein USB Kabel am PC zur Verfügung steht?

3.3 Netzwerk

  1. Nennen Sie die wichtigsten Programme, die zum Administrieren der Netzwerkschnittstelle (Ethernet) verwendet werden (nur auf der Kommandozeile).

  2. Nennen Sie die wichtigsten Programme zum Administrieren der WiFi Netzwerkschnittstelle (nur auf der Kommandozeile).

  3. Wie konfiguriert man das BBB über den DHCP Dienst?

3.3.1 ip Kommando

  1. Welche Objekte kann ip verwalten?

  1. Wie listet man alle aktiven Netzwerkschnittstellen?

  2. Wie aktiviert man eine Netzwerkschnittstelle (es geht um "up")?

  3. Wie deaktiviert man eine Netzwerkschnittstelle (es geht um "down")?

  4. Wie fügt man einer Netzwerkschnittstelle eine IP Nummer hinzu?

  5. Wie löscht man eine IP Nummer von einer Netzwerkschnittstelle?

  6. Wie geben Sie die Routing-Tabelle aus?

3.3.2 connman

(Hinweis: connman werde ich demnaechst aus den Fragen entfernen und dafuer nmcli einbauen).

  1. Wie fragen Sie mit systemctl den Status von connman ab?

  2. Wie geben Sie den Status mit connmanctl aus?

  3. Welche "Technologien" unterstützt connman?

  4. Wie richten Sie die Ethernet Schnittstelle mit connmanctl ein?

  5. Wie richten Sie die WiFi Schnittstelle mit connmanctl ein?

  6. Wie finden Sie die von connman unterstützten Dienste heraus?

  7. Wie richten Sie eine statische Konfiguration Ihres Netzwerkes mit connman ein?

4 Typische Admin-Fragen

4.1 Diverses

  1. Mit welchem Kommando bootet man den Rechner neu?

  2. Mit welchem Kommando fährt man den Rechner herunter?

  3. Wann wurde der Rechner neu gebootet?

  4. Wie lange läuft der Rechner schon?

  5. Was ist tmux und warum ist es für die tägliche Arbeit auf der Kommandozeile auf dem Hostrechner und auf dem Embedded Linux Rechner besonders nützlich?

4.2 Systemd

  1. Systemd kann verschiedene Typen von Units verwalten? Welche kennen Sie?

  2. Wie erhalten Sie eine Liste aller Units?

  3. Wie erhalten Sie eine Liste aller Service-Units?

  4. Wie erstellen Sie eine eigene Service-Unit?

  5. Wie startet und stoppt man einen Service?

  6. Wie erreicht man es, dass ein Service sofort nach dem Booten startet?

  7. Wie kann man die Zeit zum Booten analysieren?

  8. Wie schaltet man den Rechner mit systemctl in den rescue mode?

5 Systemeinstellungen

  1. Wie stellt man die Zeitzone des Rechners ein?

  2. Wie setzt man das Datum manuell mit einem Kommando?

  3. Wie setzt man das Datum über das Network Time Protocol (NTP)?

  4. Wie setzt man die Lokalisierung (engl. system locale)?

  5. Wie legt man einen neuen User an?

  6. Wie ändert man das Passwort eines Users?

  7. Wie findet man heraus, welchen Gruppen ein User angehört?

  8. Wie nimmt man einen User bei einer bestimmten Gruppe auf, z.B. bei dialout?

  9. Wie löscht man einen User-Account?

6 Paketmanagement

  1. Wie installiert man ein neues Programm?

  2. Wie sucht man nach einem Paket im Paket-Repository?

  3. Wie löscht (deinstalliert) man ein installiertes Programm?

  4. Wie erhält man eine Liste aller installierten Pakete?

  5. Was bedeuten apt update und apt upgrade?

7 Kernel

  1. Wie findet man die Module die in den Kernel geladen sind?

  2. Wie kann man die Kernelmeldungen ansehen (zwei Kommandos)?

8 Fragen zum Buch von Vasquez u. Simmonds

Frank Vasquez, Chris Simmonds, Mastering Embedded Linux Programming, Packt Publishing, 3rd edition, 2021.

https://learning.oreilly.com/library/view/mastering-embedded-linux/9781789530384

8.1 Chapter 1: Starting Out

  1. Why does your TV run Linux? (6 item points)

  2. What hardware conditions must be given to run Linux?

  3. What skills do you need to start a Linux project?

  4. What are the main players?

  5. Name the "four elements"

  6. What do you know about Open-Source licenses?

  7. Beagle Bone Black. Write down the main technical data.

  8. What is Qemu? How can I use it?

8.2 Chapter 2: Learning About Toolchains

  1. Which components are in the standard GNU toolchain?

  2. Compare native and cross toolchains.

  3. What are the capabilities of the target CPU, which are essential for the toolchain?

  4. What reports the command gcc -dumpmachine?

  5. Which C libraries do you know?

  6. Which alternatives do you know to get a toolchain?

  7. Create a toolchain using crosstool-ng!

  8. Follow the instructions in the "Anatomy of a toolchain" section.

  9. How do you cross-compile a program?

  10. How do you compile a program which uses the GNU autotools?

8.3 Chapter 3: All about bootloaders

  1. Describe the three phases of booting.

  2. Which information is passed from bootloader to kernel?

  3. What is a "device tree"?

  4. From which technology are the device trees derived?

  5. Device tree basics

    XXX add a device tree example here which should be explained (reg, phandles, interrupts, include files, compiling a DT)

  6. Which bootloaders do you know? (which is the most widely used?)

  7. Describe the steps needed to compile and install U-Boot.

  1. Describe how to use U-Boot? Cover the following items:

    • Environment variables

    • Boot image format

    • Loading images from cards and network

    • Start the Linux kernel

  2. How can you automate the boot process?

  3. Which are the board specific U-Boot files?

  4. How to build the Barebox bootloader?

8.4 Chapter 4: Porting and configuring the kernel

  1. When was the Linux project started?

  2. Which three main jobs has the kernel?

  3. Describe the structure of user space and kernel space and how they interact.

  4. How does kernel version numbering work? What kernel version do you use?

  5. What are mainline, stable and long-term kernels?

  6. How is the kernel licensed? Can you run proprietary (closed) applications in user space?

  7. Questions about the kernel sources

    1. How many files has the current kernel for your board?

    2. How does the kernel configuration work?

    3. How do you run menuconfig for cross-compilation?

    4. How do you configure the kernel with a default configuration for the BBB?

    5. How do you compile a zImage or uImage?

    6. Which information is displayed when you compile the kernel? How can you display all commands to the output?

    7. How do you compile the device trees?

    8. How do you compile and install modules?

    9. What does the kernel need after it has started?

    10. How does the initialization of user space work?

    11. How are the kernel log messages organized? Which messages are displayed if the log level is set to 7?

    12. What is the kernel command line and where is it described?

8.5 Chapter 5: Building a root filesystem

"Roll Your Own"

  1. Welche Komponenten muss man mindestens im Root-Filesystem haben?

  2. Was bedeutet FHS?

  3. Wie funktionieren die file permission bits?

  4. In welchem Programm sind alle wesentlichen Werkzeuge fuer das Root-FS enthalten?

  5. Wofuer wird das staging directory verwendet?

  6. Mit welchen Kommandozeilenaufrufen baut man dieses Programm?

  7. Was sind device nodes und wie erzeugt man sie?

  8. Welche Bedeutung haben die Filesysteme /proc und /sysfs und wie mountet man sie?

  9. Wie installiert man Kernelmodule?

  10. Welches sind die drei Varianten, mit denen man dem Kernel das Root-FS servieren kann?

  11. Wie erzeugt man ein initramfs?

  12. Wie kann man das Root-FS ueber NFS bereitstellen?

  13. Es gibt drei Alternativen, mit denen man dynamisch Geraetedateien erzeugen kann. Wie heissen sie?

  14. Warum sind statisch generierte Geraetedateien gar nicht so schlecht?

  15. Wie funktioniert der Init Prozess?

  16. Wie konfiguriert man die user accounts?

  17. Mit welchem Programm kann man das neu gebaute Root-FS simulieren?

8.6 Chapter 6: Selecting a build system

  1. Welche Baukästen fuer Embedded Linux kennen Sie?

  2. Welche Hauptaufgaben hat ein Buildsystem?

  3. Wie konfiguriert und baut man Buildroot für ein bestimmtes Board, das bereits in Buildroot unterstützt wird?

  4. Aus welchen Bestandteilen besteht das Yoctoproject?

  5. Wie baut man mit Yocto ein komplettes GNU/Linux Betriebssystem für das Beagle Bone Black?

  6. Was bedeuten die "meta-" Einheiten in Yocto? Geben Sie ein paar Beispiele.

  7. Welches Programm verwendet Yocto zum Steuern der Kompilierung der Pakete?

8.7 Chapter 10: Updating Software in the Field

  1. In welche drei Update-Verfahren können Updates charakterisiert werden?

    • Local (Mensch hat vor Ort z.B. USB Flash Drive dabei)

    • Remote (Mensch veranlasst vor Ort einen Update über das Netz)

    • OTA (Mensch nicht vor Ort nötig / automatischer Push auf das Gerät)

    Sie klären, was damit gemeint ist.

  2. Welche Teile können upgedated werden?

    • Bootloader

    • Kernel

    • Root filesystem

    • System applications

    • Device-specific data

  3. Drei Eigenschaften, die der Software-Update haben muss.

    • Robust

    • Fail-Safe

    • Secure

  4. Drei Verfahren für Software-Updates

    • symmetric image update (A/B)

      • Mender in standalone mode

      • SWUpdate

      • RAUC

      • fwup

      Vor- und Nachteile?

    • asymmetric image update (recovery mode)

      • SWUpdate

      • RAUC

      Vor- und Nachteile?

    • atomic file update (OSTree)

  5. OTA update

    • Mender (managed mode)

    • Balena (Updates in Container)

    • Eclipse hawkBit with clients SWUpdate or RAUC (wird nicht behandelt)

    Wie funktioniert grob der OTA update bei Mender?

8.8 Chapter 11: Interfacing with Device Drivers

  1. Welche grundsaetzlichen Arten von Geraetetreibern gibt es?

  2. Was sind "major" und "minor numbers"? Wo sind diese Zahlen definiert?

  3. Wie kann man die Geraetedateien anlegen?

  4. Wozu braucht man Blocktreiber?

  5. Wozu dient das /proc Filesystem?

  6. Wozu dient das /sys Filesystem?

  7. Wozu verwendet man die folgenden Dateien

    /sys/devices
    /sys/class
    /sys/block
  8. Wie greift man aus dem user-space in der Regel auf Hardware zu? (bitte mit Beispielen)

  9. Wie reagiert man auf GPIO Interrupts im user-space? (hier sollte man das C Beispiel aus dem Buch verstehen)

  10. Wie steuert man LEDs im user-space an?

  11. Ueber welche Geraetedatei kann man die SPI Schnittstelle ansteuern?

  12. Ueber welche Geraetedatei kann man die I2C Schnittstelle ansteuern?

  13. Skizzieren Sie, wie man einen Geraetetreiber schreibt, kompiliert und laedt.

  14. Was ist der Unterschied zwischen einem device tree und platform data?

8.9 Chapter 21: Real-time programming

  1. Muss Echtzeit-Programmierung immer schnell sein?

  2. Definieren Sie soft-realtime und hard-realtime.

  3. Wie schnell ist ungefaehr die Antwortzeit bei einem gewoehnlichen Kernel und wie schnell bei einem Echtzeit-Kernel?

  4. Wie haengt Determinismus beim Linux Kern vom Durchsatz ab?

  5. Welche Einfluesse wirken sich auf den Determinismus eines Linux Kernels aus (8 Stueck)?

  6. Was ist kernel preemption und wie aktiviert man sie?

  7. Was versteht man unter einem PREEMPT_RT Kernel?

  8. Was sind threaded interrupt handler?

  9. Wozu dient das Kommando chrt?

  10. Was sind high-resolution timer und wie aktiviert man sie?

  11. Wie misst man die Scheduler-Latenz?

  12. Wie misst man allgemein Latenzzeiten im Kernel?