[BL training-materials-updates] Kernel debug lab improvements

Michael Opdenacker michael.opdenacker at bootlin.com
Mon Dec 3 18:22:15 CET 2018

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


commit eefb09a21ca32cf3584594afc30175c61fede539
Author: Michael Opdenacker <michael.opdenacker at bootlin.com>
Date:   Mon Dec 3 18:22:15 2018 +0100

    Kernel debug lab improvements
    - Compile the kernel only once. Compiling the kernel another
      time with CONFIG_DEBUG_INFO adds a full rebuild to the lab
      time (10 minutes with Bootlin training laptops)
    - No longer need to disable the ARM_UNWIND functions.
      Tested that at least with Linux 4.19 and the Ubuntu ARM toolchain,
      a useful backtrace was generated.
    Signed-off-by: Michael Opdenacker <michael.opdenacker at bootlin.com>


 labs/kernel-debugging/kernel-debugging.tex | 29 ++++++++++++++++++++++-------
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/labs/kernel-debugging/kernel-debugging.tex b/labs/kernel-debugging/kernel-debugging.tex
index 111e592..97751e3 100644
--- a/labs/kernel-debugging/kernel-debugging.tex
+++ b/labs/kernel-debugging/kernel-debugging.tex
@@ -16,8 +16,20 @@ that you added? Your kernel probably does not have
 \code{CONFIG_DYNAMIC_DEBUG} set and your driver is not compiled with
 \code{DEBUG} defined., so you shouldn't see any message.
-Now, recompile your kernel with \code{CONFIG_DYNAMIC_DEBUG} and reboot. The
-dynamic debug feature can be configured using \code{debugfs}, so you'll have
+Now, recompile your kernel with the following options:
+\item \code{CONFIG_DYNAMIC_DEBUG}: this will allow you to see
+  debugging messages.
+\item \code{CONFIG_DEBUG_INFO}: this option will make it
+  possible to see source code in disassembled kernel code.
+  We will need it in a later part of this lab, but enabling
+  it now will allow to avoid recompiling the whole kernel again.
+Once this is done, boot your updated kernel.
+The dynamic debug feature can be configured using \code{debugfs}, so you'll have
 to mount the \code{debugfs} filesystem first. Then, after reading the dynamic
 debug documentation in the kernel sources, do the following things:
@@ -67,10 +79,6 @@ Make sure your kernel is built with the following options:
-\item The \code{CONFIG_DEBUG_INFO} configuration option,
-  (\code{Kernel Hacking} section) which makes it possible to see source
-  code in the disassembled kernel.
 \item The \code{CONFIG_ARM_UNWIND} configuration option
   (\code{Kernel Hacking} section) disabled. This option enables a
   new mechanism to handle stack backtraces, but this new mechanism is
@@ -98,7 +106,14 @@ probably be enough to help you understand and fix the issue.
 \section{Further analysis of the problem}
 If the function source code is not enough, then you can look at the
-disassembled version of the function, either using:
+disassembled version of the function.
+That's where we need a kernel compiled with \code{CONFIG_DEBUG_INFO}
+as we did at the beginning of this lab. This way, the kernel is
+compiled with \code{$(CROSSCOMPILE)gcc -g}, which keeps the source
+code inside the binaries.
+You can use either;
 cd ~/linux-kernel-labs/src/linux/

More information about the training-materials-updates mailing list