summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Traut <manut@linutronix.de>2011-01-28 13:17:04 +0100
committerManuel Traut <manut@linutronix.de>2011-01-28 13:17:04 +0100
commit2354b12678f07579815356ec10eef193a64bb2a6 (patch)
tree9cefef7a3380c85c68c4bca741487eb3aad02d40
parent7e5883bbd6e699d1fcee0814c5a172d6348bd63c (diff)
parent5bc3f53265144faf43e16031483d92f581766a2b (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.tex4
-rw-r--r--application-devel/embedded-devel/pres_embedded-devel_de.tex105
-rw-r--r--flash-memory/flash-filesystems/pres_flashfilesystems_en.tex37
-rw-r--r--images/jffs2.diabin0 -> 1054 bytes
-rw-r--r--images/jffs2.pngbin0 -> 4327 bytes
-rw-r--r--images/ubi.diabin0 -> 1550 bytes
-rw-r--r--images/ubi.pngbin0 -> 7151 bytes
-rw-r--r--images/ubifs.diabin0 -> 1203 bytes
-rw-r--r--images/ubifs.pngbin0 -> 5407 bytes
-rw-r--r--linux-basics/linux-processes/pres_linux-processes_en.tex74
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
new file mode 100644
index 0000000..21394ec
--- /dev/null
+++ b/images/jffs2.dia
Binary files differ
diff --git a/images/jffs2.png b/images/jffs2.png
new file mode 100644
index 0000000..63b4fe1
--- /dev/null
+++ b/images/jffs2.png
Binary files differ
diff --git a/images/ubi.dia b/images/ubi.dia
new file mode 100644
index 0000000..35eb9aa
--- /dev/null
+++ b/images/ubi.dia
Binary files differ
diff --git a/images/ubi.png b/images/ubi.png
new file mode 100644
index 0000000..0575579
--- /dev/null
+++ b/images/ubi.png
Binary files differ
diff --git a/images/ubifs.dia b/images/ubifs.dia
new file mode 100644
index 0000000..82105f2
--- /dev/null
+++ b/images/ubifs.dia
Binary files differ
diff --git a/images/ubifs.png b/images/ubifs.png
new file mode 100644
index 0000000..2b23aa9
--- /dev/null
+++ b/images/ubifs.png
Binary files differ
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, &param);
+[...]
+\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}