diff options
-rw-r--r-- | slides/ecc2011-klauser.nios2-linux.pdf | bin | 381035 -> 428199 bytes | |||
-rw-r--r-- | slides/ecc2011-klauser.nios2-linux.tex | 97 |
2 files changed, 87 insertions, 10 deletions
diff --git a/slides/ecc2011-klauser.nios2-linux.pdf b/slides/ecc2011-klauser.nios2-linux.pdf Binary files differindex 48547ad..73c630d 100644 --- a/slides/ecc2011-klauser.nios2-linux.pdf +++ b/slides/ecc2011-klauser.nios2-linux.pdf diff --git a/slides/ecc2011-klauser.nios2-linux.tex b/slides/ecc2011-klauser.nios2-linux.tex index e675130..b544300 100644 --- a/slides/ecc2011-klauser.nios2-linux.tex +++ b/slides/ecc2011-klauser.nios2-linux.tex @@ -33,6 +33,11 @@ % \setbeamercovered{dynamic} } +% Comment for presentation mode +\setbeameroption{show notes} +\usepackage{pgfpages} +\pgfpagesuselayout{resize to}[a4paper,border shrink=5mm,landscape] + \setbeamertemplate{navigation symbols}{} % remove navigation symbols \logo{\includegraphics[width=2cm]{images/ines-logo.png}} @@ -66,10 +71,14 @@ \item Industrielle Kommunikation \item Zeitsynchronisation und Hochverfügbarkeit \item System on Chip Design - \item Wireless Communication + \item Wireless Communication, Low Power \item Entwicklungsmethoden \end{itemize} + \item Projekte in Zusammenarbeit mit Industriepartnern + \item Für mehr Informationen: \url{http://ines.zhaw.ch} \end{itemize} + \note[item]{RT Ethernet: Profinet, Powerlink} + \note[item]{Präzise Zeitsynchronisierung: IEEE1588 (PTP), Redundanzprotokolle: PRP, HSR} \end{frame} \section{Übersicht FPGA und Softcore Prozessoren} @@ -78,7 +87,8 @@ \begin{itemize} \item Field Programmable Gate Array \begin{itemize} - \item Chip-Logik (Gateware) wird in einer Beschreibungssprache (VHDL, Verilog) codiert + \item Schaltung wird in einer Beschreibungssprache (VHDL, Verilog) codiert + \item Code wird synthetisiert und FPGA damit programmiert \item Änderungen am Design relativ einfach, Custom Systems \item Parallelität \end{itemize} @@ -92,6 +102,11 @@ \item Open-Source Softcores: Gaisler LEON, OpenRISC, LatticeMico32 \end{itemize} \end{itemize} + \note[item]{FPGA - ASIC, Rapid Prototyping} + \note[item]{schnelle Signalverarbeitung in FPGA möglich} + \note[item]{Viele Schaltungen benötigen heutzutage uC, Softcore einfache Lösung für + Projekte mit FPGA} + \note[item]{Softcore für Prototypen aber auch für Endprodukt möglich} \end{frame} \begin{frame}{Nios II} @@ -107,6 +122,9 @@ \item Optionale Hardware MUL/DIV Instruktionen, Custom Instructions \item Peripherie (Timer, UART, Ethernet MAC, Flash Controller, \dots) als IP über SOPC System konfigurierbar + \note[item]{Flexible Anpassung an Bedürfnisse im Laufe des Projekts} + \note[item]{SOPC = System on Programmable Chip: System von Altera zur + Konfiguration von vorgefertigten IP-Komponenten} \end{itemize} \end{frame} @@ -120,17 +138,35 @@ \item Filesysteme \item Bestehende Software und Treiber \end{itemize} + \note[item]{mehrere (quasi) nebenläufige Prozesse bzw. Benutzer} + \note[item]{Jeder Prozess (und Kernel) in eigenem virtuellem Adressraum, Schutz vor + fehlerhaften Speicherzugriffen in schlecht programmierter Software} + \note[item]{Mit MMU ist zwingend ein OS nötig bzw. macht einen MMU ohne OS keinen + Sinn} + \note[item]{Viele Hersteller bieten heutzutage ihre Software bzw. Treiber für Linux + an, bestehende Software im Haus} \end{frame} \begin{frame}{Wieso (Embedded) Linux?} \begin{itemize} - \item Starke Verbreitung im Bereich Embedded Systems (z.B. Android auf - Smartphones), Skalierbarkeit + \item Skalierbarkeit: Von ``Big Iron'' bis zum Embedded System + \begin{itemize} + \item Starke Verbreitung im Bereich Embedded Systems (z.B. Android auf + Smartphones) + \end{itemize} \item Umfangreiches Software-Ökosystem, grosse Community \item Einheitliche Entwicklungsumgebung (Unix-artig, POSIX-Standard) \item Portierungen auf zahlreiche ($\sim 30$) Prozessor-Architekturen \item Niedrige Kosten, freie Lizenzen \end{itemize} + \note[item]{Supercomputer (Anteil von über 90\% bei Top500), Cluster, Mainframe + (IBM zSeries), Server, PC, Netzwerk-Komponenten, Unterhaltungselektronik, + Smartphones, \dots} + \note[item]{Community bietet Support, Austausch unter Nutzern, grosse Auswahl bzw. + Alternativen an Software} + \note[item]{Entwicklungssystem ~= Zielsystem} + \note[item]{teilweise exotische Architekturen, Linux als einziges unterstütztes OS} + \note[item]{Source Code verfügbar} \end{frame} \begin{frame}{Embedded Linux} @@ -144,7 +180,7 @@ \begin{itemize} \item 32-bit Prozessor (mit oder ohne MMU) \item unterstützte Toolchain (GCC, binutils, \dots) - \item libc (uClibc, eglibc) + \item libc (uClibc, eglibc, \dots) \end{itemize} \end{itemize} \column{4.5cm} @@ -152,6 +188,10 @@ \includegraphics[width=0.8\textwidth]{images/tux.pdf} \end{center} \end{columns} + \note[item]{Embedded Linux: Sammelbegriff für Embedded Systems mit Linux Kernel} + \note[item]{Applikationen und Libraries werden üblicherweise durch Distribution + gesammelt} + \note[item]{libc = C Library} \end{frame} \section{Linux auf dem Nios II} @@ -160,22 +200,27 @@ \begin{itemize} \item Linux unterstützt Nios II mit \emph{und} ohne MMU \begin{itemize} - \item Erster Port von Microtronix für Nios II NOMMU - \item Separater Port von Wind River für Nios II MMU + \item Erster Port von Microtronix für Nios II NOMMU (Kernel 2.6.11) + \item Separater Port von Wind River für Nios II MMU (Kernel 2.6.21) \end{itemize} \item Open Source Nios II Linux (\href{http://www.alterawiki.com/wiki/Linux}{alterawiki.com/wiki/Linux}) \begin{itemize} \item MMU und NOMMU Ports zusammengeführt - \item Anpassungen an aktuelle Linux Kernel Versionen + \item Zahlreiche Verbesserungen, Anpassungen an aktuelle Linux Kernel Versionen \item Integration in Mainline (\href{http://www.kernel.org}{kernel.org}) geplant + \item Verwendet uClinux-dist als Distribution \end{itemize} \item Kommerzielle Anbieter \begin{itemize} - \item Auf Basis von Open Source Nios II + \item Auf Basis von Open Source Nios II, eigene Distribution \item Wind River, Timesys, SLS \end{itemize} \end{itemize} + \note[item]{NOMMU 2004, MMU 2009, im Auftrag von Altera} + \note[item]{Port momentan noch ausserhalb von offiziellem Linux Kernel} + \note[item]{Zusätzliche Treiber} + \note[item]{Version momentan bei 3.0 bzw. 3.1-rc4} \end{frame} \begin{frame}[containsverbatim]{Nios II mit oder ohne MMU?} @@ -191,6 +236,8 @@ \hline Shared Libraries & Libraries werden statisch zu jedem Binary gelinkt\\ \hline + ELF Fileformat & Flat Fileformat \\ + \hline keine Änderungen an Userspace-Software notwendig & u.U. Anpassungen an Software notwendig (z.B. kein \verb|fork()|) \\ \hline @@ -198,12 +245,18 @@ \hline \end{tabular} \end{table} + \note[item]{LE = Logic Elements, Logikzellen} + \note[item]{Prozesse können bei unsauberer Programmierung in Speicher von Kernel + oder anderen Prozessen schreiben bzw. lesen} + \note[item]{durch statisches Linken werden Binaries grösser} + \note[item]{Context Switches werde mit MMU aufwändiger} \end{frame} \begin{frame}{Development Workflow} \begin{center} \includegraphics[height=0.8\textheight]{images/design-flow.pdf} \end{center} + \note[item]{} \end{frame} \begin{frame}[containsverbatim]{Linux Image \& Root Filesystem} @@ -220,6 +273,10 @@ \item NFS (Network Filesystem) verwenden \end{itemize} \end{itemize} + \note[item]{Eigener Mini-Bootloader innerhalb des Kernel-Images} + \note[item]{u-boot kann aus Flash oder via Netzwerk (TFTP) laden} + \note[item]{oder nur Teile von RootFS (z.B. Conffiles) in Flash} + \note[item]{NFS während Entwicklung} \end{frame} \begin{frame}[fragile,containsverbatim]{Device Tree (\href{http://devicetree.org}{devicetree.org})} @@ -260,6 +317,12 @@ }; \end{lstlisting} \end{columns} + \note[item]{Urspünge im Opefirmware-Projekt (Bootumgebung für OS, analog BIOS)} + \note[item]{Hardware-Details wie Adressen, Interrupt-Nummern etc. müssen nicht im + OS hart codiert werden, OS wird unabhängiger von Hardware} + \note[item]{Flattened Device Tree -> Kompilierung in Binärformat} + \note[item]{Im Idealfall muss Linux bei geringfügiger Anpassung der HW (z.B. neue + IRQ einer Komponente) nicht neu kompilert werden} \end{frame} \begin{frame}[containsverbatim]{Bootprozess} @@ -273,18 +336,29 @@ \item Optional: Mounten von von Flash- bzw. Netzwerk-Filesystemen \item Weitere Userspace-Prozesse (Daemons etc.) werden durch Init gestartet \end{enumerate} + \note[item]{ohne u-boot} + \note[item]{Laden von FPGA-Bitstream und Linux Image via JTAG oder aus dem Flash} + \note[item]{Prozessor-spefisische Initialisierung, MM, Scheduler} + \note[item]{Device Tree einkompiliert} + \note[item]{Was nach init passiert, wird durch initskripts festgelegt} + \note[item]{z.B. könnte auch RootFS aus Flash oder anderem Festspeicher gemountet + werden} \end{frame} \section{Anwendungsbeispiele} \begin{frame}{Anwendungsbeispiel - Redundantes Kommunikationsnetzwerk} \begin{itemize} - \item Nios II mit MMU + \item Nios II mit MMU (anfangs ohne MMU) \item Ethernet-basiert, optional SHDSL \item Parallel Redundancy Protocol \item Software-Komponenten (COTS und Eigenentwicklung) u.a. für SHDSL, Webserver, Remote Update, SNMP, NTP \item Treiber für eigene IP-Komponenten \end{itemize} + \note[item]{Distribution von SLS} + \note[item]{Portierung NOMMU - MMU relativ einfach, nur geringfügige Anpassungen an + Treibern (aber nur, weil diese die Linux-Schnittstellen nicht korrekt benutzten)} + \note[item]{SD Card IP} \end{frame} \begin{frame}{Anwendungsbeispiel - Übertragung von HD-Videodaten} @@ -295,6 +369,9 @@ \item Software-Komponenten (COTS und Eigenentwicklung) u.a. für Session-Setup, Konfiguration, Webserver \item Treiber für eigene IP-Komponenten und Hardware \end{itemize} + \note[item]{TSE MAC von Altera} + \note[item]{USB/IP} + \note[item]{Bestehende Treiber für USB konnten verwendet werden} \end{frame} \begin{frame}{Zusammenfassung} |