Embedded GNU/Linux Basics



Ähnliche Dokumente
The linux container engine. Peter Daum

Albert Dengg. Graz,

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Speaker. Dominik Helleberg. Mobile Development Android / Embedded Tools.

Embedded GNU/Linux mit Gnublin

Konfiguration Zentyal 3.3 Inhaltsverzeichnis

Docker. Lass mal containern Julian mino GPN

Entwicklungsumgebungen. Packer, Vagrant, Puppet. Alexander Pacnik Mannheim,

Installation der SAS Foundation Software auf Windows

Freier Linux Kernel für den Virtex4 FX12

Firewall Implementierung unter Mac OS X

Hybride Apps DPR und Android auf dem Xilinx ZYNQ. Endric Schubert, Missing Link Electronics Fabian Zentner, Univ. Ulm

Embedded Linux gnublin Board Programmieren Sonstiges. Embedded Linux am Beispiel des Gnublin-Boards

WINDOWS 8 WINDOWS SERVER 2012

GNUBLIN, die offene EmbeddedPlattform für die Ausbildung

Brownbag Session Grundlagen Virtualisierung Von VM s und Containern

WRT als Plattform für anderes

Update Information. Independence Pro Software Suite 3.0 & Sound Libraries

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Virtual Desktop Infrasstructure - VDI

Debian <

Switching. Übung 7 Spanning Tree. 7.1 Szenario

Open Source - Was ist das eigentlich?

Die Projek*ools. Files, Git, Tickets & Time

snom Auto-Provisioning

MEYTON CGI Display Controller

Business Application Framework für SharePoint Der Kern aller PSC-Lösungen

HowTo: Einrichtung & Management von APs mittels des DWC-1000

GNUBLIN - Embedded Linux für Alle

Wo finde ich die Software? - Jedem ProLiant Server liegt eine Management CD bei. - Über die Internetseite

Agenda. Ziel Problematik OS-Installation Softwareverteilung Inventarisierung Stufenplan

Installations-Dokumentation, YALG Team

Debian Installationstools

Dateisystem 1, Suchpfad, Befehlstypen

Dateisystem 1, Suchpfad, Befehlstypen

Konfiguration von Igel ThinClients fu r den Zugriff via Netscaler Gateway auf eine Storefront/ XenDesktop 7 Umgebung

Wine - Windows unter Linux

MailUtilities: Remote Deployment - Einführung

MOBILE ON POWER MACHEN SIE IHRE ANWENDUNGEN MOBIL?!

DynDNS für Strato Domains im Eigenbau

SJ OFFICE - Update 3.0

Verfügbarkeit von Applikationen und Failover Szenarien. Winfried Wojtenek.

ESP8266 unter Linux. Doku-Repo:

Dienste und Runlevel. September 2010 Oliver Werner Linux Systemmanagement 1

Guide DynDNS und Portforwarding

Wireless LAN Installation Windows XP

ATB Ausbildung Technische Berufe Ausbildungszentrum Klybeck

OS IDE Webserver Integration des Webservers in die IDE Wireshark Webserver II Dynamisches Webprojekt in Eclipse

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Installation von NetBeans inkl. Glassfish Anwendungs-Server

SolarWinds Engineer s Toolset

Embedded Linux. Embedded Linux. Daniel Buchheim Seminar "Eingebettete drahtlose Systeme"

Open Source als de-facto Standard bei Swisscom Cloud Services

Übung: Netzwerkmanagement mit SNMP

Multimedia und Datenkommunikation

ISA Einrichtung einer DFUE VErbindung - von Marc Grote

Referenz-Konfiguration für IP Office Server. IP Office 8.1

Patch Management mit

Gforth EC auf dem NXT Brick

LINUX Schulung. FrauenComputerZentrum Berlin. Jutta Horstmann, Mai 2006

Embedded Linux, OpenWRT

Lernprogramm "Veröffentlichen von WMS- Services"

UEFI Secure Boot und alternative Betriebssysteme

Verteilte Versionskontrolle mit GIT Dortmund Ansgar Brauner - GreenPocket GmbH - Köln

Softwareupdate-Anleitung // AC Porty L Netzteileinschub

Hilfe bei Adobe Reader. Internet Explorer 8 und 9

NbI-HS. NbIServ Bethenhausen Bethenhausen

Mount zu Windows Share Backup automatisieren

Linux-VServer. Sebastian Harl 19. Mai 2006

Konfigurationsbeispiel ZyWALL USG

Tips, Tricks und HOWTOs Virtualisierung für Profis und Einsteiger Serverkonsolidierung, Testumgebung, mobile Demo

Tutorial. Tutorial. Microsoft Office 2010 Standard Edition verteilen DeskCenter Solutions AG

