diff options
| author | Manuel Traut <manut@linutronix.de> | 2019-01-10 09:28:12 +0100 |
|---|---|---|
| committer | John Ogness <john.ogness@linutronix.de> | 2019-01-28 19:56:18 +0106 |
| commit | 26ab0f47bc9f52687f4790ae2de0ce0ad49716c2 (patch) | |
| tree | 4ecfb30082d5a2ca8e78ae197a7c7233b98ab97f | |
| parent | 1ef131987ce5ce27c5bfb7fbcbeead0eefd1fd82 (diff) | |
kernel-dbg: update printk slides
- add a reference to elinux.org/Debugging_by_printing
- improve explanation of /proc/sys/kernel/printk
- add a slide about rate limiting printk
- add a slide about wrappers like dev_dbg
Signed-off-by: Manuel Traut <manut@linutronix.de>
| -rw-r--r-- | kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex b/kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex index 5e9d30f..104d8c4 100644 --- a/kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex +++ b/kernel-devel/kernel-debugging/pres_kernel-debugging_en.tex @@ -69,10 +69,14 @@ stack trace is printed on detection \item[Remote debugging over FireWire] Documentation/debugging-via-ohci1394.txt \end{description} \end{frame} + \section{printk} \begin{frame}[fragile] \frametitle{printk is your friend!!} -Usage is similar to printf() in userspace. Different loglevels: +\url{https://elinux.org/Debugging\_by\_printing} +\vspace{1em} + +Usage is similar to printf() in userspace, but supports different loglevels: \small \begin{verbatim} KERN_EMERG "<0>" /* system is unusable */ @@ -86,7 +90,6 @@ KERN_DEBUG "<7>" /* debug-level messages */ \end{verbatim} \end{frame} -\section{printk} \begin{frame}[fragile] \frametitle{Example} \begin{verbatim} @@ -101,10 +104,46 @@ Loglevel in procfs: # console_loglevel, default_message_loglevel, # minimum_console_level and default_console_loglevel $ cat /proc/sys/kernel/printk -4 4 1 7 + 4 4 1 7 +# current default minimum boot-time-default \end{verbatim} \end{frame} +\begin{frame} +\frametitle{limiting printk} +\begin{description} +\item[printk\_once] no matter how often it is called, + it prints once and never again. +\item[printk\_ratelimited] prints not more than 10 times, + in every 5 seconds. +\end{description} +\end{frame} + +\begin{frame}[fragile] +\frametitle{printk wrapper} +If you have a 'struct device *dev' pointer, use +\begin{lstlisting} +dev_dbg(dev, "debug-message"); +dev_err_once(dev, "error-message"); +\end{lstlisting} +\pause + +In general it is recommended to use the pr\_ wrappers +instead of using printk directly: +\begin{lstlisting} +pr_dbg_ratelimited("debug-message"); +pr_err("error-message"); +\end{lstlisting} + +This allows dynamic printk control. (Details on next slide) +\pause + +\begin{lstlisting} +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt +\end{lstlisting} +can be used to define the printed prefix. +\end{frame} + \section{dynamic printk} \begin{frame} \frametitle{dynamic printk} @@ -119,7 +158,6 @@ format: filename:lineno [module]function flags format \item[flags] '=p' means the line is turned 'on' for printing \item[format] the format used for the debug statement \end{description} -Use pr\_debug() and dev\_dbg() in your code. see also: Documentation/dynamic-debug-howto.txt \end{frame} |
