diff options
Diffstat (limited to 'application-devel')
| -rw-r--r-- | application-devel/embedded-devel/pres_embedded-devel_de.tex | 127 |
1 files changed, 115 insertions, 12 deletions
diff --git a/application-devel/embedded-devel/pres_embedded-devel_de.tex b/application-devel/embedded-devel/pres_embedded-devel_de.tex index 95357c5..889d49a 100644 --- a/application-devel/embedded-devel/pres_embedded-devel_de.tex +++ b/application-devel/embedded-devel/pres_embedded-devel_de.tex @@ -21,9 +21,8 @@ \tableofcontents \end{frame} -\section{Toolchain} -\subsection{Der GNU Compiler} -\subsubsection{Hello world} +\section{Der GNU Compiler} +\subsection{Hello world} \begin{frame}[fragile] \frametitle{Der GNU Compiler} \begin{lstlisting}[language=c] @@ -42,7 +41,7 @@ gcc -o hello hello.c \end{lstlisting} \end{frame} -\subsubsection{Wichtige Optionen} +\subsection{Wichtige Optionen} \begin{frame}[fragile] \frametitle{Wichtige gcc Optionen} \begin{lstlisting}[language=bash] @@ -72,8 +71,112 @@ gcc -I /mypath -o hello hello.c \end{lstlisting} \end{frame} -\subsection{Die Binutils} -\subsubsection{Übersicht} +\begin{frame}[fragile] +\frametitle{Wichtige gcc Optionen} +\begin{lstlisting}[language=bash] +# Alle Warnings ausgeben +gcc -Wall -o hello hello.c + +# Warnings als Fehler behandeln +gcc -Werror -o hello hello.c +\end{lstlisting} +\end{frame} + +\begin{frame}[containsverbatim] +\frametitle{GCC: Nützliches} +\begin{lstlisting}[language=bash] +# Vordefinierte / Interne Makros ausgeben +$ gcc -E -dM - < /dev/null | cut -c 9- | sort +[...] +__SIZEOF_DOUBLE__ 8 +__SIZEOF_FLOAT__ 4 +__SIZEOF_INT__ 4 +__SIZEOF_LONG__ 8 +[...] +\end{lstlisting} +\end{frame} + +\begin{frame}[containsverbatim] +\frametitle{GCC: Nützliches} +\begin{lstlisting}[language=bash] +# Nur Pre-Prozessor ausfuehren +$ gcc -C -E hello.c -o hello_pre + +# Woher kommt welches Symbol? +$ gcc -Wl,-y,printf hello.c +/lib/libc.so.6: definition of printf +\end{lstlisting} +Quelle und weitere nuetzliche Tipps: http://elinux.org/GCC\_Tips +\end{frame} + +\section{Der Dynamic Loader} +\begin{frame} +\frametitle{Der Dynamic Loader: ld-linux.so} +\begin{alertblock}{Was ist der Dynamic Loader?} +Der Dynamic Loader: ld-linux.so lädt die dynamischen Bibliotheken, die von einem Programm +benötigt werden. Er ist Bestandteil der C Bibliothek. +\end{alertblock} +\end{frame} + +\begin{frame}[containsverbatim] +\frametitle{Der Dynamic Loader: ld-linux.so} +\begin{lstlisting}[language=bash] +# Entweder +./hello + +# oder +/lib/ld-linux-x86-64.so.2 ./hello +\end{lstlisting} +\end{frame} + +\begin{frame}[containsverbatim] +\frametitle{Der Dynamic Loader: Umgebungsvariablen} +\begin{tabular}{|l|p{5cm}|} +\hline +\textbf{Umgebungsvariable} & \textbf{Abkürzung} \\ +\hline +LD\_LIBRARY\_PATH & Suchpfad für Bibliotheken \\ +\hline +LD\_PRELOAD & Liste von Bibliotheken, die vor allen anderen zu laden sind \\ +\hline +LD\_DEBUG & Debug Ausgaben \\ +\hline +\end{tabular} +\end{frame} + +\begin{frame}[containsverbatim] +\frametitle{Der Dynamic Loader: Umgebungsvariablen} +\begin{lstlisting}[basicstyle=\ttfamily\fontsize{9}{9}\selectfont] +$ LD_DEBUG=help ./hello +Valid options for the LD_DEBUG environment +variable are: + + libs display library search paths + reloc display relocation processing + files display progress for input file + symbols display symbol table processing + bindings display information about symbol binding + versions display version dependencies + all all previous options combined + statistics display relocation statistics + unused determined unused DSOs + help display this help message and exit +\end{lstlisting} +\end{frame} + +\begin{frame} +\frametitle{Der Dynamic Loader: Suchreihenfolge} +\begin{enumerate} +\item DT\_RPATH dynamic section (ELF) +\item LD\_LIBRARY\_PATH +\item DT\_RUNPATH dynamic section (ELF) +\item ld.so.cache +\item /lib bzw. /usr/lib +\end{enumerate} +\end{frame} + +\section{Die Binutils} +\subsection{Übersicht} \begin{frame} \frametitle{Die Binutils} Eine Sammlung von Programmen zum Erstellen / Bearbeiten von Binaries. @@ -105,7 +208,7 @@ Die wichtigsten Tools sind: \end{itemize} \end{frame} -\subsubsection{objdump} +\subsection{objdump} \begin{frame}[containsverbatim] \frametitle{Untersuchen von Binaries mit Objdump} \begin{lstlisting}[language=bash] @@ -154,7 +257,7 @@ jan@hopfropf:~$ objdump -x /bin/ls | grep NEEDED \end{lstlisting} \end{frame} -\subsubsection{objcopy} +\subsection{objcopy} \begin{frame}[fragile] \frametitle{Binaries bearbeiten mit objcopy} \begin{lstlisting}[language=bash] @@ -165,7 +268,7 @@ objcopy -I srec -O elf64-x86-64 hello.srec hello \end{lstlisting} \end{frame} -\subsubsection{addr2line} +\subsection{addr2line} \begin{frame}[containsverbatim] \frametitle{Adressen zuordnen mit addr2line} \begin{lstlisting}[language=bash] @@ -184,8 +287,8 @@ $ addr2line -e hello 40050c \end{lstlisting} \end{frame} -\subsection{Buildprozess automatisieren (GNU make)} -\subsubsection{Übersicht} +\section{Buildprozess automatisieren} +\subsection{Übersicht} \begin{frame} \frametitle{GNU make} \begin{alertblock}{Was ist GNU make?} @@ -193,7 +296,7 @@ GNU make kontrolliert und automatisiert Buildprozesse. \end{alertblock} \end{frame} -\subsubsection{Anwendungsbeispiele} +\subsection{Anwendungsbeispiele} \begin{frame}[containsverbatim] \frametitle{Einfaches Beispiel} \begin{lstlisting}[language=make,showtabs=true,tabsize=4,tab=\rightarrowfill] |