KNX BAOS Gadget. Installations- und Bedienanleitung. WEINZIERL ENGINEERING GmbH. DE Burgkirchen Web:

OpenBeacon Proximity - 2.4GHz RFID - 4. Wildauer Symposium RFID und Medien

VNUML Projektpraktikum

Open Source in der Unternehmenspraxis

Anleitung # 4 Wie mache ich ein Update der QBoxHD Deutsche Version

embedded projects GmbH

Bewusster Umgang mit Smartphones

IntelliRestore Seedload und Notfallwiederherstellung

LCM-6 Digital Signage Software

Duonix Service Software Bedienungsanleitung. Bitte beachten Sie folgende Hinweise vor der Inbetriebnahmen der Service Software.

Hex Datei mit Atmel Studio 6 erstellen

GGAweb - WLAN Router Installationsanleitung Zyxel NBG 6616

Dokumentation owncloud PH Wien

eclips Handheld Remote Control Software Updater

Debian Packaging. Sebastian Reichel

Betriebssystemsicherheit am Beispiel UNIX

Es können nur Werte ausgelesen werden, Es kann -NICHT- geschaltet werden!!

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Testplan. Hochschule Luzern Technik & Architektur. Software Komponenten FS13. Gruppe 03 Horw,

Fernsteuerung über Multi-Web-Browser (IE / Chrome / Safari / Firefox, etc.) Einfache P2P Überwachung via Smartphone-App (Android / IOS)

Windows 8 Lizenzierung in Szenarien

Loslegen mit Contrexx: In 10 Schritten zur professionellen Webseite.

SolarWinds Engineer s Toolset

Transkript:

Embedded GNU/Linux Basics Urs Fässler 17. LinuxDay Dornbirn 21.11.2015 Urs Fässler Embedded GNU/Linux Basics 1

Intro Eigenschaften Embedded System Intro Urs Fässler Embedded GNU/Linux Basics 2

Intro Eigenschaften Embedded System Intro Kosten Grösse Ressourcen Energie Zuverlässigkeit Sicherheit Langlebigkeit Echtzeit Urs Fässler Embedded GNU/Linux Basics 2

Intro Echtzeit Intro Verarbeitung Ereigniss Deadline Urs Fässler Embedded GNU/Linux Basics 3

Intro Definition Embedded System Intro Der Ausdruck embedded system bezeichnet einen Computer, der in einem technischen Kontext eingebettet ist. Nach Wikipedia Urs Fässler Embedded GNU/Linux Basics 4

Intro Typisches GNU/Linux Embedded System Intro Urs Fässler Embedded GNU/Linux Basics 5

Intro Aufgabe Intro Urs Fässler Embedded GNU/Linux Basics 6

Intro Aufgabe Intro Webserver für Most Useless Machine Ever! Switch property value switchon on count 14 Servo property value unit open position 0.8 ms close position 2.2 ms Read Write Urs Fässler Embedded GNU/Linux Basics 6

Intro Vorgehen Intro 1 Hardware 2 OS 3 Image 4 SDK 5 Applikation 6 Deployment Urs Fässler Embedded GNU/Linux Basics 7

Hardware System Hardware Bare Metal uc GNU/Linux SOC Urs Fässler Embedded GNU/Linux Basics 8

Hardware Board Hardware Urs Fässler Embedded GNU/Linux Basics 9

OS GNU/Linux Distribution OS off-the-shelf (Debian, OpenWRT,...) Yocto Urs Fässler Embedded GNU/Linux Basics 10

OS GNU/Linux Distribution OS off-the-shelf (Debian, OpenWRT,...) weite Verbreitung; bekannt Updates werden von anderen bereitgestellt erlaubt Lizenz Verteilung? Yocto Urs Fässler Embedded GNU/Linux Basics 10

OS GNU/Linux Distribution OS off-the-shelf (Debian, OpenWRT,...) weite Verbreitung; bekannt Updates werden von anderen bereitgestellt erlaubt Lizenz Verteilung? Yocto git repository mit Konfiguration des gesamten System Patchen einzelner Pakete Optimierungen auf spezifische Hardware volle Kontrolle Urs Fässler Embedded GNU/Linux Basics 10

OS Yocto Image OS mume-dev-image.bb 1 LICENSE = "MIT" 2 3 inherit core-image 4 inherit populate_sdk_qt5 5 6 IMAGE INSTALL = " \ 7 packagegroup-core-boot \ 8...-core-ssh-openssh \ 9 packagegroup- mume- common \ 10 packagegroup-dev-mume \ 11 " 12 13 IMAGE FEATURES += " \ 14 package- management \ 15 debug-tweaks \ 16 " Urs Fässler Embedded GNU/Linux Basics 11

