Fragen zu Embedded Linux

1   Kommandozeile

2   ARM

  • Nennen Sie für jede ARM Architektur einen konkreten Mikrocontroller
    • ARMv4
    • ARMv5
    • ARMv6
    • ARMv7

3   GNU Tools

  • Was bedeutet "EABI"
  • Was bedeuten die einzelnen Abschnitte im Namen "arm-linux-gnueabi-gcc"?

4   Bootloader

  1. Zeichnen Sie ein Diagramm das den Ablauf des Bootens bei ihrem Board zeigt (Vorbild: Atmel Linux Homepage)
  2. Wozu braucht man einen Bootloader?
  3. Wieso kann der first level bootloader im Mikrocontroller im Allgemeinen nicht den allgemeinen Bootvorgang des Linux Kernels einleiten?
  4. Wie gross sind typische Bootloader wie z.B. U-Boot und Apex?
  5. Welchen Funktionsumfang hat der U-Boot Bootloader?

5   Kernel

  • Fragen zum Device Tree aufnehmen (Simmonds Kap. 3, Molloy Kap. 6)

6   Fragen zur Echtzeit

  • Die naive Lösung, eine zeitliche Verzögerung ("delay") über eine Dummy-Zählschleife zu erzeugen hat Nachteile - welche?
  • Wie programmiert man "gute" Verzögerungen im Userspace und im Kernel?
  • Wie programmiert man einen genauen Timer im Userspace und im Kernel?
  • Wie misst man die aktuelle Zeit auf Mikrosekunden?
  • Welche grundsätzlichen Möglichkeiten gibt es, um Linux zu einem Echtzeit-Betriebssystem zu machen? Beschreiben Sie die zwei verschiedenen Ansätze.

7   Fragen zu FOSS

  • Erläutern Sie das Prinzip des Copyleft.
  • Welche vier Freiheiten gewährt die GPL?
  • Darf man Programme, die mit der GPL lizenziert sind, für kommerzielle Zwecke nutzen?
  • Wie unterscheidet sich die LGPL von der GPL?
  • Wie unterscheidet sich die BSD Lizenz von der GPL?
  • Was sind Duale Lizenzen? Nennen Sie ein Beispiel.
  • Darf man Programme im Linux Userspace unter einer proprietären Lizenz vertreiben?
  • Darf man mit dem freien GNU C Compiler kommerzielle geschlossene Programme schreiben?
  • Was halten Sie von geschlossenen Kernelmodulen?

