diff options
| author | John Ogness <john.ogness@linutronix.de> | 2018-02-20 15:33:14 +0100 |
|---|---|---|
| committer | John Ogness <john.ogness@linutronix.de> | 2018-02-20 15:33:14 +0100 |
| commit | 0351969fdffa9959921d8ec38b7d0d7cf095fcd0 (patch) | |
| tree | 168fe35c8d3324b11181098dd7c09d0fa409f88d /kernel-devel | |
| parent | ffce744d7d8a0f7a6846164bfc16fc0753683127 (diff) | |
remove german slides when english are available
Remove german slides if a completely translated english version is
available. For slides that have been translated to english, but do
not contain all the information of the german slides, the german
slides are still available. But they are only available for
reference. That will not be built.
Signed-off-by: John Ogness <john.ogness@linutronix.de>
Diffstat (limited to 'kernel-devel')
| -rw-r--r-- | kernel-devel/char-device/Makefile | 1 | ||||
| -rw-r--r-- | kernel-devel/char-device/pres_char-device_de.tex | 287 | ||||
| -rw-r--r-- | kernel-devel/module-basics/Makefile | 1 | ||||
| -rw-r--r-- | kernel-devel/module-basics/pres_module-basics_de.tex | 523 |
4 files changed, 0 insertions, 812 deletions
diff --git a/kernel-devel/char-device/Makefile b/kernel-devel/char-device/Makefile index 094719f..f5ce0ab 100644 --- a/kernel-devel/char-device/Makefile +++ b/kernel-devel/char-device/Makefile @@ -1,3 +1,2 @@ obj-$(CONFIG_KERNEL_CHAR_DEV) += hints_char-device_de.pdf -obj-$(CONFIG_KERNEL_CHAR_DEV) += pres_char-device_de.pdf obj-$(CONFIG_KERNEL_CHAR_DEV) += pres_char-device_en.pdf diff --git a/kernel-devel/char-device/pres_char-device_de.tex b/kernel-devel/char-device/pres_char-device_de.tex deleted file mode 100644 index 6568af4..0000000 --- a/kernel-devel/char-device/pres_char-device_de.tex +++ /dev/null @@ -1,287 +0,0 @@ -\input{configpres} - -\title{Interaktion eines Character Device Treibers} -\maketitle - -\subsection{Character Devices} - -\subsubsection{Syscall Interface} -\begin{frame} -\frametitle{Syscall Interface} -\begin{center} -\includegraphics[width=5cm]{images/syscall.png} -\end{center} -\end{frame} - -\subsubsection{Struktur} -\begin{frame} -\frametitle{Interaktion eines Character Device Treibers} -\pause -\begin{itemize} -\item open -\pause -\item release -\pause -\item read -\pause -\item write -\pause -\item fsync -\pause -\item llseek -\pause -\item poll -\pause -\item mmap -\pause -\item ioctl -\pause -\item \dots -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{open} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -int (*open) (struct inode *, struct file *); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [open:] Erste Operation auf einem Character-Device. Die Funktion muss -nicht implementiert werden. In diesem Fall schlägt ein Öffnen des Devices nie -fehl und es gibt keine Benachrichtigung des Treibers. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/open.png} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{release} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -int (*release) (struct inode *, struct file *); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [release:] Letzte Operation auf einem Character-Device. Die Funktion muss -nicht implementiert werden. In diesem Fall schlägt ein Öffnen des Devices nie -fehl und es gibt keine Benachrichtigung des Treibers. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/release.png} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{read} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [read:] Lesen von Daten des Devices. Die Daten werden mit Hilfe von -\emph{copy\_to\_user} in den Userspace kopiert. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/read.png} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{write} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [write:] Schreiben von Daten an das Devices. Die Daten werden mit Hilfe -von \emph{copy\_from\_user} aus dem Userspace kopiert. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/write.png} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{fsync} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -int (*fsync) (struct file *, struct dentry *, int datasync); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [fsync:] Das Schreiben aller gecachten Daten eines Devices erzwingen. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/fsync.png} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{llseek} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -loff_t (*llseek) (struct file *, loff_t, int); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [llseek:] Setzt die aktuelle Position für Lese- und Schreibzugriffe. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/llseek.png} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{poll} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -unsigned int (*poll) (struct file *, struct poll_table_struct *); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [poll:] Implementiert poll, epoll und select. Wird poll nicht -implementiert, so muss nicht blockierendes Lesen und Schreiben möglich sein. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/poll.png} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{mmap} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -int (*mmap) (struct file *, struct vm_area_struct *); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [mmap:] Legt ein Speichermapping des Devices im Kontext des -Userspace-Prozesses an. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/mmap.png} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{ioctl} -\pause -\begin{itemize} -\item Prototyp -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); -\end{lstlisting} -\end{tiny} -\pause -\item Beschreibung -\pause -\begin{description} -\item [ioctl:] Implementiert Device-spezifische Kommandos. Sollte, da in den -meisten Fällen bessere, standartisierte Schnittstellen existieren, vermieden -werden. -\end{description} -\pause -\item Datenfluss -\end{itemize} -\pause -\begin{center} -\includegraphics[width=5cm]{images/ioctl.png} -\end{center} -\end{frame} - -\input{tailpres} diff --git a/kernel-devel/module-basics/Makefile b/kernel-devel/module-basics/Makefile index 82017d4..952b311 100644 --- a/kernel-devel/module-basics/Makefile +++ b/kernel-devel/module-basics/Makefile @@ -1,2 +1 @@ -obj-$(CONFIG_KERNEL_MODULES_BASIC) += pres_module-basics_de.pdf obj-$(CONFIG_KERNEL_MODULES_BASIC) += pres_module-basics_en.pdf diff --git a/kernel-devel/module-basics/pres_module-basics_de.tex b/kernel-devel/module-basics/pres_module-basics_de.tex deleted file mode 100644 index e303cca..0000000 --- a/kernel-devel/module-basics/pres_module-basics_de.tex +++ /dev/null @@ -1,523 +0,0 @@ -\input{configpres} - -\title{Treiber Modul Grundlagen} -\maketitle - -\subsection{Kernel Module} - -\subsubsection{Aufbau} -\begin{frame}[fragile] -\frametitle{Aufbau eines Treiber Moduls} -\pause -\begin{itemize} -\item Header -\pause -\begin{scriptsize} -\begin{lstlisting}[frame=trBL] -#include <linux/init.h> -#include <linux/module.h> -\end{lstlisting} -\end{scriptsize} -\pause -\item Init -\pause -\begin{scriptsize} -\begin{lstlisting}[frame=trBL] -static int __init vain_init(void) -{ - printk(KERN_INFO "vain_init: done\n"); - return 0; -} - -module_init(vain_init); -\end{lstlisting} -\end{scriptsize} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau (fort.)} -\begin{itemize} -\item Exit -\pause -\begin{scriptsize} -\begin{lstlisting}[frame=trBL] -static void __exit vain_exit(void) -{ - printk(KERN_INFO "vain_exit: done\n"); -} - -module_exit(vain_exit); -\end{lstlisting} -\end{scriptsize} -\pause -\item Beschreibung -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -MODULE_AUTHOR("Benedikt Spranger <b.spranger@linutronix.de>"); -MODULE_DESCRIPTION("a more or less useless module"); -MODULE_LICENSE("GPL v2"); -MODULE_VERSION("0815"); -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\subsubsection{Rumpf Treiber} -\begin{frame}[fragile] -\frametitle{Rumpf Treiber} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain/vain.c} -\end{tiny} -\end{frame} - -\subsubsection{Makefile} -\begin{frame}[fragile] -\frametitle{Makefile} -\begin{scriptsize} -\lstinputlisting[language=make]{kernel-devel/module-basics/vain/Makefile} -\end{scriptsize} -\end{frame} - -\subsubsection{Bauen und Laden} -\begin{frame}[fragile] -\frametitle{Bauen, laden und entladen des Moduls} -\begin{itemize} -\item Bauen -\pause -\begin{tiny} -\begin{verbatim} -$ make -make -C /lib/modules/2.6.30/build M=/path/to/vain modules -make[1]: Entering directory `/usr/src/linux-2.6.30' - CC [M] /path/to/vain/vain.o - Building modules, stage 2. - MODPOST 1 modules - CC /path/to/vain/vain.mod.o - LD [M] /path/to/vain/vain.ko -make[1]: Leaving directory `/usr/src/linux-2.6.30' -$ -\end{verbatim} -\end{tiny} -\pause -\item Laden -\pause -\begin{tiny} -\begin{verbatim} -# insmod ./vain.ko -vain_init: done -# -\end{verbatim} -\end{tiny} -\item Entladen -\pause -\begin{tiny} -\begin{verbatim} -# rmmod vain -vain_exit: done -# -\end{verbatim} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Komplexere Module} -\pause -\begin{itemize} -\item Teil eines Bussystems -\pause -\begin{itemize} -\item PCI -\pause -\item Platform -\pause -\item USB -\pause -\item \dots -\pause -\end{itemize} -\item Teil eines Subsystems\footnote{nicht Teil des Vortrages} -\pause -\begin{itemize} -\item Character-Devices -\pause -\item Block-Devices -\pause -\item Network-Devices -\pause -\item \dots -\end{itemize} -\end{itemize} -\end{frame} - -\subsubsection{PCI Treiber Modul} -\begin{frame}[fragile] -\frametitle{Aufbau eines PCI Treiber Moduls} -\pause -\begin{itemize} -\item Header -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -#include <linux/init.h> -#include <linux/module.h> -|#include <linux/pci.h>| -\end{lstlisting} -\end{tiny} -\pause -\item Init -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -static int __init vain_pci_init(void) -{ - int err; - - |err = pci_register_driver(&vain_pci_driver);| - - if (!err) - printk(KERN_INFO "vain_pci_init: done\n"); - return err; -} - -module_init(vain_pci_init); -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines PCI Treiber Moduls (fort.)} -\begin{itemize} -\item Exit -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -static void __exit vain_pci_exit(void) -{ - |pci_unregister_driver(&vain_pci_driver);| - printk(KERN_INFO ``vain_pci_exit: done\n''); -} - -module_exit(vain_pci_exit); -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines PCI Treiber Moduls (fort.)} -\begin{itemize} -\item struct pci\_driver -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -|static struct pci_driver vain_pci_driver = { - .name = "vain_pci", - .id_table = vain_pci_ids, - .probe = vain_pci_probe, - .remove = __devexit_p(vain_pci_remove), -};| -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines PCI Treiber Moduls (fort.)} -\begin{itemize} -\item struct struct pci\_device\_id -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -|static struct pci_device_id vain_pci_ids[] __devinitdata = { - {PCI_VENDOR_ID_ILLEGAL_VENDOR, PCI_DEVICE_ID_ILLEGAL_VENDOR_DEVICE, - PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, - {0, } -};| -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines PCI Treiber Moduls (fort.)} -\begin{itemize} -\item probe -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -|static int __devinit vain_pci_probe(struct pci_dev *pdev, - const struct pci_device_id *ent) -{ - int ret; - - ret = pci_enable_device(pdev); - if (ret) - goto err_free; - - ret = pci_request_regions(pdev, "vain_pci"); - if (ret) - goto err_disable_device; - - info->base = pci_ioremap_bar(pdev, 0); - if (!info->base) { - ret = -ENODEV; - goto err_rel_regs; - } - - return 0;| -\end{lstlisting} -\dots -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines PCI Treiber Moduls (fort.)} -\begin{itemize} -\item remove -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -|static void __devexit vain_pci_remove(struct pci_dev *pdev) -{ - struct vain_pci_info *info = pci_get_drvdata(pdev); - - iounmap(info->base); - pci_release_regions(pdev); - pci_disable_device(pdev); - pci_set_drvdata(pdev, NULL); - - kfree (info); -}| -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{PCI Treiber Hintergrund} -\includegraphics[width=7cm]{images/PCI_driver.png} -\end{frame} - -\begin{frame}[fragile] -\frametitle{PCI Rumpf Treiber} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_1.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{PCI Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_2.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{PCI Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_3.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{PCI Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_4.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{PCI Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_5.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{PCI Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_pci/vain_pci_6.c} -\end{tiny} -\end{frame} - -\subsubsection{Platform Treiber Modul} -\begin{frame}[fragile] -\frametitle{Aufbau eines Platform Treiber Moduls} -\pause -\begin{itemize} -\item Header -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -#include <linux/init.h> -#include <linux/module.h> -|#include <linux/platform_device.h> - -#include <asm/io.h>| -\end{lstlisting} -\end{tiny} -\pause -\item Init -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -static int __init vain_plat_init(void) -{ - int err; - - |err = platform_driver_register(&vain_plat_driver);| - - if (!err) - printk(KERN_INFO ``vain_plat_init: done\n''); - return err; -} -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines Platform Treiber Moduls (fort.)} -\pause -\begin{itemize} -\item Exit -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -static void __exit vain_plat_exit(void) -{ - |platform_driver_unregister(&vain_plat_driver);| - printk(KERN_INFO ``vain_plat_exit: done\n''); -} -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines Platform Treiber Moduls (fort.)} -\pause -\begin{itemize} -\item struct platform\_driver -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -|static struct platform_driver vain_plat_driver = { - .driver = { - .name = "vain_plat", - .owner = THIS_MODULE, - }, - .probe = vain_plat_probe, - .remove = __devexit_p(vain_plat_remove), -};| -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines Platform Treiber Moduls (fort.)} -\pause -\begin{itemize} -\item probe -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -|static int __devinit vain_plat_probe(struct platform_device *pdev) -{ - struct resource *res; - int err; - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (unlikely(!res)) - goto err_free; - - mem = request_mem_region(res->start, resource_size(res), pdev->name); - if (!mem) - goto err_free; - - info->base = ioremap(res->start, resource_size(res)); - if (!info->base) - goto err_ioremap; - - platform_set_drvdata(pdev, info); - - return 0;| -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Aufbau eines Platform Treiber Moduls (fort.)} -\pause -\begin{itemize} -\item remove -\pause -\begin{tiny} -\begin{lstlisting}[frame=trBL] -|static int __devexit vain_plat_remove(struct platform_device *pdev) -{ - struct vain_plat_info *info = platform_get_drvdata(pdev); - struct resource *res; - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - iounmap(info->base); - release_mem_region(res->start, resource_size(res)); - platform_set_drvdata(pdev, NULL); - - kfree (info); - - return 0; -}| -\end{lstlisting} -\end{tiny} -\end{itemize} -\end{frame} - -\begin{frame} -\frametitle{Platform Treiber Hintergrund} -\includegraphics[width=7cm]{images/plat_driver.png} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Platform Rumpf Treiber} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_1.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Platform Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_2.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Platform Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_3.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Platform Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_4.c} -\end{tiny} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Platform Rumpf Treiber (fort.)} -\begin{tiny} -\lstinputlisting{kernel-devel/module-basics/vain_plat/vain_plat_5.c} -\end{tiny} -\end{frame} - -\input{tailpres} |
