summaryrefslogtreecommitdiff
path: root/slides/ecc2011-klauser.nios2-linux.tex
diff options
context:
space:
mode:
Diffstat (limited to 'slides/ecc2011-klauser.nios2-linux.tex')
-rw-r--r--slides/ecc2011-klauser.nios2-linux.tex97
1 files changed, 87 insertions, 10 deletions
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}