Fragen zu Embedded Linux
Inhalt
- 1 Kommandozeile
- 2 ARM
- 3 GNU Tools
- 4 Bootloader
- 5 Kernel
- 6 Fragen zur Echtzeit
- 7 Fragen zu FOSS
- 8 Fragen zum Hostrechner
- 9 Fragen zur Einführung
- 10 Fragen zu Schnittstellen
- 11 Fragen zum Linux Kernel
- 12 Aufgaben zum NGW100
- 13 Aufgaben zu Distributionen und Root Filesystemen
- 14 Fragen zum Mikrocontroller
- 15 Aufgaben zum Gnublin LPC3131
- 16 Laborversuche mit Gnublin
1 Kommandozeile
Wie kopiert man einen Kernel Baum (oder einfacher gesagt: Wie kopiert man Dateibäume mit Punktdateien drin?) Es gibt 3 Varianten.
Quelle: http://elk.informatik.hs-augsburg.de/hhwiki/EmbeddedLinux2012#muster-fur-screen-init-datei
Wie kommt man mit Kommandozeilenwerkzeugen in das Eduroam der Hochschule?
http://elk.informatik.hs-augsburg.de/hhwiki/EmbeddedLinux2012#wifi-im-eduroam-netz-der-hochschule
Wichtige Kernel-Konfigurationswerte
http://elk.informatik.hs-augsburg.de/hhwiki/EmbeddedLinux2012#wichtige-kernel-konfigurationsvariable
Wie kompiliert man ein Paket "cross"
http://elk.informatik.hs-augsburg.de/hhwiki/EmbeddedLinux2012#pakete-krosskompilieren
Ascii-Dump Werkzeuge: ad, xxd, od, vim und emacs hex modes
od -A d -t x1 uImage
Wie sieht man den MBR an?
Wie sieht man beliebige Sektoren an?
"Magic bytes" finden
uImage header analysieren
uImage -> (header entfernen mit dd) -> vmlinux.gz -> entpacken mit gzip (siehe ngw100/howto.rst)
Bsp: dd if=zImage of=piggy.gz bs=1 skip=14817
zImage: http://morgue.openinkpot.org/wiki/Documentation/ZImageFormat Mit mkimage (u-boot-tools) kann man zImage in uImage umwandeln.
Partitionstabelle ansehen
Auf SD Karte "roh" schreiben mit dd
Analysieren: zImage, uImage
Einfach ein "sinnloses" Beispiel: Wie erzeugt man eine Datei mit vier Byte Laenge, jedes Byte wird auf einen bestimmten Wert initialisiert?
dd if=/dev/zero of=header bs=1 count=4 Im Hex-Editor (z.B. hexedit) die vier Byte initialisieren.
Sowas kann man gebrauchen um z.B. einen "initrd" Header zu machen oder um einen uImage Header zu bauen.
cat header rootfs.gz > initrd
Wie macht man einen "loopback" mount?
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
- Zeichnen Sie ein Diagramm das den Ablauf des Bootens bei ihrem Board zeigt (Vorbild: Atmel Linux Homepage)
- Wozu braucht man einen Bootloader?
- Wieso kann der first level bootloader im Mikrocontroller im Allgemeinen nicht den allgemeinen Bootvorgang des Linux Kernels einleiten?
- Wie gross sind typische Bootloader wie z.B. U-Boot und Apex?
- 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
- Installieren Sie Linux auf Ihrem Hostrechner, entweder in einer eigenen Partition oder in einer virtuelle Maschine wie z.B. VirtualBox (https://www.virtualbox.org).
- 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?
- Für welche Aufgaben wird der Hostrechner (Entwicklungsrechner) verwendet?
- Im Skript steht eine Liste von Werkzeugen für den Entwicklungsrechner. Was macht jedes einzelne dieser Werkzeuge?.
- Lernen Sie die Bedienung Ihres Linux Rechners ausschliesslich über die Kommandozeile.
Installieren Sie einen Teminal Multiplexer, z.B. screen oder tmux. Auch auf dem Zielrechner ist so ein Werkzeug sehr praktisch.
- Welche Terminalprogramme gibt es unter Linux, um auf die Konsole über die serielle Schnittstelle zu gehen? Wie lauten die üblichen Einstellungen?
- 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?
- Wie arbeitet man mit folgenden Programmen: ssh, scp, ftp (ncftp)?
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?
- Installieren Sie den Quelltext des Linux Kernels auf dem Hostrechner und kompilieren Sie ihn.
- Installieren Sie auf Ihrem Entwicklungsrechner eine Toolchain für die ARMv5 Architektur (ELDK oder Debian).
- Wie richtet man auf dem Host einen NFS Server ein?
- Wie richtet man auf dem Host einen TFTP Server ein?
9 Fragen zur Einführung
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:
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:
- Welche Anforderungen sprechen für Linux? (5 Stück)
- Wie "bezahlt" man die Vorteile von Linux?
- Aus welchen Einzelteilen besteht Embedded Linux? (6 Stück)
- Welche Fähigkeiten braucht man, um einen Rechner mit Embedded Linux auszustatten und zu programmieren?
- Welche Kosten sind zu erwarten?
- Welche Risiken gibt es?
- Was umfasst der Lebenszyklus des Produktes?
- Was erwartet Sie hinsichtlich der Lizenzen, wenn Sie Linux wählen?
Lesen Sie das Kapitel 1 im Buch von Hallinan ("Introduction").
Beantworten Sie folgende Fragen:
- Warum Linux? (6 Gründe)
- Was bedeutet "GPL"?
- Was ist "Open Source"?
- Was verstehen Sie unter "Linux Standard Base"?
Lesen sie Hallinan, Kap. 2, "The Big Picture"
URL:
Beantworten Sie folgende Fragen:
- Was zeichnet Embedded Systems aus?
- Vergleichen Sie BIOS und Bootloader.
- Aus welchen wesentlichen Funktionsblöcken bestehen Embedded Systems?
- Aus welcher Hardware besteht die Entwicklungsumgebung?
- Wie startet Embedded Linux? (von U-Boot bis init Prozess)
- Welche Arten von Flash Speicher gibt es?
- In welche Regionen ist der Flash Speicher bei Linux in der Regel aufgeteilt?
- Wie sieht grob die memory map des gesamten Rechners aus?
- Beschreiben Sie den Ausführungskontext mit Applikation, C Bibliothek, Kernel und Gerätetreibern. Was läuft im Kernel-Kontext, was im User-Kontext?
- Was macht die MMU und wo ist sie eingebaut?
- Wie nennt man die nicht-native Kompilierung auch?
- Was ist native Kompilierung? Ab welcher Rechenleistung macht sie Sinn?
Was ist eine Embedded Linux Distribution?
Aus wie vielen Paketen besteht eine Distribution ungefähr?
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:
- Welche anderen CPUs unterstützt Linux neben dem x86?
- Was ist ein monolithischer Kern?
- Warum lässt sich Linux einfach auf fast beliebige Prozessoren portieren?
- Wie unterscheiden sich die Befehlssätze der Prozessorfamilien?
- Damit die Linux Speicherverwaltung (virtual memory) funktioniert, muss der Mikrocontroller eine bestimmte Hardware-Komponente haben. Wie heisst diese?
- Wie heisst die Linux Variante, die ohne diese Hardware-Komponente auskommt?
- Was ist ein "System on Chip" (SoC)?
- Wie sieht die Schichtung der Software eines Embedded Linux Systems in etwa aus?
- Welches Dateisystem wird bei Flash Speicher häufig verwendet?
- Welche Sprachen werden zur Programmierung verwendet?
- Welche Bootloader werden bei Embedded Linux verwendet? Ist grub auch eine Option?
10 Fragen zu Schnittstellen
10.1 GPIO Pins
- In welchem Filesystem sind die GPIO Pins für den Zugriff aus dem Userspace organisiert?
- Welche Spannungswerte sind bei Ausgabepins üblich?
- Wie schaltet man einen GPIO Pin auf Ausgabe oder Eingabe?
- Welchen Strom liefert in etwa ein GPIO Pin nach draussen ("source")?
- Welchen Strom kann in etwa ein GPIO Pin nach innen leiten ("sink")?
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
- Was passiert, wenn Sie eine Eingangsspannung an einen Eingangspin legen, die höher als die maximale erlaubte ist?
- Wie gibt man ein Logiksignal auf einem Pin aus?
- Wie liest man den Logikpegel an einem Eingangspin?
- Wie kann man über einen Eingangspin einen Interrupt erzeugen?
- Wie schnell kann man einen Ausgangspin periodisch ein- und ausschalten?
- Welche Möglichkeiten gibt es, um einen GPIO Pin ohne die Verwendung des Sysfs anzusteuern?
10.2 Leuchtdioden (LEDs)
- In welchem Filesystem sind die LEDs für den Zugriff aus dem Userspace organisiert?
- Wie schaltet man eine LED ein und aus?
- Wie kann man die Helligkeit einer LED verändern? (Achtung: Das geht nicht immer).
- Wie kann man ein periodisches "Herzschlag-Blinken" erzeugen?
10.3 UART
- Nennen Sie die wesentlichen zwei Signale bei einem UART.
- Ist die Übertragung synchron oder asynchron?
- Welche Parameter der UART Kommunikation müssen bei der Übertragung bei beiden Partnern unbedingt zusammenpassen?
- In welchem Bereich liegt in etwa die Datenrate bei einem UART?
- Welche Datenrate wird bei der Gnublin Konsole verwendet?
- 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?
- Wie kann man eine UART Schnittstelle über einen freien USB Hostanschluss realisieren?
10.4 I2C Bus
- Nennen Sie die wesentlichen Signale beim I2C Bus.
- In welchem Bereich wurde der I2C Bus bei seiner Erfindung hauptsächlich eingesetzt?
- Ist die Übertragung synchron oder asynchron?
- Mit welchen Datenraten wird die I2C Kommunikation meist durchgeführt? Vergleichen Sie diese mit der üblichen Datenrate beim UART.
- Für welche Entfernungen ist der Bus entworfen worden?
- Wie werden die einzelnen I2C Geräte am Bus unterschieden?
- Wie viele Teilnehmer können maximal an einem I2C Bus angeschlossen werden?
- Ist I2C ein Single-Master Bus oder eine Multi-Master Bus?
Nennen Sie vier integierte Schaltungen mit I2C Bus:
- Port Expander
- A/D Wandler
- Schrittmotor-Ansteuerung
- EEPROM
- 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
- Nennen Sie die wesentlichen Signale bei der SPI Schnittstelle.
- Ist die Übertragung synchron oder asynchron?
- Welche digitale Grundschaltung macht das Prinzip der SPI Schnittstelle aus?
- Wie kann man mehrere Geräte an der SPI Schnittstelle betreiben?
- Mit welcher Datenrate werden SPI Schnittstellen üblicherweise betrieben?
Nennen Sie drei integrierte Schaltungen, die über SPI angeschlossen werden:
- CAN Controller
- Siebensegment-Controller
- Display
- Welches Massenspeicher-Medium hat meist auch eine SPI Schnittstelle eingebaut?
10.6 USB Schnittstelle
- Nennen Sie ein paar häufig genutzte USB Profile mit ihrer Bedeutung.
- Zählen Sie alle USB Schnittstellen auf Ihrem Embedded Linux Board auf. Beachten Sie die Rollen der USB Ports und ihre maximale Geschwindigkeit.
- Wie kann man eine freie USB Device Schnittstelle auf dem Embedded Linux Rechner nutzen, um eine Netzwerkverbindung mit dem Hostrechner aufzubauen?
- Kann man über eine USB Schnittstelle am Mikrocontroller Linux booten? Es wird dabei der U-Boot Bootloader verwendet.
- Sie brauchen zum Ansteuern von Peripherie einen freien UART, es gibt aber nur noch eine freie USB Schnittstelle an Ihrem Embedded Linux Board.
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:
- Die Stromversorgung
- Eine serielle Konsolenverbindung
- Ein Massenspeicherlaufwerk
11 Fragen zum Linux Kernel
- Schreiben Sie alle Punkte der Mindmap (Tafelbild 23.5.14) auf Ihr Lösungsblatt.
Navigation im Quelltext
- Mit welchem Werkzeug kann man den Kernel Quelltext weiterverarbeiten, so dass man ihn bequem im Web Browser betrachten kann?
- Nennen Sie eine Website, bei der man den Kernel bereits zum Betrachten vorbereitet hat.
- Wie kann man mit dem Tags Mechanismus im Kernel Quelltext navigieren?
- Wie funktioniert cscopes?
- Suchen Sie die Anzahl der C Quelltextdateien (Endungen .c und .h)
- Suchen Sie die Anzahl der Assemblerdateien (Endung .S).
- Was bedeutet "out-of-tree" Kompilierung?
- Welche Dateiendung haben Kernelmodule?
- Wie bekommt man den Quelltext einer Änderung oder eines Zusatzes für den Kernel in die "Mainline" Distribution?
Sie haben eine wichtige Änderung für den Linux Kernel gemacht. Welche Vor- und Nachteile haben folgende Strategien.
- Die Änderungen bleiben lokal in ihrer Entwicklerversion, z.B. weil ihnen das "Mainlining" zu aufwendig erscheint.
- Die Änderungen werden in die "Mainline" Version des Kernels aufgenommen.
Gnublin-spezifische Aufgaben
Kompilieren Sie den Gnublin Kernel. Eine Anleitung finden Sie im Wiki:
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.
- 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:
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.
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
- Wie kann man sich die Konsole des AVR32 Rechners auf den Entwicklungsrechner holen?
- Welche Programme sind in /bin, /usr/bin und /usr/sbin/?
- Was machen die Skript in /etc/init.d/?
- Wo ist der Quelltext des HTTP Daemon? Was steht in httpd.conf? Wie kann man das Datenverzeichnis des Webservers auf einen anderen Pfad legen?
- Welche Dienste laufen auf dem NGW100 im Hintergrund?
- Einige wichtige Einträge in /proc/ (procfs) ansehen.
- Finden Sie heraus, wie Sie mit den Kommandos telnet, ssh, scp, ncftp und http Kontakt mit dem NGW aufnehmen können.
- Gibt es auf dem NGW100 eine oder mehrere Logdateien?
- 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
Wie funktioniert die folgende Interrupt-Stoppuhr?
http://elk.informatik.fh-augsburg.de/pub/elinux/ngw100/ir-stoppuhr
x86 PC mit Linux
Die Live-CD von osadl.org mit Realtime-Kernel holen und ausprobieren.
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
Was ist die Grundidee hinter "Linux from Scratch"? Lesen Sie dazu den Wikipedia Eintrag:
13.2 Buildroot
Lesen Sie den folgenden kurzen Artikel über Buildroot:
http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/buildroot/lj-6-2011-buildroot.pdf
13.3 Debian/ARM
Wie funktionieren die Skripte von Ingmar Klein zum Bau des Debian für ARM? Lesen Sie dazu den Praktikumsbericht unter http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/Berichte/2012/1/
Den Quelltext bekommen Sie mit git:
git clone https://github.com/embeddedprojects/gnublin-distribution.git
14 Fragen zum Mikrocontroller
Im Buch von Hallinan, Kapitel 3 lesen ("Processor Basics").
Auch im Buch von Yaghmour, Kapitel 3 kann man etwas über Hardware zu erfahren.
Gnublin Schaltplan und Datenblatt des LPC3131
http://elk.informatik.fh-augsburg.de/pub/rtlabor/elinux/gnublin
Machen Sie mit den im Skript an der Stelle ../Gliederung/main.html#uc genannten Mikrocontrollern eine Tabelle, die über folgende Punkte Aufschluss gibt:
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
die Schulungsunterlagen für das LPI Linux Essentials Zertifikat
und das Debian Administrator's Handbook
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!):
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
- Gnublin Board an USB (Konsole) anstecken, booten und einloggen. Dazu muss auf dem Hostrechner ein Terminalemulator laufen, z.B. picocom oder kermit.
- 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.
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?
- Gewöhnen Sie sich an einen Editor auf dem Zielrechner. Es gibt z.B. vi oder jove.
- "Hello World" Programm in C/C++ auf Host crosskompilieren und auf Gnublin übertragen und ausführen.
- "Hello World" Programm in C/C++ auf Gnublin nativ kompilieren.
Machen Sie möglichst bald ein Backup der MicroSD Karte.
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.
- Beenden Sie die Sitzung wie bei UNIX üblich mit einem shutdown now.
MicroSD Karte
- Welche Partitionen sind auf der Karte?
- Sichern Sie den Inhalt der Karte auf Ihren Entwicklungsrechner.
- Beschreiben Sie mit dem grafischen "Gnublin Installer" die MicroSD Karte.
- 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
Wie läuft der Bootvorgang beim LPC3131 Controller ab?
Die Antwort finden Sie im Kapitel 6 des LPC3131 User Manual (ISROM/Boot ROM).
- Welche Dienste stellt der Apex Bootloader bereit?
- Welche Kommandos führt der Apex Bootloader auf dem Gnublin Board aus, um den Kernel zu laden und auszuführen?
- Wie lautet die von Apex verwendete Kernel Kommandozeile?
- Welche Dienste werden durch Init gestartet?
- Welche alternativen kleinen Init-Systeme kennen Sie?
- Wie kann man die Boot-Zeit verringern?
15.3 Ein-/Ausgabe
- Das sysfs erforschen mit cd und ls.
- LED auf dem Board blinken lassen mit Programmen in unterschiedlichen Sprachen.
- Taster anschliessen und einlesen über Polling.
- Taster anschliessen und über Interrupt einlesen.
- Hardware Erweiterung über I2C anschliessen.
15.4 Webserver
- Webserver (lighttpd) starten.
- "Hello World" HTML Datei ausliefern an lokalen Browser (lynx, w3m)
- CGI Anbindung testen. CGI Skript kann in den Sprachen C, C++, Bash, Lua, Python geschrieben werden.
15.5 Netzwerkverbindung mit Host
- 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.
Um mit dem Gnublin Board Dateien auszutauschen können folgende Techniken verwendet werden:
- scp auf dem Hostrechner.
Ein Verzeichnis des Hostrechners auf Gnublin per NFS mounten.
Ein Verzeichnis des Hostrechners auf Gnublin per SSHFS mounten.
15.6 Gnublin Distribution
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
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
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
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:
- Das Modul auf dem Hostrechner cross-kompilieren.
- 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.8 Uhrzeit auf Gnublin Board setzen
ntpdate, rdate
RTC (DS1307, MCP79410, RV-3029)
15.9 GPIO
- GPIO Ein-/Ausgaben über sysfs
- Interrupts mit "edge"
- Interrupt-Programme mit poll/epoll in C und Python
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.