wie komme ich zu einem embedded-linux-system? - · pdf fileteil i embedded-linux-system...

Download Wie komme ich zu einem Embedded-Linux-System? - · PDF fileTeil I Embedded-Linux-System Andreas Klinger 2/ 69 Embedded-Linux-System 1 Aufbau — Embedded-Linux 2 Toolchain 3 JTAG und

If you can't read please download the document

Upload: ngoque

Post on 06-Feb-2018

224 views

Category:

Documents


4 download

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