8   Fragen zum Hostrechner

  1. Installieren Sie Linux auf Ihrem Hostrechner, entweder in einer eigenen Partition oder in einer virtuelle Maschine wie z.B. VirtualBox (https://www.virtualbox.org).
  2. Sehen Sie sich auf Ihrem GNU/Linux Desktop PC oder Laptop den Kernel und das Root Filesystem an. Wie viel Platz beanspruchen die einzelnen Teile?
  3. Für welche Aufgaben wird der Hostrechner (Entwicklungsrechner) verwendet?
  4. Im Skript steht eine Liste von Werkzeugen für den Entwicklungsrechner. Was macht jedes einzelne dieser Werkzeuge?.
  5. Lernen Sie die Bedienung Ihres Linux Rechners ausschliesslich über die Kommandozeile.
  6. Installieren Sie einen Teminal Multiplexer, z.B. screen oder tmux. Auch auf dem Zielrechner ist so ein Werkzeug sehr praktisch.

  7. Welche Terminalprogramme gibt es unter Linux, um auf die Konsole über die serielle Schnittstelle zu gehen? Wie lauten die üblichen Einstellungen?
  8. Wie kann man Daten im Terminalprogramm mit dem Protokoll X/Y/Z-Modem übertragen? Warum sollten nur kleinere Dateien bis zu ein paar 100 KByte übertragen werden?
  9. Wie arbeitet man mit folgenden Programmen: ssh, scp, ftp (ncftp)?
  10. Wie ändert man die Netzwerkeinstellungen für die Schnittstellen eth0 und eth1 mit den Werkzeugen ifconfig, route, ethtool und iptables.

    Wie richtet man auf dem Host eine zweite Ethernet-Schnittstelle ein, um ein Netzwerkkabel mit dem Target zu verbinden? Wie lauten die Einstellungen auf dem Target und auf dem Host?

  11. Installieren Sie den Quelltext des Linux Kernels auf dem Hostrechner und kompilieren Sie ihn.
  12. Installieren Sie auf Ihrem Entwicklungsrechner eine Toolchain für die ARMv5 Architektur (ELDK oder Debian).
  13. Wie richtet man auf dem Host einen NFS Server ein?
  14. Wie richtet man auf dem Host einen TFTP Server ein?

9   Fragen zur Einführung

  1. Suchen Sie Geräte, die unter Linux laufen. Sie haben sicher schon selber welche entdeckt. Sie können sich aber auch von folgenden Seiten inspirieren lassen:

  1. Lesen Sie den folgenden Artikel:

    Cliff Brake: Tipps for planning an embedded Linux project, 2006

    http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/intro/planning-tips.txt

    Beantworten Sie folgende Fragen:

    1. Welche Anforderungen sprechen für Linux? (5 Stück)
    2. Wie "bezahlt" man die Vorteile von Linux?
    3. Aus welchen Einzelteilen besteht Embedded Linux? (6 Stück)
    4. Welche Fähigkeiten braucht man, um einen Rechner mit Embedded Linux auszustatten und zu programmieren?
    5. Welche Kosten sind zu erwarten?
    6. Welche Risiken gibt es?
    7. Was umfasst der Lebenszyklus des Produktes?
    8. Was erwartet Sie hinsichtlich der Lizenzen, wenn Sie Linux wählen?
  1. Lesen Sie das Kapitel 1 im Buch von Hallinan ("Introduction").

    URL: http://proquest.tech.safaribooksonline.de/book/operating-systems-and-server-administration/embedded-linux/9780137061129

    Beantworten Sie folgende Fragen:

    1. Warum Linux? (6 Gründe)
    2. Was bedeutet "GPL"?
    3. Was ist "Open Source"?
    4. Was verstehen Sie unter "Linux Standard Base"?
  1. Lesen sie Hallinan, Kap. 2, "The Big Picture"

    URL:

    http://proquest.tech.safaribooksonline.de/book/operating-systems-and-server-administration/embedded-linux/9780137061129

    Beantworten Sie folgende Fragen:

    1. Was zeichnet Embedded Systems aus?
    2. Vergleichen Sie BIOS und Bootloader.
    3. Aus welchen wesentlichen Funktionsblöcken bestehen Embedded Systems?
    4. Aus welcher Hardware besteht die Entwicklungsumgebung?
    5. Wie startet Embedded Linux? (von U-Boot bis init Prozess)
    6. Welche Arten von Flash Speicher gibt es?
    7. In welche Regionen ist der Flash Speicher bei Linux in der Regel aufgeteilt?
    8. Wie sieht grob die memory map des gesamten Rechners aus?
    9. Beschreiben Sie den Ausführungskontext mit Applikation, C Bibliothek, Kernel und Gerätetreibern. Was läuft im Kernel-Kontext, was im User-Kontext?
    10. Was macht die MMU und wo ist sie eingebaut?
    11. Wie nennt man die nicht-native Kompilierung auch?
    12. Was ist native Kompilierung? Ab welcher Rechenleistung macht sie Sinn?
    13. Was ist eine Embedded Linux Distribution?

      Aus wie vielen Paketen besteht eine Distribution ungefähr?

  1. Lesen Sie den Artikel: Rene Rebe, Architekturen eingebetteter Linux Systeme, 2008

    http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/intro/rebe-linux-ueberall.pdf

    Beantworten Sie folgende Fragen:

    1. Welche anderen CPUs unterstützt Linux neben dem x86?
    2. Was ist ein monolithischer Kern?
    3. Warum lässt sich Linux einfach auf fast beliebige Prozessoren portieren?
    4. Wie unterscheiden sich die Befehlssätze der Prozessorfamilien?
    5. Damit die Linux Speicherverwaltung (virtual memory) funktioniert, muss der Mikrocontroller eine bestimmte Hardware-Komponente haben. Wie heisst diese?
    6. Wie heisst die Linux Variante, die ohne diese Hardware-Komponente auskommt?
    7. Was ist ein "System on Chip" (SoC)?
    8. Wie sieht die Schichtung der Software eines Embedded Linux Systems in etwa aus?
    9. Welches Dateisystem wird bei Flash Speicher häufig verwendet?
    10. Welche Sprachen werden zur Programmierung verwendet?
    11. Welche Bootloader werden bei Embedded Linux verwendet? Ist grub auch eine Option?

10   Fragen zu Schnittstellen

10.1   GPIO Pins

  1. In welchem Filesystem sind die GPIO Pins für den Zugriff aus dem Userspace organisiert?
  2. Welche Spannungswerte sind bei Ausgabepins üblich?
  3. Wie schaltet man einen GPIO Pin auf Ausgabe oder Eingabe?
  4. Welchen Strom liefert in etwa ein GPIO Pin nach draussen ("source")?
  5. Welchen Strom kann in etwa ein GPIO Pin nach innen leiten ("sink")?
  6. Vergleichen Sie die Ströme in den beiden vorherigen Aufgaben mit dem Betriebsstrom einer normalen LED. Kann ein Ausgang eine LED ansteuern?

    Dazu ist hier ist das Datenblatt einer gewöhnlichen LED:

    http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/datenblaetter/led.pdf

  7. Was passiert, wenn Sie eine Eingangsspannung an einen Eingangspin legen, die höher als die maximale erlaubte ist?
  8. Wie gibt man ein Logiksignal auf einem Pin aus?
  9. Wie liest man den Logikpegel an einem Eingangspin?
  10. Wie kann man über einen Eingangspin einen Interrupt erzeugen?
  11. Wie schnell kann man einen Ausgangspin periodisch ein- und ausschalten?
  12. Welche Möglichkeiten gibt es, um einen GPIO Pin ohne die Verwendung des Sysfs anzusteuern?

10.2   Leuchtdioden (LEDs)

  1. In welchem Filesystem sind die LEDs für den Zugriff aus dem Userspace organisiert?
  2. Wie schaltet man eine LED ein und aus?
  3. Wie kann man die Helligkeit einer LED verändern? (Achtung: Das geht nicht immer).
  4. Wie kann man ein periodisches "Herzschlag-Blinken" erzeugen?

10.3   UART

  1. Nennen Sie die wesentlichen zwei Signale bei einem UART.
  2. Ist die Übertragung synchron oder asynchron?
  3. Welche Parameter der UART Kommunikation müssen bei der Übertragung bei beiden Partnern unbedingt zusammenpassen?
  4. In welchem Bereich liegt in etwa die Datenrate bei einem UART?
  5. Welche Datenrate wird bei der Gnublin Konsole verwendet?
  6. Beschreiben Sie, wie man aus den UART Signalen eine RS-232 Schnittstelle macht. Zeichnen Sie die Pinbelegung einer 9-poligen Sub-D Buchse, die bis vor kurzem noch an vielen PCs und Notebooks zu finden war. Wie hoch sind die Signalpegel?
  7. Wie kann man eine UART Schnittstelle über einen freien USB Hostanschluss realisieren?

10.4   I2C Bus

  1. Nennen Sie die wesentlichen Signale beim I2C Bus.
  2. In welchem Bereich wurde der I2C Bus bei seiner Erfindung hauptsächlich eingesetzt?
  3. Ist die Übertragung synchron oder asynchron?
  4. Mit welchen Datenraten wird die I2C Kommunikation meist durchgeführt? Vergleichen Sie diese mit der üblichen Datenrate beim UART.
  5. Für welche Entfernungen ist der Bus entworfen worden?
  6. Wie werden die einzelnen I2C Geräte am Bus unterschieden?
  7. Wie viele Teilnehmer können maximal an einem I2C Bus angeschlossen werden?
  8. Ist I2C ein Single-Master Bus oder eine Multi-Master Bus?
  9. Nennen Sie vier integierte Schaltungen mit I2C Bus:

    1. Port Expander
    2. A/D Wandler
    3. Schrittmotor-Ansteuerung
    4. EEPROM
  10. Kann man den I2C Bus auch mit GPIO Pins realisieren? Wo könnte im Kernel die richtige Stelle zum Nachsehen sein?

10.5   SPI Schnittstelle

  1. Nennen Sie die wesentlichen Signale bei der SPI Schnittstelle.
  2. Ist die Übertragung synchron oder asynchron?
  3. Welche digitale Grundschaltung macht das Prinzip der SPI Schnittstelle aus?
  4. Wie kann man mehrere Geräte an der SPI Schnittstelle betreiben?
  5. Mit welcher Datenrate werden SPI Schnittstellen üblicherweise betrieben?
  6. Nennen Sie drei integrierte Schaltungen, die über SPI angeschlossen werden:

    • CAN Controller
    • Siebensegment-Controller
    • Display
  7. Welches Massenspeicher-Medium hat meist auch eine SPI Schnittstelle eingebaut?

10.6   USB Schnittstelle

  1. Nennen Sie ein paar häufig genutzte USB Profile mit ihrer Bedeutung.
  2. Zählen Sie alle USB Schnittstellen auf Ihrem Embedded Linux Board auf. Beachten Sie die Rollen der USB Ports und ihre maximale Geschwindigkeit.
  3. Wie kann man eine freie USB Device Schnittstelle auf dem Embedded Linux Rechner nutzen, um eine Netzwerkverbindung mit dem Hostrechner aufzubauen?
  4. Kann man über eine USB Schnittstelle am Mikrocontroller Linux booten? Es wird dabei der U-Boot Bootloader verwendet.
  5. Sie brauchen zum Ansteuern von Peripherie einen freien UART, es gibt aber nur noch eine freie USB Schnittstelle an Ihrem Embedded Linux Board.
  6. Wie würde man ein Embedded Linux Board entwerfen, so dass es über eine USB Schnittstelle zum Hostrechner hin folgende drei Dienste zur Verfügung stellt:

    1. Die Stromversorgung
    2. Eine serielle Konsolenverbindung
    3. Ein Massenspeicherlaufwerk

11   Fragen zum Linux Kernel

  1. Schreiben Sie alle Punkte der Mindmap (Tafelbild 23.5.14) auf Ihr Lösungsblatt.
  2. Navigation im Quelltext

    1. Mit welchem Werkzeug kann man den Kernel Quelltext weiterverarbeiten, so dass man ihn bequem im Web Browser betrachten kann?
    2. Nennen Sie eine Website, bei der man den Kernel bereits zum Betrachten vorbereitet hat.
  3. Wie kann man mit dem Tags Mechanismus im Kernel Quelltext navigieren?
  4. Wie funktioniert cscopes?
  5. Suchen Sie die Anzahl der C Quelltextdateien (Endungen .c und .h)
  6. Suchen Sie die Anzahl der Assemblerdateien (Endung .S).
  7. Was bedeutet "out-of-tree" Kompilierung?
  8. Welche Dateiendung haben Kernelmodule?
  9. Wie bekommt man den Quelltext einer Änderung oder eines Zusatzes für den Kernel in die "Mainline" Distribution?
  10. Sie haben eine wichtige Änderung für den Linux Kernel gemacht. Welche Vor- und Nachteile haben folgende Strategien.

    1. Die Änderungen bleiben lokal in ihrer Entwicklerversion, z.B. weil ihnen das "Mainlining" zu aufwendig erscheint.
    2. Die Änderungen werden in die "Mainline" Version des Kernels aufgenommen.

Gnublin-spezifische Aufgaben

  1. Kompilieren Sie den Gnublin Kernel. Eine Anleitung finden Sie im Wiki:

  2. Kompilieren Sie ein Kernel-Modul für Gnublin und laden Sie es in den laufenden Kernel. Die Kompilierung soll einmal "nativ" gemacht werden und einmal in der Cross-Entwicklungsumgebung auf dem Host.

  3. Versuchen Sie den Gnublin Kernel kleiner zu machen. Was könnte man bei make menuconfig weglassen?

12   Aufgaben zum NGW100

Das Network Gateway NGW100 ist ein Board von Atmel mit einem AVR32AP7000 Prozessor. Das AVRFreaks Wiki hat folgenden Eintrag zum NGW100:

http://www.avrfreaks.net/wiki/index.php/Documentation:NGW

12.1   Hardware

  • Wo liegt auf dem NGW100 (AVR32) der virtuelle Speicher und wo der physikalische Speicher?
  • Wie kommt man von den physikalischen auf die virtuellen Adressen?
12.1.1   DRAM
  • Wie gross (Anzahl Adressen x Datenbreite) ist das dynamische RAM und über welche Adressen erstreckt es sich?
12.1.2   NOR Flash

Beantworten Sie die Fragen zum NOR Flash Speicher auf dem NGW100:

  • Wie viele Sektoren gibt es und wie gross sind diese?
  • Wie lange dauert das Beschreiben und Löschen jedes Sektors?
  • In welche drei logischen Bereiche ist dieser Flash Speicher gegliedert? Wie gross sind diese Bereiche genau?
  • Welche Möglichkeiten gibt es, um den NOR Flash Speicher zu beschreiben, wenn
    • der Flash Speicher komplett leer ist?
    • der Flash Speicher bereits U-Boot enthält?
    • der Flash Speicher bereits U-Boot und Linux enthält?
12.1.3   DataFlash
  • Wie wird der DataFlash Baustein angesteuert?
  • Welche Kapazität hat dieser Baustein?
12.1.4   MMC/SD Karten
  • Wie wird die MMC/SD Karte angesteuert?
12.1.5   USB
  • Gibt es auf dem NGW eine USB Host Schnittstelle?

12.2   Booten

  • Welche Möglichkeiten gibt es, um das NGW100 mit Linux zu starten?
  • Wie funktioniert der Bootvorgang, wenn sowohl Kernel als auch Root-FS im NOR Flash Speicher liegen?
  • Welches Init-System verwendet Buildroot für das NGW?
  • Welche Dienste werden durch Init gestartet?
  • Am Ende des Boot-Vorganges startet der init Prozess eine Login Shell. Diese Shell liest ein initiales Skript unter /etc/profile oder .profile im Login-Verzeichnis. Schreiben Sie in diese Datei Ihre gewünschten Umgebungsvariablen und sonstigen Zusätze.

12.3   Buildroot

  • Warum sollten alle Übungsteilnehmer die gleiche Buildroot Version nehmen?

  • Welche Pakete mussten Sie bei Ihrem Linux nachinstallieren, damit Buildroot kompiliert?

  • Wie arbeitet man über NFS mit dem NGW100?

  • Es kann zu zwei Komplikationen kommen:

    1. Dropbear hängt, weil dropbear_dss_host_key, und dropbear_rsa_host_key in /etc/dropbear/ Probleme machen. Den Grund kenne ich nicht. Ich kopiere diese Dateien immer zu Fuss an diese Stelle.

    2. Das Netzwerk hängt, da in /etc/network/interfaces auf dem Target eth0 so eingestellt ist:

      auto eth0
      iface eth0 inet dhcp

      Zur Abhilfe eth0 als static deklarieren.

  • make menuconfig auf buildroot, kernel, busybox und

    uclibc anwenden. Sehen, was in den einzelnen Teilbereichen möglich ist.

  • Wie kann man in Buildroot neue Accounts mit voreingestelltem Passwort konfigurieren?

  • Welche Bedeutung haben die einzelnen Buildroot Verzeichnisse? Sie dazu die Literaturstelle AVR32003.

  • Wie baut man ein selbstgeschriebenes Programm in Buildroot ein, so dass es Teil des Root-FS wird? Sehen Sie sich dazu die Literaturstelle AVR32004 an.

    Das Paket könnte demonstrieren: Kommandozeilenparameter (getopt), autotools, make, Interrupts im User-Space, Kommunikation über UART, SPI, I2C, GPIO, Threads, Lognachrichten schreiben, Konfigurationsdateien lesen und so weiter. Siehe auch den Abschnitt "Applikationen schreiben" weiter unten.

  • Python im RootFS installieren.

12.4   U-Boot

  • Wozu gibt es den Bootloader "U-Boot"? Wenn Sie auf dem U-Boot Prompt help eingeben, werden alle Kommandos aufgelistet. Was machen (knapp) diese Kommandos?

  • Testen Sie den Download über das U-Boot load<x> Kommando (<x> kann sein b - binär, s - S-Record, y - Y-Modem). Auf der Seite des PC verwenden Sie am besten Kermit (das Linux Paket heisst ckermit).

  • Was ist ein uImage? Wie stellt man ein uImage her? Wie findet man die Parameter eines uImage heraus?

  • flash-upgrade

    Bei dieser Aufgabe wird U-Boot im NOR Flash Speicher aktualisiert. Dazu zunächst mit Git die Sourcen des flash-upgrade Paketes holen. Git ist im Paket git-core:

    git clone git://www.atmel.no/~hcegtvedt/flash-upgrade.git

Dann u-boot.bin in das Quelltextverzeichnis kopieren und kompilieren. Das entstandene uImage am besten auf eine MMC Karte kopieren und dann im U-Boot von dort in den Speicher laden und ausführen.

  • Wie lädt man mit U-Boot eine initrd?

Anmerkung 1: Die Applikationsschriften von Atmel zum AVR32 findet man in

http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/ngw100/appnotes/avr32/

Erste Inspektion des laufenden Embedded Linux

  1. Wie kann man sich die Konsole des AVR32 Rechners auf den Entwicklungsrechner holen?
  2. Welche Programme sind in /bin, /usr/bin und /usr/sbin/?
  3. Was machen die Skript in /etc/init.d/?
  4. Wo ist der Quelltext des HTTP Daemon? Was steht in httpd.conf? Wie kann man das Datenverzeichnis des Webservers auf einen anderen Pfad legen?
  5. Welche Dienste laufen auf dem NGW100 im Hintergrund?
  6. Einige wichtige Einträge in /proc/ (procfs) ansehen.
  7. Finden Sie heraus, wie Sie mit den Kommandos telnet, ssh, scp, ncftp und http Kontakt mit dem NGW aufnehmen können.
  8. Gibt es auf dem NGW100 eine oder mehrere Logdateien?
  9. Wozu wird das sysfs verwendet?

12.5   GPIOs und LEDs

  • Die Applikationsschrift AVR32408 geht auf GPIO und LED unter Linux ein (leider veraltet).

    Die aktuelle Technik heisst "gpio-sysfs". Machen Sie Aus- und Eingaben über die Dateien z.B. in /sys/class/leds/a/ (LED A).

    Setzen Sie einen "Trigger", so dass bei der Änderung eines Pins ein Interrupt erzeugt wird.

  • Steuern Sie den GPIO Pin PB25 mit Hilfe des gpio-sysfs an. Dieser Pin liegt auf Jumper 6 (J6) am Pin 25. In sysfs ist der Pin über GPIO57 (32+25) zu erreichen.

  • Automatisieren Sie die Ansteuerung des PB25 über ein Python-Skript.

12.6   Applikationen schreiben

  • Wie integriert man eine Anwendung in Linux die sofort nach dem Booten laufen soll, ohne dass man irgendwelche Kommandos eintippen muss?

  • Wie schon im Abschnitt über Buildroot, sollen Sie sich klar machen, wie man ein neues Paket (Ihre Anwendung) in Buildroot integriert. Sehen Sie sich als Beispielanwendung misc/elinuxdemo/ an.

  • Integrieren Sie ein Paket in Buildroot, das autokonfiguriert werden kann.

    Siehe z.B. <ELSVN>/misc/icnova-demo/.

  • getopt verwenden

  • Aktivieren Sie eine freie UART Schnittstelle und schreiben Sie ein kleines Testprogramm in C, um über den UART zu kommunizieren. Verwenden Sie die Einstellungen 9600 Baud und 8N1 (8 Datenbits, no Parity, 1 Stopbit).

  • GPIO ansteuern

  • Wie schreibt eine Anwendung in das syslog?

  • Installieren Sie eine Web Server auf dem NGW100. Es gibt mehrere Möglichkeiten: busybox, lighttpd, monkey, mongoose und noch ein paar andere. Der Server sollte CGI Skripte ausführen können.

  • Schreiben Sie einen kleinen Server in C, der automatisch nach dem Booten gestartet wird und der die Kommunikation mit externer Hardware übernimmt. Die Hardware kann z.B. das "Anyio" Board sein, das über UART angesteuert wird (../../labor/avr/anyio/).

    Der Server soll über ein CGI Skript gesteuert werden können, so dass an der externen Hardware eine LED eingeschaltet wird oder ein Analogeingang eingelesen wird. Zwischen CGI Skript und Server ist dazu ein Mittel zur Interprozesskommunikation einzubauen.

12.7   Debuggen

  • Beschreiben Sie, wie Sie das NGW100 bei laufendem Linux debuggen können.

    Target mit Linux: avr32-linux-gdb (Host) und gdbserver (Target)

  • Beschreiben Sie, wie Sie das NGW100 ohne laufendem Linux debuggen können.

    Target ohne Linux: avr32-gdb + avr32gdbproxy + JTAGICEmkII. Auch das Debuggen des Linux Kernes gehört hier dazu.

  • Wie kann man Linux Treiber debuggen?

    Hinweis: Wie bei "Target ohne Linux". Die Treiber müssen jedoch statisch mit dem Kernel gelinkt sein.

  • Versuchen Sie mit einem JTAG Debugger den Linux Kernel direkt nach dem Einsprungpunkt im Einzelschrittbetrieb auszuführen. Dabei macht es einen Unterschied, ob die Speicherverwaltungseinheit (MMU) aus- oder eingeschaltet ist. Worin macht sich das bemerkbar?

Details siehe

http://avr32linux.org/twiki/bin/view/Main/KernelDebugging

12.8   Gerätetreiber

  • Lesen und verstehen Sie die Applikationsschrift AVR32743 (AVR32 AP7 Linux Kernel Module Application) von Atmel (siehe misc/AVR32743/).

  • Für die wichtigen I/O Schnittstellen

    • GPIO
    • SPI
    • I2C
    • PWM

    gibt es im AVR32 Linux bereits fertige Treiber. Wie verwendet man diese Treiber in einer eigenen Applikation?

  • Wie kompiliert man einen Gerätetreiber "out-of-tree"? Wozu gibt es die Umgebungsvariable KDIR?

  • Schliessen Sie an PB25 einen Taster an (Interrupt!) und an einen beliebigen anderen GPIO Pin eine LED. Schreiben Sie einen kleinen Treiber der den Tasten-Interrupt entgegennimmt und die LED in Folge toggelt.

12.9   Echtzeit

x86 PC mit Linux

  • Die Live-CD von osadl.org mit Realtime-Kernel holen und ausprobieren.

    http://www.osadl.org/Live-CD.projects-live-cd.0.html

  • Den OSADL "latest stable" Kernel mit RT-Preempt Patch holen, kompilieren und installieren.

  • Über den Parallelport Messungen der Echtzeiteigenschaften durchführen (Rechteck-Generator und Oszilloskop).

  • Auf dem gleichen PC RTAI oder Xenomai installieren und Vergleichsmessungen mit RT-Preempt durchführen.

13   Aufgaben zu Distributionen und Root Filesystemen

Zur Einstimmung lesen Sie den Artikel von Jan Altenberg aus dem Jahr 2008 (8 Seiten):

http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/rootfs/altenberg

13.1   Linux from Scratch

13.3   Debian/ARM

14   Fragen zum Mikrocontroller

  1. Im Buch von Hallinan, Kapitel 3 lesen ("Processor Basics").

    Auch im Buch von Yaghmour, Kapitel 3 kann man etwas über Hardware zu erfahren.

  2. Gnublin Schaltplan und Datenblatt des LPC3131

    http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/gnublin

  3. Machen Sie mit den im Skript an der Stelle ../Gliederung/main.html#uc genannten Mikrocontrollern eine Tabelle, die über folgende Punkte Aufschluss gibt:

    • Hersteller
    • Verwendeter Kern
    • Taktfrequenz
    • Ungefähre Rechenleistung
    • Gehäusetyp, Anschlüsse
    • Preis (Farnell, Mouser, Digikey)
    • Art und Anzahl der Peripherie, z.B.UART, SPI, I2C, ADC, DAC, PWM, USB Host, USB Device
    • Besonderheiten, z.B. Grafikbeschleuniger, Time Processing Unit

15   Aufgaben zum Gnublin LPC3131

Hinweis: Alle Aufgaben werden im Gnublin Wiki beschrieben (http://wiki.gnublin.org).

Tipps für die praktischen Übungen mit Gnublin:

  • Gewöhnen Sie sich daran, mit textuellen Werkzeugen auf der Kommandozeile zu arbeiten. Auch auf Ihrem Desktop Rechner oder dem Notebook können Sie ein Terminalfenster starten und darin auf der Kommandozeile arbeiten. Idealerweise haben Sie dort auch ein Debian GNU/Linux System installiert, so dass Sie Ihre Erkenntnisse auch gleich auf Gnublin übertragen können. Die Gnublin Distribution basiert auf Debian für ARM.

  • Arbeiten Sie während des Semesters konstant an der Weiterentwicklung Ihrer Linux-Kenntnisse, als Literatur verwenden Sie

    Beide Texte sind unter freien Lizenzen verfügbar.

    Neben den sehr elementaren Inhalten des LPI Buchs gibt es auch noch andere Zertifikate vom LPI, siehe http://www.lpice.eu/de/home.html.

    Wer seine Kenntnisse prüfen will, der kann den LPI Examen-Simulator besuchen (sehr zu empfehlen - das macht wirklich Spass!):

    http://www.lpi-academy.de/sim/exam/

    An der Hochschule Augsburg gibt es auch das Wahlfach LPI Zertifizierung, bei dem Sie in einem einwöchigen Blockkurs das Niveau der LPIC 101 und 102 Prüfungen erreichen sollen. Falls Sie Interesse an den Schulungsunterlagen haben, schreiben Sie mir eine E-mail.

15.1   Ganz am Anfang

  1. Gnublin Board an USB (Konsole) anstecken, booten und einloggen. Dazu muss auf dem Hostrechner ein Terminalemulator laufen, z.B. picocom oder kermit.
  2. Hier sind ein paar wichtige Programme die man auf der Kommandozeile bedient: Kommandozeile.rst. Für jedes Kommando gibt es eine man page, die man mit dem Kommando man aufrufen kann, zum Beispiel für ls mit man ls.
  3. Auf der Konsole den Zielrechner "erforschen":

    • /proc/cpuinfo, /proc/meminfo und andere Einträge in /proc
    • Welches Filesystem hat das Root-FS?
    • Wieviel Platz wird auf der MicroSD Karte benötigt?
    • Welche Dienste laufen?
  4. Gewöhnen Sie sich an einen Editor auf dem Zielrechner. Es gibt z.B. vi oder jove.
  5. "Hello World" Programm in C/C++ auf Host crosskompilieren und auf Gnublin übertragen und ausführen.
  6. "Hello World" Programm in C/C++ auf Gnublin nativ kompilieren.
  7. Machen Sie möglichst bald ein Backup der MicroSD Karte.

    Lit.: http://wiki.gnublin.org/index.php/RootFS_sichern

  8. Pseudo-Netzwerkverbindung mit dem Hostrechner herstellen über USB mit g_ether.

    Lit.: http://wiki.gnublin.org/index.php/Pseudo_Netzwerk_mit_USB

    Siehe auch weiter unten: Netzwerkverbindung mit Host.

  9. Beenden Sie die Sitzung wie bei UNIX üblich mit einem shutdown now.

MicroSD Karte

  1. Welche Partitionen sind auf der Karte?
  2. Sichern Sie den Inhalt der Karte auf Ihren Entwicklungsrechner.
  3. Beschreiben Sie mit dem grafischen "Gnublin Installer" die MicroSD Karte.
  4. Vergleichen Sie den Filesystem Hierarchy Standard (http://www.pathname.com/fhs) mit dem Aufbau des Root Filesystem auf der MicroSD Karte.

Ein genauerer Blick in das Filesystem

Suchen Sie die folgenden Verzeichnisse in dem folgenden Text:

http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/index.html

An die "höchste Stelle" (Wurzel) im Verzeichnisbaum kommt man mit cd /. An dieser Stelle hat man folgende Verzeichnisse

bin   etc          proc     sbin   sys   var
boot  home         lib      mnt    root  selinux tmp  vmlinuz
dev   lost+found   opt      run    srv   usr

Das proc Filesystem

root@gnublin:/proc# ls
1    214  4    791        devices      kallsyms    net           sysvipc
169  224  403  792        diskstats    kmsg        pagetypeinfo  timer_list
171  225  408  829        driver       kpagecount  partitions    tty
173  226  5    9          execdomains  kpageflags  sched_debug   uptime
178  227  6    buddyinfo  filesystems  loadavg     self          version
183  228  612  bus        fs           locks       slabinfo      vmallocinfo
186  229  699  cmdline    interrupts   meminfo     softirqs      vmstat
193  230  739  cpu        iomem        misc        stat          zoneinfo
2    3    756  cpuinfo    ioports      modules     swaps
203  365  772  crypto     irq          mounts      sys

root@gnublin:/proc# ls sys/
debug  dev  fs  kernel  net  sunrpc  vm

/proc/sys/kernel/ --> viele Eintraege, die den Kernel betreffen
/proc/sys/net/ -->  viele Eintraege, die das Netzwerk betreffen

Das sysfs Filesystem

Lit.:

http://people.ee.ethz.ch/~arkeller/linux/multi/kernel_user_space_howto.html
root@gnublin:/sys# ls
block  bus  class  dev  devices  firmware  fs  kernel  module  power

root@gnublin:/sys# ls bus
i2c  mmc  platform  scsi  sdio  serio  spi  usb  w1

root@gnublin:/sys# ls class/
bdi       i2c-adapter  misc         scsi_generic  tty          vtconsole
block     i2c-dev      mmc_host     scsi_host     usb_device
firmware  ieee80211    net          sound         usbmon
gpio      input        scsi_device  spi_master    vc
hwmon     mem          scsi_disk    spidev        video4linux

Wichtige Orte:

/sys/class/gpio/
/sys/class/leds/    (nicht vorhanden bei Gnublin)
/sys/kernel/debug/  Debug Filesystem

root@gnublin:/sys# ls devices/platform/
fsl-usb2-udc.0 lpc313x_mmc.0 pnx-i2c.1  regulatory.0 serial8250.0   uevent
lpc313x-wdt    pnx-i2c.0     power      serial8250   spi_lpc313x.0

Das Verzeichnis /etc

Lit.: http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/etc.html

Die Gerätedateien in /dev/:

root@gnublin:/# ls dev/
bus      kmsg   loop7        port   ram13  ram7       sda2    ttyACM0
console  log    lpc313x_adc  ptmx   ram14  ram8       sda3    ttyS0
core     loop0  lpc313x_pwm  pts    ram15  ram9       shm     urandom
fd       loop1  mem          ram    ram16  ramzswap0  spi0    video0
full     loop2  mmcblk0p1    ram0   ram2   random     stderr  xconsole
i2c-0    loop3  mmcblk0p2    ram1   ram3   rtc        stdin   zero
i2c-1    loop4  mmcblk0p3    ram10  ram4   rtc0       stdout
initctl  loop5  null         ram11  ram5   sda        tty
kmem     loop6  pca9555      ram12  ram6   sda1       tty0

Wichtige Dateien:

/dev/mmcblk0p{1,2,3}

Home Verzeichnisse

/root/   --> Hier landet man nach dem Einloggen als 'root'
/home/<user>/

Untersuchen Sie die Verzeichnisse /bin, /usr/bin und /usr/local/bin. Was finden Sie darin? Wieso gibt es drei verschiedene Ordner?

Nun untersuchen Sie die Verzeichnisse /sbin, /usr/sbin und /usr/local/sbin. Wie unterscheiden sich die Programme von denen in den bin/ Ordnern?

Ähnlich aufgebaut ist /lib, /usr/lib und /usr/local/lib. Was steckt in diesen Verzeichnissen? Der Name mancher Dateien endet mit .so.<nummer>, andere mit .a. Was bedeutet das?

Was ist in den Verzeichnissen /include und /usr/include?

Finden Sie mit Hilfe von http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy heraus, was folgende Verzeichnisse bedeuten:

  • /usr/
  • /usr/share/
  • /usr/share/man
  • /usr/share/doc
  • /tmp
  • /var
  • /var/run/

Wozu gehören die folgenden Dateien und Verzeichnisse?

  • /usr/sbin/lighttpd
  • /etc/lighttpd/
  • /var/www/
  • /usr/lib/cgi-bin

Tipp: man lighttpd

Wozu gibt es die folgenden Dateien und Verzeichnisse?:

  • /etc/inittab
  • /etc/init.d/
  • /etc/rc0.d/ rc1.d/ rc2.d/ rc3.d/ rc4.d/ rc5.d/ rc6.d/ rcS.d/
  • /etc/rc.local

Tipp: man init

15.2   Booten

  1. Wie läuft der Bootvorgang beim LPC3131 Controller ab?

    Die Antwort finden Sie im Kapitel 6 des LPC3131 User Manual (ISROM/Boot ROM).

  2. Welche Dienste stellt der Apex Bootloader bereit?
  3. Welche Kommandos führt der Apex Bootloader auf dem Gnublin Board aus, um den Kernel zu laden und auszuführen?
  4. Wie lautet die von Apex verwendete Kernel Kommandozeile?
  5. Welche Dienste werden durch Init gestartet?
  6. Welche alternativen kleinen Init-Systeme kennen Sie?
  7. Wie kann man die Boot-Zeit verringern?

15.3   Ein-/Ausgabe

  1. Das sysfs erforschen mit cd und ls.
  2. LED auf dem Board blinken lassen mit Programmen in unterschiedlichen Sprachen.
  3. Taster anschliessen und einlesen über Polling.
  4. Taster anschliessen und über Interrupt einlesen.
  5. Hardware Erweiterung über I2C anschliessen.

15.4   Webserver

  1. Webserver (lighttpd) starten.
  2. "Hello World" HTML Datei ausliefern an lokalen Browser (lynx, w3m)
  3. CGI Anbindung testen. CGI Skript kann in den Sprachen C, C++, Bash, Lua, Python geschrieben werden.

15.5   Netzwerkverbindung mit Host

  1. Netzwerk-Manager auf Host für die Schnittstelle zu Gnublin konfigurieren ("shared to other computers"). Das startet einen dnsmasq Server auf dem Host, über den Gnublin mit dhclient diverse IP Adressen bezieht und über den auch die DNS Weiterleitung erfolgt.
  2. Um mit dem Gnublin Board Dateien auszutauschen können folgende Techniken verwendet werden:

    1. scp auf dem Hostrechner.
    2. Ein Verzeichnis des Hostrechners auf Gnublin per NFS mounten.

      Lit.: http://wiki.gnublin.org/index.php/NFS_Mount

    3. Ein Verzeichnis des Hostrechners auf Gnublin per SSHFS mounten.

      Lit.: http://wiki.gnublin.org/index.php/SSHFS_Mount

15.6   Gnublin Distribution

  1. Kompilieren Sie die Gnublin Distribution selber. - Wählen Sie, ob Sie auf Debian oder Ubuntu arbeiten. - Welche Version haben die Kernel-Quellen?

    Lit.: http://wiki.gnublin.org/index.php/Gnublin_Distribution

15.7   Kernel kompilieren

  1. Kompilieren Sie den Gnublin Kernel und die Module. Installieren Sie Ihren Kernel auf der MicroSD Karte (auch die Module). Sichern Sie den alten Kernel (auch die Module), so dass Sie ihn notfalls wieder aktivieren können.

    Schritte

    • make gnublin_defconfig
    • make menuconfig (optional)
    • make
    • make modules
    • make modules_install ...
    • Übertragen der Dateien auf die MicroSD Karte
  2. Kompilieren Sie den Gnublin Kernel und die Module. Installieren Sie Ihren Kernel auf der MicroSD Karte (auch die Module). Sichern Sie den alten Kernel (auch die Module), so dass Sie ihn notfalls wieder aktivieren können.

    Schritte

    • make gnublin_defconfig
    • make menuconfig (optional)
    • make
    • make modules
    • make modules_install ...
    • Übertragen der Dateien auf die MicroSD Karte
  3. Kompilieren Sie das Dummy Kernelmodul hello-linux-module, das Sie im Git Repository gnublin-workshop finden:

    git clone ssh://git@elk.informatik.fh-augsburg.de:2222/gnublin-workshop.git

    Gehen Sie beide Wege:

    1. Das Modul auf dem Hostrechner cross-kompilieren.
    2. Das Modul nativ auf Gnublin kompilieren. Dazu müssen Sie die Kernel Sourcen auch auf Gnublin kopieren und mit make modules_prepare vorbereiten.

Lit.: http://wiki.gnublin.org/index.php/Kernel_kompilieren_%2B_Module_installieren

15.9   GPIO

  • GPIO Ein-/Ausgaben über sysfs
  • Interrupts mit "edge"
  • Interrupt-Programme mit poll/epoll in C und Python

Lit.: http://wiki.gnublin.org/index.php/GPIO

16   Laborversuche mit Gnublin

16.1   Der Anfang

/ELDKINST/

ELDK Cross-Compiler auf dem Entwicklungsrechner installieren

/USBKONSOLE/

USB Konsolenverbindung zwischen Gnublin und PC herstellen

Konsolenfenster auf 80 x 24 Zeichen einstellen

/BOOTMSG/

Bootmeldungen betrachten

/LOGIN/

Einloggen

/NEWUSER/

User anlegen (nicht als "root" arbeiten!)

/CMDLINE/

Gnublin auf der Kommandozeile erforschen

/SETTIME/

Zeit setzen mit dem date Kommando

Zeit setzen mit ntpdate

/NETWORK/

  • Netzwerkverbindung herstellen
  • Daten zwischen PC und Gnublin mit scp übertragen
  • Von Gnublin aus auf das Internet zugreifen, z.B. zum Installieren von Paketen.

/HELLOPROG/

  • "Hello World" Programm auf Gnublin nativ übersetzen und ausführen.
  • Das gleiche Programm auf dem Hostrecher crosskompilieren und auf Gnublin übertragen.

/GPIO/

  • Schalten Sie die LED auf dem Gnublin Board ein- und aus. Verwenden Sie dazu die "GPIO sysfs" Anbindung direkt auf der Shell.

  • Schliessen Sie das externe Modul mit Taster und LED an und fragen Sie die Taste ab. Geben Sie die Tastenstellung direkt an die LED weiter: Taste offen = LED aus, Taste gedrückt = LED ein.

    Lösen Sie die Aufgabe einmal mit Polling und einmal mit Interrupts.

Lesen:

/UART-1/

Einen USB-zu-UART oder einen USB-zu-RS232 Adapter an die Gnublin USB Host Schnittstelle anschliessen. Das Sendesignal (TX) mit dem Empfangssignal (RX) verbinden und die Kommunikation von Aus- zu Eingang testen durch simples Ausgeben von ein paar Bytes:

  • Verwenden Sie zunächst das picocom Programm auf Gnublin.
  • Verwenden Sie die Sprache C.
  • Verwenden Sie die Sprache Python mit dem Modul serial.

Es geht auch, wenn Sie zwei UART- bzw. RS-232 Adapter anschliessen und die RX/TX Signale überkreuzen.

/SPI-1/

Schliessen Sie ein DOG Display an und steuern Sie es auf unterster Ebene in C an.

Wechseln Sie danach zur Ansteuerung zum Gnublin API.

Lesen

/I2C-1/

Schliessen Sie den IO Expander an das Gnublin Board an und programmieren Sie einfache Ein-/Ausgabeoperationen in C auf unterster Ebene, so wie es im Wiki Eintrag steht:

http://wiki.gnublin.org/index.php/I2C

Wechseln Sie danach zur Ansteuerung zum Gnublin API.

Lesen

16.2   Root Filesysteme

/BUILDROOT/

Kompilieren Sie Buildroot für Gnublin und installieren Sie Kernel und Root-Filesystem auf einer Micro-SD Karte.

  • Woher bekommen Sie Buildroot?
  • Wir gross ist das erzeugte Root Filesystem?
  • Welche Bestandteile können Sie mit make menuconfig konfigurieren?
  • Welche Pakete brauchen Sie für ein minimales Root Filesystem?
  • Welche C Bibliothek wird bei Buildroot meist verwendet?
  • Gibt es Buildroot auch für Ihr Board?

16.3   Applikationen

/APPCMDLINE/

Schreiben Sie ein Programm zur Demonstration von Kommandozeilenargumenten in C oder Python.

/APPSRV/

Schreiben Sie einen kleinen Demo-Server in C oder Python.

/APPWEB/

Schreiben Sie eine kleine Applikation zur Demonstration von Web-Techniken in C oder Python.
/APPLOG/
Ihre Anwendung soll den System-Logger verwenden.

/APPINIT/

Starten Sie den Server und die Demo-Anwendung automatisch nach dem Booten.

ElinuxFragen (last edited 2018-04-27 07:10:55 by HubertHoegl)

|| Kontakt