% This document is licensed under the Creative Commons
% Attribution-ShareAlike license, Version 3.0.
%
% Copyright (C) 2011 Tobias Klauser (klto@zhaw.ch)

\documentclass{beamer}

\usetheme{Boadilla}

\usepackage{epstopdf}
\usepackage{ngerman}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}

\usepackage{listings}
\lstset{extendedchars=true,
	basicstyle=\ttfamily\small,
	keywordstyle=\color{rgb:red,127;green,0;blue,85},
	commentstyle=\color{rgb:red,63;green,127;blue,95},
	breaklines=true,xleftmargin=5pt,
	showspaces=false,
	showstringspaces=false,
	captionpos=b,caption=\lstname,
	numbers=none}

\mode<presentation>{
%	\hypersetup{pdfpagemode=FullScreen}
	\usecolortheme{dove}
	\usecolortheme{seahorse}
	\usecolortheme{lily}
	%   \useinnertheme[shadow]{rounded}
	%   \beamerdefaultoverlayspecification{<+->}
	%   \setbeamercovered{dynamic}
}

\logo{\includegraphics[width=2cm]{images/ines-logo.png}}

\title{Linux auf dem Nios II Softcore Prozessor}
\subtitle{}
\author{Tobias Klauser $<$klto@zhaw.ch$>$}
\institute[InES]{Institute of Embedded Systems\\Zürcher Hochschule für Angewandte Wissenschaften}
\date{30. August 2011}

\begin{document}

\begin{frame}
	\titlepage
\end{frame}

\section{Agenda}

\begin{frame}
  \tableofcontents
\end{frame}

\section{Institute of Embedded Systems ZHAW}

\begin{frame}{Institute of Embedded Systems}
  \begin{itemize}
    \item F\&E Institut der ZHAW
    \item Rund 45 Mitarbeiter
    \item Schwerpunkte
    \begin{itemize}
      \item Industrielle Kommunikation
      \item Zeitsynchronisation und Hochverfügbarkeit
      \item System on Chip Design
      \item Wireless Communication
      \item Entwicklungsmethoden
    \end{itemize}
  \end{itemize}
\end{frame}

\section{Übersicht FPGA und Softcore Prozessoren}

\begin{frame}{FPGA und Softcore}
  \begin{itemize}
    \item Field Programmable Gate Array
    \begin{itemize}
      \item Chip-Logik (Gateware) wird in einer Beschreibungssprache (VHDL, Verilog) codiert
      \item Änderungen am Design relativ einfach, Custom Systems
      \item Parallelität
    \end{itemize}
    \item Softcore
    \begin{itemize}
      \item Prozessor innerhalb des FPGA implementiert
      \item Fast immer Bestandteil eines System-on-a-Chip
      \item Konfigurierbar (z.B. MMU), erweiterbar (z.B. Custom Instructions)
      \item Proprietär, herstellerabhängig: Nios II (Altera), MicroBlaze (Xilinx),
      Cortex M1 (ARM)
      \item Open-Source Softcores: Gaisler LEON, OpenRISC, LatticeMico32
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{Nios II}
  \begin{itemize}
    \item 32-bit RISC Softcore-Prozessorarchitektur für Altera FPGAs
    \item 3 Basisvarianten:
    \begin{itemize}
      \item Economy (600-700 LEs)
      \item Standard (1200-1400 LEs)
      \item Fast (2600-3000 LEs)
    \end{itemize}
    \item Konfigurierbar mit oder ohne Memory Management Unit (MMU)
    \item Optionale Hardware MUL/DIV Instruktionen, Custom Instructions
    \item Peripherie (Timer, UART, Ethernet MAC, Flash Controller, \dots) als IP über SOPC
    System konfigurierbar
  \end{itemize}
\end{frame}

\section{Übersicht Linux}

\begin{frame}{Wieso ein Betriebssystem?}
  \begin{itemize}
    \item Multi-Tasking, Multi-User
    \item Memory Management, Memory Protection (MMU benötigt)
    \item TCP/IP Stack
    \item Filesysteme
    \item Bestehende Software und Treiber
  \end{itemize}
\end{frame}

