[FE training-materials-updates] sysdev-application-debugging: Use a Linaro toolchain

Gregory Clement gregory.clement at free-electrons.com
Fri Sep 2 17:58:04 CEST 2016


Repository : git://git.free-electrons.com/training-materials.git
On branch  : master
Link       : http://git.free-electrons.com/training-materials/commit/?id=69256eef520b087eace25249761ad8b0e581edfb

>---------------------------------------------------------------

commit 69256eef520b087eace25249761ad8b0e581edfb
Author: Gregory CLEMENT <gregory.clement at free-electrons.com>
Date:   Fri Sep 2 17:58:04 2016 +0200

    sysdev-application-debugging: Use a Linaro toolchain
    
    gdb is buggy when built with the toolchain created by crosstool-ng: it
    uses a too old version of uClibc.
    
    An other solution could also be to switch the the github master of
    crosstool-ng which uses a more recent version of uClibc (uClibc-ng
    actually)
    
    Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>


>---------------------------------------------------------------

69256eef520b087eace25249761ad8b0e581edfb
 .../sysdev-application-debugging.tex               | 49 ++++++++++++++++------
 1 file changed, 37 insertions(+), 12 deletions(-)

diff --git a/labs/sysdev-application-debugging/sysdev-application-debugging.tex b/labs/sysdev-application-debugging/sysdev-application-debugging.tex
index d79f4c9..0cd7067 100644
--- a/labs/sysdev-application-debugging/sysdev-application-debugging.tex
+++ b/labs/sysdev-application-debugging/sysdev-application-debugging.tex
@@ -4,19 +4,51 @@
 
 \section{Setup}
 
-Go back to the \code{$HOME/embedded-linux-labs/buildroot} directory.
+Go to the \code{$HOME/embedded-linux-labs/debugging} directory.
+Create an \code{nfsroot} directory.
 
 \section{Debugging setup}
 
-Boot your ARM board over NFS on the filesystem produced in the {\em
-  Using a build system, example with Buildroot} lab, with the same kernel.
+Reuse the Buildroot 2016.02 sources:
+\begin{verbatim}
+cp -a $HOME/embedded-linux-labs/buildroot/buildroot-2016.02 .
+\end{verbatim}
+Instead of using the toolchain we compiled, we are going to use an
+external toolchain from Linaro. Indeed gdb is buggy when built with
+the toolchain we created: it uses a too old version of uClibc.
+
+From the directory
+\code{$HOME/embedded-linux-labs/debugging/buildroot-2016.02},
+configure buildroot with the following modification:
+
+\begin{itemize}
+\item In \code{Toolchain}:
+   \begin{itemize}
+   \item \code{Toolchain type}: \code{External toolchain}
+   \item \code{Toolchain}: \code{Linaro ARM 2015.11}
+   \item \code{Toolchain origin}: \code{Toolchain to be downloaded and installed}
+   \end{itemize}
+\end{itemize}
+
+Now, build your root filesystem.
+
+Go back to the \code{$HOME/embedded-linux-labs/debugging} directory
+and extract the \code{buildroot-2016.02/output/images/rootfs.tar}
+archive in the \code{nfsroot} directory.
+
+Update the \code{/etc/export} file and restart the
+\code{nfs-kernel-server}.
+
+Boot your ARM board over NFS on the filesystem produced with the same
+kernel.
 
 \section{Setting up gdbserver, strace and ltrace}
 
 \code{gdbserver}, \code{strace} and \code{ltrace} have already been
 compiled for your target architecture as part of the cross-compiling
 toolchain. \code{gdbserver} has already been copied in your target
-filesystem thanks to the \code{Copy gdb server to the Target} Buildroot option.
+filesystem thanks to the \code{Copy gdb server to the Target}
+Buildroot option.
 
 So you just need to find the \code{strace} and \code{ltrace} in
 your toolchain installation directory and copy them into your
@@ -93,7 +125,7 @@ your workstation. This is done by setting the \code{gdb} \code{sysroot}
 variable (on one line):
 
 \begin{verbatim}
-(gdb) set sysroot /home/<user>/embedded-linux-labs/buildroot/
+(gdb) set sysroot /home/<user>/embedded-linux-labs/debugging/
 buildroot-XXXX.YY/output/staging
 \end{verbatim}
 
@@ -102,13 +134,6 @@ And tell \code{gdb} to connect to the remote system:
 (gdb) target remote <target-ip-address>:2345
 \end{verbatim}
 
-If at this point you received timeout or packet error messages and if
-the gdbserver is stuck, then you will have to remove
-\code{/lib/libthread_db.so.1} from the target. This library allows
-multithread debugging but this library is currently buggy for our
-configuration. Fortunately we don't have to debug a multithread
-application.
-
 Then, use \code{gdb} as usual to set breakpoints, look at the source
 code, run the application step by step, etc. Graphical versions of
 \code{gdb}, such as \code{ddd} can also be used in the same way.




More information about the training-materials-updates mailing list