diff options
| author | Manuel Traut <manut@linutronix.de> | 2011-01-28 13:17:04 +0100 |
|---|---|---|
| committer | Manuel Traut <manut@linutronix.de> | 2011-01-28 13:17:04 +0100 |
| commit | 2354b12678f07579815356ec10eef193a64bb2a6 (patch) | |
| tree | 9cefef7a3380c85c68c4bca741487eb3aad02d40 | |
| parent | 7e5883bbd6e699d1fcee0814c5a172d6348bd63c (diff) | |
| parent | 5bc3f53265144faf43e16031483d92f581766a2b (diff) | |
Merge branch 'jan'
Conflicts:
application-devel/embedded-devel/pres_embedded-devel_de.tex
flash-memory/flash-filesystems/pres_flashfilesystems_en.tex
linux-basics/linux-processes/pres_linux-processes_en.tex
Signed-off-by: Manuel Traut <manut@linutronix.de>
| -rw-r--r-- | application-devel/app-debugging/pres_app-debugging_de.tex | 4 | ||||
| -rw-r--r-- | application-devel/embedded-devel/pres_embedded-devel_de.tex | 105 | ||||
| -rw-r--r-- | flash-memory/flash-filesystems/pres_flashfilesystems_en.tex | 37 | ||||
| -rw-r--r-- | images/jffs2.dia | bin | 0 -> 1054 bytes | |||
| -rw-r--r-- | images/jffs2.png | bin | 0 -> 4327 bytes | |||
| -rw-r--r-- | images/ubi.dia | bin | 0 -> 1550 bytes | |||
| -rw-r--r-- | images/ubi.png | bin | 0 -> 7151 bytes | |||
| -rw-r--r-- | images/ubifs.dia | bin | 0 -> 1203 bytes | |||
| -rw-r--r-- | images/ubifs.png | bin | 0 -> 5407 bytes | |||
| -rw-r--r-- | linux-basics/linux-processes/pres_linux-processes_en.tex | 74 |
10 files changed, 217 insertions, 3 deletions
diff --git a/application-devel/app-debugging/pres_app-debugging_de.tex b/application-devel/app-debugging/pres_app-debugging_de.tex index 32a3e85..9f6c5ca 100644 --- a/application-devel/app-debugging/pres_app-debugging_de.tex +++ b/application-devel/app-debugging/pres_app-debugging_de.tex @@ -173,7 +173,7 @@ Loaded symbols for /lib64/ld-linux-x86-64.so.2 Core was generated by `./hello_segfault'. Program terminated with signal 11, Segmentation fault. #0 0x0000000000400538 in main () at hello_crash.c:6 -6 printf("Hello segfaulting world\n", +6 printf("Hello segfaulting world %s\n", *arthur_dent); (gdb) bt #0 0x0000000000400538 in main () at hello_crash.c:6 @@ -376,7 +376,7 @@ int main(void) { int *my_array = (int*) malloc(10 * sizeof(int)); int i = 0; - memset(my_array, 0, 10); + memset(my_array, 0, 10 * sizeof(int)); for(i = 0; i < 11; i++) printf("%d ", my_array[i]); diff --git a/application-devel/embedded-devel/pres_embedded-devel_de.tex b/application-devel/embedded-devel/pres_embedded-devel_de.tex index 31b7a38..22e0d8d 100644 --- a/application-devel/embedded-devel/pres_embedded-devel_de.tex +++ b/application-devel/embedded-devel/pres_embedded-devel_de.tex @@ -274,8 +274,113 @@ $ addr2line -e hello 40050c \end{lstlisting} \end{frame} +\subsection{Bibliotheken} +\subsubsection{Statische Bibliotheken} +\begin{frame}[fragile] +\frametitle{Statische Bibliotheken} +\begin{lstlisting} +# Erstellen +$ gcc -c file1.c file2.c +$ ar r libhello.a file1.o file2.o +# Benutzen +$ gcc -o hello hello.o libhello.a +\end{lstlisting} +\end{frame} + +\subsubsection{Dynamische Bibliotheken} + +\begin{frame}[fragile] +\frametitle{Dynamische Bibliotheken} +\begin{lstlisting} +# Erstellen dynamischer Bibliotheken +$ gcc -c -fPIC file1.c file2.c +$ gcc -shared -o libhello.so file1.o file2.o +# Gegen die Bibliothek linken +$ gcc -o hello hello.c libhello.so +# Versuchen Sie nun das Programm zu starten +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Wir erinnern uns an den Dynamic Loader!} +Also, entweder LD\_LIBRARY\_PATH setzen, oder nach /lib bzw. /usr/lib +kopieren. +\end{frame} + +\begin{frame} +\frametitle{\textbf{P}osition \textbf{Independent} \textbf{Code}} +Die Option -fPIC bewirkt die Erzeugung von ''position independent code''. +Das heißt, es wird Code erzeugt, der zur Laufzeit an jeder beliebigen virtuellen +Adresse lauffähig ist. +\end{frame} + +\begin{frame}[fragile] +\frametitle{SONAME} +\begin{lstlisting} +# Erstellen dynamischer Bibliotheken +$ gcc -c -fPIC file1.c file2.c +$ gcc -shared -Wl,-soname,libsayhello.so \ + -o libhello.so file1.o file2.o +\end{lstlisting} +Die -soname Linker-Option bewirkt, daß beim Linken der Name +''libsayhello.so'' eingetragen wird. Das heißt der Loader +sucht beim Starten der Applikation nach einer Bibliothek mit +dem Namen ''libsayhello.so''. +\end{frame} + +\begin{frame} +\frametitle{Namensgebung} +\begin{itemize} +\item linker name +\item SONAME +\item real name +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Namensgebung} +\begin{verbatim} +libhello.so.1 -> libhello.so.1.0.2 +# New minor version +libhello.so.1 -> libhello.so.1.0.3 +# New Major version +libhello.so.2 -> libhello.so.1.0.1 +\end{verbatim} +SONAME beeinhaltet die Majornumber. Der Symbolic Link mit +der Majornumber(SONAME) zeigt normalerweise auf die Bibliotheksversion +mit der aktuellsten Minornumber (real name). +\end{frame} + +\begin{frame}[fragile] +\frametitle{Namensgebung} +\begin{verbatim} +libhello.so -> libhello.so.1 +\end{verbatim} +Oft wird auch ein Link ohne Versionsnummer angelegt, der auf die +aktuellste Majornumber Zeigt. Man spricht hier vom sogenannten +''linker name''. +\end{frame} + +\begin{frame}[fragile] +\frametitle{DT\_RPATH und DT\_RUNPATH} +\begin{lstlisting} +$ gcc -Wl,-rpath,/mypath -o hello hello.c \ + libhello.so +\end{lstlisting} +-rpath erzeugt per Default DT\_RPATH. Um DT\_RUNPATH zu erzeugen, +benötigt man die Option --enable-new-dtags. Beispiel: +\begin{lstlisting} +$ gcc -Wl,--enable-new-dtags \ + -Wl,-rpath,/mypath \ + -o hello hello.c libhello.so +# Was faellt bei folgendem Kommando auf: +$ objdump -p hello | grep PATH +\end{lstlisting} +\end{frame} + \subsection{Buildprozess automatisieren} \subsubsection{Übersicht} + \begin{frame} \frametitle{GNU make} \begin{alertblock}{Was ist GNU make?} diff --git a/flash-memory/flash-filesystems/pres_flashfilesystems_en.tex b/flash-memory/flash-filesystems/pres_flashfilesystems_en.tex index a9164fd..5de794f 100644 --- a/flash-memory/flash-filesystems/pres_flashfilesystems_en.tex +++ b/flash-memory/flash-filesystems/pres_flashfilesystems_en.tex @@ -34,6 +34,27 @@ $ dmesg \subsubsection{JFFS2} \begin{frame}[fragile] +\frametitle{MTD Flash partitioning} +\begin{itemize} +\item Redboot partition parsing +\item Boardsupport +\item Kernelparameters: +\begin{verbatim} +mtdparts=edb7312-nor:256k(ARMboot)ro, +-(root);edb7312-nand:-(home) +\end{verbatim} +\end{itemize} +\end{frame} + +\begin{frame} +\frametitle{JFFS2} +\begin{figure}[h] +\centering +\includegraphics[width=8cm]{images/jffs2.png} +\end{figure} +\end{frame} + +\begin{frame}[fragile] \frametitle{Using JFFS2} \begin{lstlisting} # Create JFFS2 image @@ -57,6 +78,22 @@ root=/dev/mtdblock0 rootfstype=jffs2 \end{frame} \subsubsection{UBI and UBIFS} +\begin{frame} +\frametitle{UBI: Unsorted Block Images} +\begin{figure}[h] +\centering +\includegraphics[width=8cm]{images/ubi.png} +\end{figure} +\end{frame} + +\begin{frame} +\frametitle{UBIFS} +\begin{figure}[h] +\centering +\includegraphics[width=8cm]{images/ubifs.png} +\end{figure} +\end{frame} + \begin{frame}[fragile] \frametitle{Using UBIFS} \begin{lstlisting} diff --git a/images/jffs2.dia b/images/jffs2.dia Binary files differnew file mode 100644 index 0000000..21394ec --- /dev/null +++ b/images/jffs2.dia diff --git a/images/jffs2.png b/images/jffs2.png Binary files differnew file mode 100644 index 0000000..63b4fe1 --- /dev/null +++ b/images/jffs2.png diff --git a/images/ubi.dia b/images/ubi.dia Binary files differnew file mode 100644 index 0000000..35eb9aa --- /dev/null +++ b/images/ubi.dia diff --git a/images/ubi.png b/images/ubi.png Binary files differnew file mode 100644 index 0000000..0575579 --- /dev/null +++ b/images/ubi.png diff --git a/images/ubifs.dia b/images/ubifs.dia Binary files differnew file mode 100644 index 0000000..82105f2 --- /dev/null +++ b/images/ubifs.dia diff --git a/images/ubifs.png b/images/ubifs.png Binary files differnew file mode 100644 index 0000000..2b23aa9 --- /dev/null +++ b/images/ubifs.png diff --git a/linux-basics/linux-processes/pres_linux-processes_en.tex b/linux-basics/linux-processes/pres_linux-processes_en.tex index f7774c3..71c1344 100644 --- a/linux-basics/linux-processes/pres_linux-processes_en.tex +++ b/linux-basics/linux-processes/pres_linux-processes_en.tex @@ -3,7 +3,7 @@ \input{configpres} -\title{Linux process mangagement / Scheduling / Daemons} +\title{Linux process management / Scheduling / Daemons} \maketitle % stop displaying 'fueller.png' on the following slides @@ -11,6 +11,23 @@ \subsection{Process Management} \begin{frame} +\frametitle{Binary formats} +A program file includes meta information which describes the format +of the executable. Linux uses the ELF format (Executable Linking Format) +\end{frame} + +\begin{frame} +\frametitle{Process Memory Layout} +\begin{itemize} +\item text segment +\item initialized data segment +\item uninitialized data segment +\item stack +\item heap +\end{itemize} +\end{frame} + +\begin{frame} \frametitle{Process creation} From the operatings system's point of view, there are basically two steps, which are performed when starting a process. @@ -156,6 +173,30 @@ Scheduling policies: \end{verbatim} \end{frame} +\begin{frame}[fragile] +\frametitle{Setting scheduling class and priority} +\begin{lstlisting} +#include <sched.h> + +struct sched_param param; +int ret; + +params.prio = 80; +ret = sched_setscheduler(0, SCHED_FIFO, ¶m); +[...] +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Resource limits} +\begin{lstlisting} +#include <sys/resource.h> + +int setrlimit(int resource, + const struct rlimit *rlim); +\end{lstlisting} +\end{frame} + \subsection{Daemons} \begin{frame} \frametitle{Daemons} @@ -177,6 +218,37 @@ working directory and so on...) \end{itemize} \end{frame} +\subsection{Multicore specific scheduling} +\begin{frame}[fragile] +\frametitle{Scheduling on Multicore Systems} +\begin{itemize} +\item CPU affinity +\item Kernelparameters: +\begin{itemize} +\item max\_cpus= +\item isolcpus= +\end{itemize} +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{CPU affinity} +\begin{lstlisting} +#define _GNU_SOURCE +#include <sched.h> + +cpu_set_t set; + +CPU_ZERO(&set); +CPU_SET(0, &set); +CPU_SET(1, &set); + +[...] + +sched_setaffinity(pid, CPU_SETSIZE, &set); +\end{lstlisting} +\end{frame} + \subsection{sources} \begin{frame} \begin{thebibliography}{1} |
