wie komme ich zu einem embedded-linux-system? - · pdf fileteil i embedded-linux-system...
TRANSCRIPT
Embedded-LinuxWie komme ich zu einem Embedded-Linux-System?
Andreas [email protected]
IT - Klingerhttp://www.it-klinger.de
Linux-Tag Berlin22.05.2013
Andreas Klinger 1 / 69
Teil I
Embedded-Linux-System
Andreas Klinger 2 / 69
Embedded-Linux-System
1 Aufbau Embedded-Linux
2 Toolchain
3 JTAG und OpenOCD
4 Linux-Kernel
5 Root-Filesystem
6 Dateisysteme
7 Ausblick
Andreas Klinger 3 / 69
Embedded-Linux-System
1 Aufbau Embedded-Linux
Andreas Klinger 4 / 69
Ist Embedded-Linux ein anderes Linux? I
Embedded- und Desktop-/Server-Linux haben gemeinsam:
Bootloader fr Initialisierungen und Ladevorgnge
Linux-Kernel, das eigentliche Betriebssystem
Root-Filesystem, eine Sammlung von Programmen und Tools
Dmonen als Hintergrund-Prozesse
Andreas Klinger 5 / 69
Ist Embedded-Linux ein anderes Linux? II
Unterschiede hinsichtlich:
Hardware-Architektur
Resourcen-Limitierungen (Rechenleistung, Speicher, Peripherie,...)
Verfgbarkeit, auch im autonomen Betrieb
Echtzeitanforderungen
System-Update im Feld
Reproduzierbarkeit des Komplettsystems
Massenspeicher (managed / unmanaged Flash)
Andreas Klinger 6 / 69
Ist Embedded-Linux ein anderes Linux? III
Deshalb:
Embedded-Linux ist ein kleines, auf definierte Aufgabenreduziertes Linux
Produkt wird verkauftBenutzer kennt eingesetztes Betriebssystem nicht kein User / Admin vorhanden
Die eine Distribution fr alle Embedded-Linux-Systeme nichtvorhanden
Andreas Klinger 7 / 69
Komponenten eines Embedded-Linux-Systems
Linux-Embedded-System
Bootloader Linux-Kernel
Root-Filesystem
Init-Proze
/sbin/init
Librarieslibc
/lib
DeviceNodes
/dev
Shell-ProgrammeDmonen
/bin/sbin
/usr/bin...
Konfiguration
/etc
Andreas Klinger 8 / 69
Embedded-Linux entwickeln Vorgehensweise
Entwicklungsschritte fr ein Board ohne Bootloader und Linux
1 Cross-Development-Toolchain (gcc, binutils, gdb, libc, ...)
2 Bootloader (aufspielen und debuggen mittels JTAG und OpenOCD)
3 laden von Linux-Kernel mit RAM-Disk durch Bootloader
4 schreibbares Root-Filesystem (UBI-FS, ext3, ...) anlegen undKernel flashen
Andreas Klinger 9 / 69
bungsboard Hardware
Beispiele im Vortrag beziehen sich auf nachfolgende HardwareZielsystem hnlich aber nicht identisch mit Sheevaplug
Board von Wiesemann & Theiss: ARM 926ejs, Marvell Kirkwood,Feroceon-CPU - Typ 88F6180
NAND-Flash 1 GB mit 128 k Erasesize und 2 k Pagesize, SamsungK9K8G08U0A
128 MB DDR2-RAM mit 64 Mib x 16 (MT47H64M16HR-3:E;D9HNZ)
Console auf UART-1 (ttyS1), MPP-Pins 13 u. 14, Typ NC16550
On-Chip-Debugging mit OpenOCD
JTAG-Adapter: ARM-USB-TINY-H, FTDI-2232-Chip
Andreas Klinger 10 / 69
bungsboard Flash-Layout
Start Gre Verwendung
0x00000000 0x000E0000u-boot (896k)Bootloader
0x000E0000 0x00020000u-boot-env (128k)Umgebungsvariablen vomBootloader
0x00100000 0x02000000kernel (32M)Linux-Kernel
0x02100000 0x08000000rootfs (128M)Root-Filesystem
0x0A100000 0x35F00000data (951M)Anwendungsdaten
Andreas Klinger 11 / 69
Embedded-Linux-System
2 Toolchain
Andreas Klinger 12 / 69
Cross-Development-Toolchain
Entwicklungswerkzeuge auf dem Host-System erstellenBootloader, Kernel und Root-Filesystem des Target
produzieren und verarbeiten Instruktionen des Ziel-Systems
Cross-Development-Toolchain
Open-Source-Tools fr die Generierung der Toolchain
die Erstellung einer Toolchain From-The-Scratch kannerheblichen Aufwand bedeuten
auf passende Version hinsichtlich Kernel und Target achten
Andreas Klinger 13 / 69
Buildroot Toolchain und Root-FS
Entwicklungsrechner buildroothttp://www.buildroot.org Version 2013.02
cd /home/linux/inst
tar -xzf buildroot-2013.02.tar.gzcd buildroot-2013.02make sheevaplug_defconfig
make menuconfig
make
Cross-Development-Toolchain (/usr/arm-linux) Root-Filesystem (output/images/rootfs.ext2)
Andreas Klinger 14 / 69
Cross-Development-Toolchain verwenden I
Installationspfad der Toolchain einstellenBuild options Host dir /usr/arm-linux
Toolchain dort verwenden, wo sie erstellt wurde (absoluter Pfad) auf anderem Rechner im identischen Pfad verwendbar ansonsten: Sysroot setzen
Andreas Klinger 15 / 69
Cross-Development-Toolchain verwenden II
Source-Datei armenv.sh erstellenexport PATH=/usr/arm-linux/usr/bin:$PATHexport ARCH=armexport CROSS_COMPILE=arm-linux-
Umgebungsvariablen sourcensource armenv.sh oder. armenv.sh
Bootloader, Kernel, Anwendungen, ... damit kompilieren
Beispiel fr eigenes Makefileall:
${CROSS_COMPILE}gcc appl.c -o appl
Andreas Klinger 16 / 69
Embedded-Linux-System
3 JTAG und OpenOCD
Andreas Klinger 17 / 69
JTAG-Schnittstelle
JTAG (Joint Test Action Group)
ursprnglich zum Testen und Debuggen integrierter Schaltungenentwickelt (In-Circuit)
bei vielen Boards als Hardware-Debugging undFlash-Programmier-Schnittstelle nutzbar
Bsp: Aufspielen und Debuggen des Bootloaders
Vorrausetzung: JTAG-Adapter zwischen Embedded-Board undEntwicklungsrechner sowie untersttzende Software zumProgrammieren, Debuggen, ...
neben kommerziellen Produkten auchOpen-Source-Entwicklungen verfgbar
Andreas Klinger 18 / 69
OpenOCD
OpenOCD (Open On-Chip Debugger) wurde im Rahmen einerDiplomarbeit an der FH Augsburg entwickelt
OpenOCD-Dmon kommuniziert mit JTAG-Adapter und liefert
Schnittstelle fr Terminal-Verbindung (Port 4444)
Schnittstelle fr gdb-Debugger (Port 3333)
Konfigurationsskripte:
JTAG-Adapter
CPU-Kern
Board
Vorraussetzung: JTAG-Verbindung zum Embedded-Board
Andreas Klinger 19 / 69
JTAG-Verbindung OpenOCD
Entwicklungsrechner
Target
telnet localhost 4444
wut_initload_image u-bootresume 0x600000...
4444
OpenOCD OlimexFT 2232
USB JTAG
RAM
CPU
Flash
Andreas Klinger 20 / 69
OpenOCD installieren I
libftdi installierenDownload von libftdi:http://www.intra2net.com/en/developer/libftdi/download.php
cd /home/linux/inst
tar -xzf libftdi-0.20.tar.gzcd libftdi-0.20
./configure prefix=/usr
makemake install
Andreas Klinger 21 / 69
OpenOCD installieren II
OpenOCD installierencd /home/linux/inst
git clone git://openocd.git.sourceforge.net/ \gitroot/openocd/openocd
cd openocd./bootstrap./configure enable-maintainer-mode \enable-ft2232_libftdi prefix=/usr
makemake install(installiert unter /usr/share/openocd/)
Andreas Klinger 22 / 69
OpenOCD installieren III
OpenOCD verwendencd /home/linux/inst
cp /usr/share/openocd/scripts/ \board/sheevaplug.cfg ./openocd.cfg
openocd
Default-Skript openocd.cfg anpassen:Interface richtig einstellen (find interface/...)JTAG-Geschwindigkeit (jtag_khz 2000)Prozedur wut_init() erstellen mit CPU-Register-Einstellungen(abgeleitet von sheevaplug_init())
Andreas Klinger 23 / 69
Debuggen mit JTAG-Verbindung OpenOCD
Entwicklungsrechner
Target
telnet localhost 4444wut_initload_image u-boot
step 0x6000004444
arm-linux-gdb u-boottarget remote lo.:3333break start_armboot
continue
3333
OpenOCD OlimexFT 2232
USB JTAG
RAM
CPU
Flash
Andreas Klinger 24 / 69
Embedded-Linux-System
4 Linux-Kernel
Andreas Klinger 25 / 69
Booten des Linux-Kernels
ffnet Konsole
entpackt sich selber (optional)
initialisiert zentrale Einheiten, den Kern des Kernels:Memory-Management, Scheduling, Interprozess-Kommunikation
initialisiert Gerte- und Dateisystemtreiber
mountet das Root-Filesystem
startet den init-Dmon /sbin/init
Andreas Klinger 26 / 69
Bootvorgang eines Embedded-Linux mit RAM-Disk
1aaa
KonfigurationDaten
(UBI-FS)
rimage.gzRoot-FS
bzImage
Linux-Kernel
Bootloader
Flash2AAAAA
/bin/dev/etc/lib/proc/sbin
init...3
RAM-Disk
bzImage
RAM
!!
kopieren
!!
entpacken
symbolischeLinks
Andreas Klinger 27 / 69
Kernel konfigurieren und erstellen
Entwicklungsrechner Kernel erstellenhttp://ftp.kernel.org linux-3.6.1-rt1
Kernel entpacken, RT-Patch einspielen
source armenv.sh
make kirkwood_defconfigmake menuconfig
make Kernel-Image
Andreas Klinger 28 / 69
U-Boot-Image generieren
rootfs.ext2zImage
Linux-Kernel
mkimage
rootfs.ext2zImage
Linux-Kernel
wut.img
Andreas Klinger 29 / 69
Bootloader-Verbindung
Entwicklungsrechner
Targetminicom -stftp wut.imgbootm 800000
tftpd (Daemon)/tftpboot
wut.imgEthernet
u-boot
RS-232
RAM
zImage
RAM-Disk
Flash
u-boot
Andreas Klinger 30 / 69
Linux-Target mit RAM-Disk
Target
Entwicklungsrechner
ssh [email protected] -lhvi /etc/inittabcat /proc/mtd
scp [email protected]:/etc/shadow .
Ethernet
Linux
sshd
Flash
u-boot
zImage
Root-FS
Andreas Klinger 31 / 69
Embedded-Linux-System
5 Root-FilesystemAufbau vom Root-FSbuildrootRoot-FS flashen
Andreas Klinger 32 / 69
init-Dmon /sbin/init
Konfigurationsdatei: /etc/inittab
nimmt Sy