OS Yocto Image OS mume-dev-image.bb 1 LICENSE = "MIT" 2 3 inherit core-image 4 inherit populate_sdk_qt5 5 6 IMAGE INSTALL = " \ 7 packagegroup-core-boot \ 8...-core-ssh-openssh \ 9 packagegroup- mume- common \ 10 packagegroup-dev-mume \ 11 " 12 13 IMAGE FEATURES += " \ 14 package- management \ 15 debug-tweaks \ 16 " packagegroup-dev-mume.bb SUMMARY = " developer tools for MUME" LICENSE = "MIT" inherit packagegroup RDEPENDS_${PN} = "\ bash \ devmem2 \ htop \ nginx \ openssh-sftp \ perf \ qtbase \ time \... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Urs Fässler Embedded GNU/Linux Basics 11

OS Yocto Image bauen OS 1 $ bitbake mume-dev-image Urs Fässler Embedded GNU/Linux Basics 12

OS Yocto Image bauen OS 1 $ bitbake mume-dev-image Table: tmp/deploy/images/beaglebone/ MLO stage 1 loader u-boot.img stage 2 loader uenv.txt u-boot Konfiguration zimage Kernel zimage-bonegreen-mume.dtb Device Tree mume-dev-image-beaglebone.tar.bz2 rootfs Urs Fässler Embedded GNU/Linux Basics 12

Image rootfs Image / bin boot etc home lib mnt opt root tmp usr var... Urs Fässler Embedded GNU/Linux Basics 13

