summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Altenberg <jan@bender.lan>2010-04-29 10:10:26 +0200
committerJan Altenberg <jan@bender.lan>2010-04-29 10:10:26 +0200
commit76d0a001d0acc3a414f3626c4364af048beac9a7 (patch)
tree0993eb41d87f2b92dfea73d05fd24dfb6a303a8a
parent600b08dbd313480ec9bb0408288ae2d7dc314675 (diff)
Added some contents to the Toolchain / Embedded-Devel chapter:
- gcc options: Wall, Werror - gcc: useful options - ld-linux.so: Search order, environment variables
-rw-r--r--application-devel/embedded-devel/pres_embedded-devel_de.tex127
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]