[bootlin/training-materials updates] master: debugging: kgdb: add pitfalls and kernel config option (be9521ce)
Clément Léger
clement.leger at bootlin.com
Fri Nov 25 10:20:15 CET 2022
Repository : https://github.com/bootlin/training-materials
On branch : master
Link : https://github.com/bootlin/training-materials/commit/be9521cebe37f91720033a05d6a01677316fae39
>---------------------------------------------------------------
commit be9521cebe37f91720033a05d6a01677316fae39
Author: Clément Léger <clement.leger at bootlin.com>
Date: Fri Nov 25 10:20:15 2022 +0100
debugging: kgdb: add pitfalls and kernel config option
Signed-off-by: Clément Léger <clement.leger at bootlin.com>
>---------------------------------------------------------------
be9521cebe37f91720033a05d6a01677316fae39
common/kgdb.tex | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 50 insertions(+), 7 deletions(-)
diff --git a/common/kgdb.tex b/common/kgdb.tex
index 14faf4e0..f56ac35e 100644
--- a/common/kgdb.tex
+++ b/common/kgdb.tex
@@ -10,22 +10,65 @@
\item Feature supported for the most popular CPU architectures
\item \kconfig{CONFIG_GDB_SCRIPTS} allows to build GDB python scripts that are
provided by the kernel.
- \item {\em Note: to avoid confusing gdb with randomized kernel addresses, make
- sure \em{kaslr} is disabled using \code{nokaslr} command line
- parameter.}
\begin{itemize}
\item See \kdochtml{dev-tools/gdb-kernel-debugging} for more information
\end{itemize}
\end{itemize}
\end{frame}
+\ifthenelse{\equal{\training}{debugging}}{
+
+\begin{frame}
+ \frametitle{kgdb kernel config}
+ \begin{itemize}
+ \item \kconfigval{CONFIG_DEBUG_KERNEL}{y} to make KGDB support visible
+ \item \kconfigval{CONFIG_KGDB}{y} to enabled KGDB support
+ \item \kconfigval{CONFIG_DEBUG_INFO}{y} to enabled KGDB support
+ \item \kconfigval{CONFIG_FRAME_POINTER}{y} to have more reliable
+ stacktraces
+ \item \kconfigval{CONFIG_KGDB_SERIAL_CONSOLE}{y} to enabled KGDB support
+ over serial
+ \item \kconfigval{CONFIG_GDB_SCRIPTS}{y} to enabled kernel GDB python
+ scripts
+ \item \kconfigval{CONFIG_RANDOMIZE_BASE}{n} and
+ \kconfigval{CONFIG_WATCHDOG}{n} to disable KALSR and watchdog
+ \item \kconfigval{CONFIG_MAGIC_SYSRQ} to enable Magic SysReq support
+ \item \kconfigval{CONFIG_STRICT_KERNEL_RWX}{n} to disable memory protection
+ on code section, thus allowing to put breakpoints
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{kgdb pitfalls}
+ \begin{itemize}
+ \item KASLR should be disabled to avoid confusing gdb with randomized kernel
+ addresses
+ \begin{itemize}
+ \item Disable \em{kaslr} mode using \code{nokaslr} command line parameter
+ if enabled in your kernel.
+ \end{itemize}
+ \item Disable the platform watchdog to avoid rebooting while debugging.
+ \begin{itemize}
+ \item When interrupted by KGDB, all interrupts are disabled thus, the
+ watchdog is not serviced.
+ \item Sometimes, watchdog is enabled by upper boot levels. Make sure to
+ disabled the watchdog there too.
+ \end{itemize}
+ \item Can not interrupt kernel execution from gdb using \code{interrupt}
+ command or \code{Ctrl + C}.
+ \item Not possible to break everywhere (see \kconfig{CONFIG_KGDB_HONOUR_BLOCKLIST}).
+ \item Need a console driver with polling support.
+ \item Some architecture lacks functionalities (No watchpoints on arm32 for
+ instance).
+ \end{itemize}
+\end{frame}
+}{}
+
\begin{frame}
\frametitle{Using kgdb (1/2)}
\begin{itemize}
\item Details available in the kernel documentation:
\kdochtml{dev-tools/kgdb}
- \item Recommended to turn on \kconfig{CONFIG_FRAME_POINTER} to aid in
- producing more reliable stack backtraces in \code{gdb}.
\item You must include a kgdb I/O driver. One of them is \code{kgdb} over
serial console (\code{kgdboc}: \code{kgdb} over console, enabled by
\kconfig{CONFIG_KGDB_SERIAL_CONSOLE})
@@ -37,6 +80,8 @@
\item Or at runtime using sysfs:
\begin{itemize}
\item \code{echo ttyS0 > /sys/module/kgdboc/parameters/kgdboc}
+ \item If the console does not have polling support, this command will yield
+ an error.
\end{itemize}
\end{itemize}
\end{frame}
@@ -57,7 +102,5 @@
\end{itemize}
\item Once connected, you can debug a kernel the way you would debug
an application program.
- \item {\em Note: it might be needed to disable the platform watchdog to avoid
- rebooting while debugging.}
\end{itemize}
\end{frame}
\ No newline at end of file
More information about the training-materials-updates
mailing list