\begin{frame}{Wieso (Embedded) Linux?}
  \begin{itemize}
    \item Starke Verbreitung im Bereich Embedded Systems (z.B. Android auf
    Smartphones), Skalierbarkeit
    \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}
\end{frame}

\begin{frame}{Embedded Linux}
  \begin{columns}
  \column{8cm}
  \begin{itemize}
    \item Linux Kernel als Kernkomponente eines Linux Systems
    \item Libraries und Applikationen werden zusätzlich benötigt, um ein
    komplettes System zu erhalten
    \item Minimale Voraussetzungen:
    \begin{itemize}
      \item 32-bit Prozessor (mit oder ohne MMU)
      \item unterstützte Toolchain (GCC, binutils, \dots)
      \item libc (uClibc, eglibc)
    \end{itemize}
  \end{itemize}
  \column{4.5cm}
  \begin{center}
    \includegraphics[width=0.8\textwidth]{images/tux.pdf}
  \end{center}
  \end{columns}
\end{frame}

\section{Linux auf dem Nios II}

\begin{frame}{Linux/uClinux auf dem Nios II}
  \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
    \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 Integration in Mainline (\href{http://www.kernel.org}{kernel.org}) geplant
    \end{itemize}
    \item Kommerzielle Anbieter
    \begin{itemize}
      \item Auf Basis von Open Source Nios II
      \item Wind River, Timesys, SLS
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{Development Workflow}
  \begin{center}
    \includegraphics[height=0.8\textheight]{images/design-flow.pdf}
  \end{center}
\end{frame}

\begin{frame}[containsverbatim]{Linux Image}
  \begin{itemize}
    \item Kernel Image als ELF-Binary
    \item Device Tree: Strukturierte Beschreibung der Hardware
    \begin{itemize}
      \item Bestandteil des Kernel Images
      \item Optional in Flash (bedingt Verwendung von u-boot Bootloader)
    \end{itemize}
    \item Root Filesystem in einem \verb|initramfs| an Kernel angehängt
    \item Keine Persistenz über Reboot hinweg
    \begin{itemize}
      \item Alternative: Root FS separat in Flash speichern
      \item NFS (Network Filesystem) verwenden
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}[containsverbatim]{Bootprozess - RAM}
  \begin{enumerate}
    \item Laden des FPGA-Bitstreams via JTAG
    \item Laden des Linux Images via JTAG
    \item ...
    \item Beim Booten wird das \verb|initramfs| durch den Kernel ins RAM entpackt und
    verwendet
  \end{enumerate}
\end{frame}

\section{Anwendungsbeispiele}

\begin{frame}{Anwendungsbeispiel - Redundantes Kommunikationsnetzwerk}
  \begin{columns}
  \column{8cm}
  \begin{itemize}
    \item Ethernet-basiert, optional SHDSL
    \item Parallel Redundancy Protocol
    \item Software-Komponenten für SHDSL, Webserver, SNMP
    \item Treiber für eigene IP-Komponenten
  \end{itemize}
  \column{4.5cm}
  \begin{center}
  \end{center}
  \end{columns}
\end{frame}

\begin{frame}{Anwendungsbeispiel - Übertragung von HD-Videodaten}
  \begin{itemize}
    \item Gigabit-Ethernet
    \item USB Host- und Device-Controller
    \item Software-Komponenten für Session-Setup, Webserver
  \end{itemize}
\end{frame}

\begin{frame}{Zusammenfassung}
  \begin{columns}[t]
  \column{0.5\textwidth}
  \begin{itemize}
    \item foo
    \item bar
    \item baz
    \item quuz
  \end{itemize}
  \column{0.5\textwidth}
  \begin{itemize}
    \item foo
    \item bar
  \end{itemize}
  \end{columns}
\end{frame}

\begin{frame}{Danke für Ihre Aufmerksamkeit}
\begin{center}
Tobias Klauser\\
Institute of Embedded Systems\\
Zürcher Hochschule für Angewandte Wissenschaften\\
\href{mailto:klto@zhaw.ch}{klto@zhaw.ch}\\
\end{center}
\end{frame}

\end{document}