Image Device Tree Image / { compatible = "ti,am33xx"; spi0: spi@48030000 { compatible = "ti,omap4-mcspi"; status = "disabled"; reg = <0x48030000 0x400>; interrupts = <65 >; dmas = <&edma 16 &edma 17>;... };... Urs Fässler Embedded GNU/Linux Basics 14

Image Boot Process Image Urs Fässler Embedded GNU/Linux Basics 15

Image Boot Process Image ROM Code Urs Fässler Embedded GNU/Linux Basics 15

Image Boot Process Image MLO ROM Code Urs Fässler Embedded GNU/Linux Basics 15

Image Boot Process Image u-boot MLO ROM Code Urs Fässler Embedded GNU/Linux Basics 15

Image Boot Process Image Linux u-boot MLO ROM Code Urs Fässler Embedded GNU/Linux Basics 15

Image Boot Process Image systemd Linux u-boot MLO ROM Code Urs Fässler Embedded GNU/Linux Basics 15

Image Boot Process Image Applikation systemd Linux u-boot MLO ROM Code Urs Fässler Embedded GNU/Linux Basics 15

SDK SDK bauen SDK Urs Fässler Embedded GNU/Linux Basics 16

SDK SDK bauen SDK 1 $ bitbake mume-dev-image -c populate_sdk 2 $ ls -sh tmp/deploy/sdk/ 3 695M mume-glibc-x86_64-mume-dev-imagecortexa8hf-vfp-neon-toolchain-2.0.sh Urs Fässler Embedded GNU/Linux Basics 16

SDK SDK bauen SDK 1 $ bitbake mume-dev-image -c populate_sdk 2 $ ls -sh tmp/deploy/sdk/ 3 695M mume-glibc-x86_64-mume-dev-imagecortexa8hf-vfp-neon-toolchain-2.0.sh Entwicklerpakete (Header,...) Cross-Compiler rootfs (Libraries,...) Paketmanager Urs Fässler Embedded GNU/Linux Basics 16

Applikation Übersicht Applikation Hardware Urs Fässler Embedded GNU/Linux Basics 17

Applikation Übersicht Applikation Web-GUI Hardware Urs Fässler Embedded GNU/Linux Basics 17

Applikation Übersicht Applikation Web-GUI Browser Hardware Urs Fässler Embedded GNU/Linux Basics 17

Applikation Übersicht Applikation Web-GUI Browser nginx Hardware Urs Fässler Embedded GNU/Linux Basics 17

Applikation Übersicht Applikation Web-GUI Browser nginx mumeweb Hardware Urs Fässler Embedded GNU/Linux Basics 17

Applikation Übersicht Applikation Web-GUI Browser nginx mumeweb mumesrv Hardware Urs Fässler Embedded GNU/Linux Basics 17

Applikation Übersicht Applikation Web-GUI Browser nginx mumeweb mumesrv Treiber Hardware Urs Fässler Embedded GNU/Linux Basics 17

Applikation Übersicht Applikation Web-GUI Browser nginx mumeweb mumesrv Treiber Hardware systemd ssh Qt opkg BusyBox Linux Urs Fässler Embedded GNU/Linux Basics 17

Applikation Übersicht Applikation Web-GUI Browser nginx mumeweb mumesrv Treiber Hardware Linux...... systemd ssh... opkg...... Qt BusyBox Urs Fässler Embedded GNU/Linux Basics 17

Applikation Hardware Applikation Urs Fässler Embedded GNU/Linux Basics 18

Applikation Hardware Applikation 1ms 2ms Urs Fässler Embedded GNU/Linux Basics 18

Applikation mume Device Tree Applikation mume { compatible = "urs,mume"; status = "okay"; gpio = <& gpio1 28 GPIO_ACTIVE_LOW >; pwms = <&ehrpwm1 0 10000000 0>; pinctrl-names = "default"; pinctrl-0 = <&mume_pins>; }; mume_pins: mume_pins { pinctrl-single,pins = < 0 x78 ( MUX_MODE7 PIN_INPUT_PULLUP) 0x48 (MUX_MODE6 PIN_OUTPUT) >; }; Urs Fässler Embedded GNU/Linux Basics 19

Applikation Hardware ansteuern Applikation Userspace Treiber Hardware Urs Fässler Embedded GNU/Linux Basics 20

Applikation Hardware ansteuern Applikation Userspace platform_driver sysfs interrupt Treiber Hardware mume +mode +switch_count +servo_open_pos_ns +servo_close_pos_ns +switch() const +count_wait() const +modes() const +switch_isr() gpio pwm wait_queue Urs Fässler Embedded GNU/Linux Basics 20

Applikation Hardware ansteuern Applikation Userspace platform_driver sysfs interrupt GPIO, PWM Treiber Hardware mume +mode +switch_count +servo_open_pos_ns +servo_close_pos_ns +switch() const +count_wait() const +modes() const +switch_isr() gpio pwm wait_queue Urs Fässler Embedded GNU/Linux Basics 20

Applikation Hardware ansteuern Applikation Userspace platform_driver sysfs interrupt sysfs GPIO, PWM Treiber Hardware mume +mode +switch_count +servo_open_pos_ns +servo_close_pos_ns +switch() const +count_wait() const +modes() const +switch_isr() gpio pwm wait_queue Urs Fässler Embedded GNU/Linux Basics 20

Applikation vom Treiber zum Webserver Applikation nginx Treiber Urs Fässler Embedded GNU/Linux Basics 21

Applikation vom Treiber zum Webserver Applikation nginx sysfs mumesrv Treiber Urs Fässler Embedded GNU/Linux Basics 21

Applikation vom Treiber zum Webserver Applikation FastCGI sysfs nginx mumeweb mumesrv Treiber Urs Fässler Embedded GNU/Linux Basics 21

Applikation vom Treiber zum Webserver Applikation FastCGI D-Bus sysfs nginx mumeweb mumesrv Treiber Urs Fässler Embedded GNU/Linux Basics 21

Deployment Starten der Services Deployment 1 [Unit] systemd / unit file 2 Description=Mume D-Bus Service 3 After=dbus.target 4 Wants=dbus.target 5 6 [Service] 7 ExecStart=/usr/bin/mumesrv /sys/.../mume/ 8 9 [Install] 10 WantedBy=multi-user.target Urs Fässler Embedded GNU/Linux Basics 22

Deployment mumesrv Rezept Deployment 1 SECTION = "app" 2 DESCRIPTION = "MUME D-Bus interface to hardware" 3 LICENSE = "GPLv3+" 4 LIC FILES CHKSUM = "file://copying;md5=9 eef91148a9b14ec7f9df333daebc746" 5 6 inherit qmake5 7 8 DEPENDS += "qtbase" 9 RDEPENDS_${PN} += "qtbase dbus" 10 11 SRCREV = " 3 cbe61c102d9574ccd039b112704f0a42a2112f8" 12 13 SRC URI = " \ 14 git://github.com/ursfassler/mumesrv.git;protocol= https;branch=master \ 15 file://dbus.conf \ 16 " 17 18 S = "${WORKDIR}/git" 19 QMAKE PROFILES = "${S}/application/application.pro" 20... Urs Fässler Embedded GNU/Linux Basics 23

Deployment Produktiv Image Deployment 1 LICENSE = "MIT" 2 3 inherit core-image 4 mume-image.bb 5 IMAGE INSTALL = " \ 6 packagegroup-core-boot \ 7 packagegroup-core-ssh-openssh \ 8 packagegroup- mume- common \ 9 \ 10 mumesrv- start \ 11 mumeweb- start \ 12 mumehtml \ 13 " 14 15 IMAGE FEATURES += " \ 16 package- management \ 17 " Urs Fässler Embedded GNU/Linux Basics 24

Deployment Produktiv Image Deployment 1 LICENSE = "MIT" 2 3 inherit core-image 4 mume-image.bb 5 IMAGE INSTALL = " \ 6 packagegroup-core-boot \ 7 packagegroup-core-ssh-openssh \ 8 packagegroup- mume- common \ 9 \ 10 mumesrv- start \ 11 mumeweb- start \ 12 mumehtml \ 13 " 14 15 IMAGE FEATURES += " \ 16 package- management \ 17 " 1 $ bitbake mume-image Urs Fässler Embedded GNU/Linux Basics 24

Outro Danke Outro Slides auf http://www.bitzgi.ch/presentations Projekt auf https://github.com/ursfassler /mumesrv Source von mumesrv /mumeweb Source von mumeweb /meta-mume Yocto Layer für Projekt, beinhaltet Linux Treiber als Patch /embedded-gnu-linux-basics Sourcen des Vortrags Urs Fässler Urs Fässler Embedded GNU/Linux Basics 25

Outro Danke Outro Slides auf http://www.bitzgi.ch/presentations Projekt auf https://github.com/ursfassler /mumesrv Source von mumesrv /mumeweb Source von mumeweb /meta-mume Yocto Layer für Projekt, beinhaltet Linux Treiber als Patch /embedded-gnu-linux-basics Sourcen des Vortrags Urs Fässler Urs Fässler Embedded GNU/Linux Basics 25

Embedded GNU/Linux Basics Urs Fässler 17. LinuxDay Dornbirn 21.11.2015 Urs Fässler Embedded GNU/Linux Basics 1

Intro Eigenschaften Embedded System[8] Intro Kosten Grösse Ressourcen Energie Zuverlässigkeit Sicherheit Langlebigkeit Echtzeit Urs Fässler Embedded GNU/Linux Basics 2

Intro Echtzeit Intro Verarbeitung Ereigniss Deadline Bearbeitung ist nach einer bestimmten Zeit nach dem auftreten eines Ereignisses abgeschlossen. bei weicher Echtzeit ist dieses Verhalten wünschenswert (Video Wiedergabe) Echtzeit ist oft nicht nötig Linux ist nicht Echtzeit-Fähig Lösung ist separater uc, im SOC oder dediziertem Chip Urs Fässler Embedded GNU/Linux Basics 3

Intro Definition Embedded System Intro Der Ausdruck embedded system bezeichnet einen Computer, der in einem technischen Kontext eingebettet ist. [15] Nach Wikipedia Urs Fässler Embedded GNU/Linux Basics 4

Intro Typisches GNU/Linux Embedded System Intro [5] [2] Urs Fässler Embedded GNU/Linux Basics 5

Intro Aufgabe Intro Webserver für Most Useless Machine Ever! Switch property value switchon on count 14 Servo property value unit open position 0.8 ms close position 2.2 ms [10] Read Write Urs Fässler Embedded GNU/Linux Basics 6

Intro Vorgehen Intro 1 Hardware 2 OS 3 Image 4 SDK 5 Applikation 6 Deployment Urs Fässler Embedded GNU/Linux Basics 7

Hardware System Hardware Bare Metal uc GNU/Linux SOC Echtzeit niedrige System-Komplexität keine Infrastruktur [5] Memory und Prozess Management Treiber & Protokolle hohe System-Komplexität Urs Fässler Embedded GNU/Linux Basics 8

Hardware Board Hardware [7] [4] [2] Industrie-Boards Consumer Hardware (Router, Media-Center,...) Eval-/Bastelboards (Raspi, BeagleBone) BeagleBone Green Netzwerk Yocto Supported viele Anshlüsse USB Powered Urs Fässler Embedded GNU/Linux Basics 9

OS GNU/Linux Distribution OS off-the-shelf (Debian, OpenWRT,...) weite Verbreitung; bekannt Updates werden von anderen bereitgestellt erlaubt Lizenz Verteilung? Yocto[3] 1 git repository mit Konfiguration des gesamten System Patchen einzelner Pakete Optimierungen auf spezifische Hardware volle Kontrolle 1 Tools und Rezepte um eigene GNU/Linux Distribution zu bauen Urs Fässler Embedded GNU/Linux Basics 10

OS Yocto Image OS mume-dev-image.bb 1 LICENSE = "MIT" 2 3 inherit core-image 4 inherit populate_sdk_qt5 5 6 IMAGE INSTALL = " \ 7 packagegroup-core-boot \ 8...-core-ssh-openssh \ 9 packagegroup- mume- common \ 10 packagegroup-dev-mume \ 11 " 12 13 IMAGE FEATURES += " \ 14 package- management \ 15 debug-tweaks \ 16 " packagegroup-dev-mume.bb SUMMARY = " developer tools for MUME" LICENSE = "MIT" inherit packagegroup RDEPENDS_${PN} = "\ bash \ devmem2 \ htop \ nginx \ openssh-sftp \ perf \ qtbase \ time \... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Urs Fässler Embedded GNU/Linux Basics 11

OS Yocto Image bauen OS 1 $ bitbake mume-dev-image Table: tmp/deploy/images/beaglebone/ MLO stage 1 loader u-boot.img stage 2 loader uenv.txt u-boot Konfiguration zimage Kernel zimage-bonegreen-mume.dtb Device Tree mume-dev-image-beaglebone.tar.bz2 rootfs Urs Fässler Embedded GNU/Linux Basics 12

Image rootfs Image / bin boot etc home lib mnt opt root tmp usr var... userspace ev. Kernel & Device Tree nicht bootloader Urs Fässler Embedded GNU/Linux Basics 13

Image Device Tree Image / { compatible = "ti,am33xx"; spi0: spi@48030000 { compatible = "ti,omap4-mcspi" 2 ; status = "disabled" 3 ; reg = <0x48030000 0x400> 4 ; interrupts = <65 >; dmas = <&edma 5 16 &edma 17>;... };... 2 Mapping zu Treiber 3 aktivieren durch status= okay 4 Register-Position, siehe Datenblatt des SOC 5 Referenz zum DMA Device-Tree Knoten Urs Fässler Embedded GNU/Linux Basics 14

2015-11-20 Embedded GNU/Linux Basics14[width=8cm] Image Device Tree Device Tree / { compatible = "ti,am33xx"; spi0: spi@48030000 { compatible = "ti,omap4-mcspi" 2 ; status = "disabled" 3 ; reg = <0x48030000 0x400> 4 ; interrupts = <65>; dmas = <&edma 5 16 &edma 17>;... };... 2 Mapping zu Treiber 3 aktivieren durch status= okay Image 4 Register-Position, siehe Datenblatt des SOC 5 Referenz zum DMA Device-Tree Knoten Linux kennt Hardware nicht Device Tree beschreibt Hardware Linux lädt Treiber anhand Device Tree

Image Boot Process[9] Image Applikation systemd Linux u-boot MLO ROM Code Urs Fässler Embedded GNU/Linux Basics 15

2015-11-20 Embedded GNU/Linux Basics15[width=8cm] Image Boot Process[9] Boot Process[9] Applikation systemd Linux u-boot MLO ROM Code Image Typ Name Funktion System startup ROM Code minimale Hardware Initialisierung in Boot-Devices nach Stage 1 Loader suchen Stage 1 Loader ins RAM laden und ausführen Stage 1 Loader MLO Pin Muxing x-loader Clock und Memory initialisieren (u-boot) Stage 2 Loader ins RAM laden und ausführen Stage 2 Loader u-boot.img Plattform Initialisierung (USB, Netzwerk,...) Boot-Menü / Kommandozeile anzeigen Kernel und Device-Tree ins RAM laden und ausführen Kernel zimage Treiber für Hardware laden Linux rootfs mounten Init-Process starten Init Systemd Abhängigkeiten zwischen Services auflösen Services starten Services überwachen

SDK SDK bauen SDK 1 $ bitbake mume-dev-image -c populate_sdk 2 $ ls -sh tmp/deploy/sdk/ 3 695M mume-glibc-x86_64-mume-dev-imagecortexa8hf-vfp-neon-toolchain-2.0.sh Entwicklerpakete (Header,...) Cross-Compiler rootfs (Libraries,...) Paketmanager Urs Fässler Embedded GNU/Linux Basics 16

Applikation Übersicht Applikation Web-GUI Browser nginx mumeweb mumesrv Treiber Hardware Linux...... systemd ssh... opkg...... Qt BusyBox Urs Fässler Embedded GNU/Linux Basics 17

Applikation Hardware Applikation 1ms 2ms Urs Fässler Embedded GNU/Linux Basics 18

Applikation mume Device Tree Applikation mume { compatible = "urs,mume"; status = "okay"; gpio = <& gpio1 28 GPIO_ACTIVE_LOW >; pwms = <&ehrpwm1 0 10000000 0>; pinctrl-names = "default"; pinctrl-0 = <&mume_pins>; }; mume_pins: mume_pins { pinctrl-single,pins = < 0 x78 ( MUX_MODE7 PIN_INPUT_PULLUP) 0x48 (MUX_MODE6 PIN_OUTPUT) >; }; Urs Fässler Embedded GNU/Linux Basics 19

Applikation Hardware ansteuern Applikation Userspace platform_driver sysfs interrupt sysfs GPIO, PWM Treiber Hardware mume +mode +switch_count +servo_open_pos_ns +servo_close_pos_ns +switch() const +count_wait() const +modes() const +switch_isr() gpio pwm wait_queue wie können wir die Hardware ansteuern? Linux Treiber, Frameworks, Infrastructure: Framework für Treiber Infrastrukur um auf Subsysteme zuzugreifen Urs Fässler Embedded GNU/Linux Basics 20

Applikation vom Treiber zum Webserver Applikation FastCGI D-Bus sysfs nginx mumeweb mumesrv Treiber Urs Fässler Embedded GNU/Linux Basics 21

2015-11-20 Embedded GNU/Linux Basics21[width=8cm] Applikation vom Treiber zum Webserver vom Treiber zum Webserver nginx FastCGI mumeweb D-Bus mumesrv sysfs Treiber Applikation mumeweb FastCGI / XML Interface (Session Handling) mumesrv Persistenz D-Bus Interface

Deployment Starten der Services Deployment 1 [Unit] systemd / unit file 2 Description=Mume D-Bus Service 3 After=dbus.target 4 Wants=dbus.target 5 6 [Service] 7 ExecStart=/usr/bin/mumesrv /sys/.../mume/ 8 9 [Install] 10 WantedBy=multi-user.target Urs Fässler Embedded GNU/Linux Basics 22

Deployment mumesrv Rezept Deployment 1 SECTION = "app" 2 DESCRIPTION = "MUME D-Bus interface to hardware" 3 LICENSE = "GPLv3+" 4 LIC FILES CHKSUM = "file://copying;md5=9 eef91148a9b14ec7f9df333daebc746" 5 6 inherit qmake5 7 8 DEPENDS += "qtbase" 9 RDEPENDS_${PN} += "qtbase dbus" 10 11 SRCREV = " 3 cbe61c102d9574ccd039b112704f0a42a2112f8" 12 13 SRC URI = " \ 14 git://github.com/ursfassler/mumesrv.git;protocol= https;branch=master \ 15 file://dbus.conf \ 16 " 17 18 S = "${WORKDIR}/git" 19 QMAKE PROFILES = "${S}/application/application.pro" 20... Urs Fässler Embedded GNU/Linux Basics 23

Deployment Produktiv Image Deployment 1 LICENSE = "MIT" 2 3 inherit core-image 4 mume-image.bb 5 IMAGE INSTALL = " \ 6 packagegroup-core-boot \ 7 packagegroup-core-ssh-openssh \ 8 packagegroup- mume- common \ 9 \ 10 mumesrv- start \ 11 mumeweb- start \ 12 mumehtml \ 13 " 14 15 IMAGE FEATURES += " \ 16 package- management \ 17 " 1 $ bitbake mume-image Urs Fässler Embedded GNU/Linux Basics 24

2 4 14 2015-11-20 Embedded GNU/Linux Basics24[width=8cm] Deployment Produktiv Image Produktiv Image mume-image.bb 1 LICENSE = "MIT" 3 inherit core-image 5 IMAGE INSTALL = " \ 6 packagegroup-core-boot \ 7 packagegroup-core-ssh-openssh \ 8 packagegroup-mume-common \ 9 \ 10 mumesrv-start \ 11 mumeweb-start \ 12 mumehtml \ 13 " 15 IMAGE FEATURES += " \ 16 package-management \ 17 " Deployment 1 $ bitbake mume-image Wie können wir die Firmware verteilen? Yocto Rezepte für Services anpassen bestehender Rezepte (nginx, qt,...) Rezept für Image bitbake image

Outro Danke Outro [12] [13] Slides auf http://www.bitzgi.ch/presentations Projekt auf https://github.com/ursfassler /mumesrv Source von mumesrv /mumeweb Source von mumeweb /meta-mume Yocto Layer für Projekt, beinhaltet Linux Treiber als Patch /embedded-gnu-linux-basics Sourcen des Vortrags Urs Fässler Urs Fässler Embedded GNU/Linux Basics 25

Backup Embedded Systeme Backup Digitales Multimeter ATLAS/LHC/CERN [6] [1] Sensor produziert 20 B/sec Reduzierung auf 2 B/sec Verarbeitung auf internem uc Sensor produziert 1 PiB/sec Reduzierung auf 100 MiB/sec [14] Verarbeitung auf eigenen 20 000 Server und Grid [11] Urs Fässler Embedded GNU/Linux Basics 1

Backup Firmware Backup Unter Firmware versteht man Software, die in elektronische Geräte eingebettet ist. [16] Gesamtes Software-Image von Embedded System Software für Subsysteme Power Management WLAN Karte BIOS Touch-Screen Urs Fässler Embedded GNU/Linux Basics 2

Backup PID 1 Backup Nachdem Linux alles initialisiert hat wird Kontrolle an Userspace übergeben. Üblicherweise ist dies systemd. systemd einfach da bekannt wenn mehrere Dienste nötig gewisse Grösse Script wenn nur wenige Dienste Applikation Applikation muss alles machen nur für monolithische Applikationen Urs Fässler Embedded GNU/Linux Basics 3

Backup Yocto Backup Aufgaben um Embedded system zu erstellen Cross Compiler bauen sysfs bauen (Kernel und benötigte Tools für System) Cross Compiler und sysfs für Developer bereitstellen (SDK) Aufgaben um Embedded system zu deployen Applikation cross-compilen sysfs cross-compilen Kernel cross-compilen Applikationen paketieren Image zusammenstellen Urs Fässler Embedded GNU/Linux Basics 4

Backup Kernel / Linux Backup Verteilen von Ressourcen Initialisieren und Abstrahieren der Hardware Urs Fässler Embedded GNU/Linux Basics 5

Backup Sonstiges Backup busybox Reimplementation von GNU/Linux Tools in einem Binary, optimiert auf groesse; oft eingeschraenker Funktionsumfang Urs Fässler Embedded GNU/Linux Basics 6

Backup important to know Backup opkg -o /opt/mume/1.8.1/sysroots/cortexa8hf-vfp-neon-pokylinux-gnueabi/ install /projekte/yocto/mume/build/tmp/deploy/ipk/cortexa8hf-vfpneon/libtinyxml* Urs Fässler Embedded GNU/Linux Basics 7

Literatur & Bild-Nachweise Literature I Literatur & Bild-Nachweise [1] Argonne National Laboratory. cc-by-sa-2.0. URL: https://commons.wikimedia.org/wiki/file:atlas_tile_calorimeter.png. [2] BeagleBoard.org Foundation. cc-by-sa-3.0. URL: https://commons.wikimedia.org/wiki/file:beaglebone_black.jpg. [3] davest. Why embedded linux needs a project like the yocto project, 11 2010. URL: https: //www.yoctoproject.org/blogs/davest/2010/why-embedded-linux-needs-project-yocto-project. [4] Evan-Amos. public domain. URL: https://commons.wikimedia.org/wiki/file:linksys-wireless-g-router.jpg. [5] Jwrodgers. cc-by-sa-3.0. URL: https://commons.wikimedia.org/wiki/file:raspberrypi.jpg. [6] André Karwath. cc-by-sa-2.5. URL: https://commons.wikimedia.org/wiki/file:digital_multimeter_aka.jpg. [7] Luikk. cc-by-sa-3.0. URL: https://commons.wikimedia.org/wiki/file:development_kit_edk6446.jpg. [8] M. Muruganandam. URL: http://www.slideshare.net/murugan_m1/embedded-system-basics. Urs Fässler Embedded GNU/Linux Basics 8

Literatur & Bild-Nachweise Literature II Literatur & Bild-Nachweise [9] OMAPpedia. Bootloader project. URL: http://omappedia.org/wiki/bootloader_project. [10] randofo. My useless machine. URL: http://www.instructables.com/file/fnc31tmgl4z6be8/. [11] Gary Richmond. The large hadron collider switches on. if it s the end of the world, it will be powered by gnu/linux. Free Software Magazine, 2008. URL: http://www.freesoftwaremagazine.com/articles/large_hadron_collider_switches_if_its_end_ world_it_will_be_powered_gnu_linux. [12] Scout. public domain. URL: https://openclipart.org/detail/196174/question-girl. [13] Scout. public domain. URL: https://openclipart.org/detail/191766/question-guy. [14] Wikipedia. Atlas experiment wikipedia, the free encyclopedia, 2015. [Online; accessed 11-October-2015]. URL: https://en.wikipedia.org/w/index.php?title=atlas_experiment&oldid=683613146. [15] Wikipedia. Eingebettetes system wikipedia, die freie enzyklopädie, 2015. [Online; Stand 10. Oktober 2015]. URL: https://de.wikipedia.org/w/index.php?title=eingebettetes_system&oldid=145312335. Urs Fässler Embedded GNU/Linux Basics 9

Literatur & Bild-Nachweise Literature III Literatur & Bild-Nachweise [16] Wikipedia. Firmware wikipedia, die freie enzyklopädie, 2015. [Online; Stand 11. Oktober 2015]. URL: https://de.wikipedia.org/w/index.php?title=firmware&oldid=146899876. Urs Fässler Embedded GNU/Linux Basics 10