[bootlin/training-materials updates] master: Use \kconfig and \kconfigval Elixir macros (099b9102)
Michael Opdenacker
michael.opdenacker at bootlin.com
Wed May 27 11:36:40 CEST 2020
Repository : https://github.com/bootlin/training-materials
On branch : master
Link : https://github.com/bootlin/training-materials/commit/099b9102bb33c48e4ba4259ff7f1adf35d8d7caa
>---------------------------------------------------------------
commit 099b9102bb33c48e4ba4259ff7f1adf35d8d7caa
Author: Michael Opdenacker <michael.opdenacker at bootlin.com>
Date: Wed May 27 11:36:40 2020 +0200
Use \kconfig and \kconfigval Elixir macros
- Allows to provide links to the definition of kernel parameters
Signed-off-by: Michael Opdenacker <michael.opdenacker at bootlin.com>
>---------------------------------------------------------------
099b9102bb33c48e4ba4259ff7f1adf35d8d7caa
common/common.sty | 1 +
.../boot-time-build-kernel-and-start-system.tex | 38 +++++++++++-----------
.../boot-time-filesystem-optimizations.tex | 2 +-
labs/boot-time-kernel/boot-time-kernel.tex | 12 +++----
labs/buildroot-basic/buildroot-basic.tex | 2 +-
.../buildroot-new-packages.tex | 2 +-
labs/buildroot-rootfs/buildroot-rootfs.tex | 6 ++--
.../kernel-compiling-and-nfs-booting.tex | 16 ++++-----
labs/kernel-debugging/kernel-debugging.tex | 8 ++---
.../kernel-i2c-input-interface.tex | 6 ++--
.../sysdev-flash-filesystems.tex | 2 +-
labs/sysdev-real-time/sysdev-real-time.tex | 14 ++++----
labs/sysdev-thirdparty/sysdev-thirdparty.tex | 4 +--
.../boot-time-application.tex | 6 ++--
.../boot-time-bootloader/boot-time-bootloader.tex | 4 +--
.../boot-time-filesystems.tex | 8 ++---
.../boot-time-init-scripts.tex | 2 +-
.../boot-time-init-scripts3.tex | 2 +-
slides/boot-time-kernel/boot-time-kernel.tex | 20 ++++++------
slides/boot-time-measuring/boot-time-measuring.tex | 2 +-
slides/initramfs/initramfs.tex | 4 +--
.../kernel-driver-development-debugging.tex | 14 ++++----
.../kernel-driver-development-io-memory.tex | 2 +-
.../kernel-driver-development-memory.tex | 4 +--
slides/kernel-frameworks2/kernel-frameworks2.tex | 2 +-
slides/kernel-input/kernel-input.tex | 2 +-
.../sysdev-flash-filesystems.tex | 4 +--
slides/sysdev-realtime/sysdev-realtime.tex | 16 ++++-----
.../sysdev-root-filesystem-principles.tex | 6 ++--
29 files changed, 106 insertions(+), 105 deletions(-)
diff --git a/common/common.sty b/common/common.sty
index c32452a3..87db68e1 100644
--- a/common/common.sty
+++ b/common/common.sty
@@ -15,6 +15,7 @@
\newcommand\kreldir[2]{\href{https://elixir.bootlin.com/linux/latest/source/#1/#2}{\code{#2/}}} % For relative directory paths
\newcommand\ksubarch[1]{\href{https://elixir.bootlin.com/linux/latest/source/arch/#1/}{\code{#1}}}
\newcommand\kconfig[1]{\href{https://elixir.bootlin.com/linux/latest/K/ident/#1}{\code{#1}}}
+\newcommand\kconfigval[2]{\href{https://elixir.bootlin.com/linux/latest/K/ident/#1}{\code{#1=#2}}}
\newcommand\kerneldoctext[1]{\href{https://kernel.org/doc/Documentation/#1}{\code{Documentation/#1}}}
\newcommand\kerneldochtml[1]{\href{https://www.kernel.org/doc/html/latest/#1.html}{\code{#1}}}
\newcommand\kerneldochtmlsection[3]{\href{https://www.kernel.org/doc/html/latest/#1/index.html\##2}{\code{#1} (section {\em #3})}}
diff --git a/labs/boot-time-build-kernel-and-start-system/boot-time-build-kernel-and-start-system.tex b/labs/boot-time-build-kernel-and-start-system/boot-time-build-kernel-and-start-system.tex
index 9b28dd4f..89258a73 100644
--- a/labs/boot-time-build-kernel-and-start-system/boot-time-build-kernel-and-start-system.tex
+++ b/labs/boot-time-build-kernel-and-start-system/boot-time-build-kernel-and-start-system.tex
@@ -105,33 +105,33 @@ when you search.
To enable support for the framebuffer and the PWM backlight:
\begin{itemize}
-\item \code{CONFIG_PWM_TIEHRPWM=y}
-\item \code{CONFIG_FB_SIMPLE=y}
-\item \code{CONFIG_BACKLIGHT_PWM=y}
-\item \code{CONFIG_DRM=y}
-\item \code{CONFIG_DRM_TILCDC=y}
-\item \code{CONFIG_DRM_TI_TFP410=y}
+\item \kconfigval{CONFIG_PWM_TIEHRPWM}{y}
+\item \kconfigval{CONFIG_FB_SIMPLE}{y}
+\item \kconfigval{CONFIG_BACKLIGHT_PWM}{y}
+\item \kconfigval{CONFIG_DRM}{y}
+\item \kconfigval{CONFIG_DRM_TILCDC}{y}
+\item \kconfigval{CONFIG_DRM_TI_TFP410}{y}
\end{itemize}
For USB support:
\begin{itemize}
-\item \code{CONFIG_USB=y}
-\item \code{CONFIG_USB_MUSB_HDRC=y}
-\item \code{CONFIG_USB_MUSB_DSPS=y}
-\item \code{CONFIG_MUSB_PIO_ONLY=y}
-\item \code{CONFIG_USB_GADGET=y}
-\item \code{CONFIG_NOP_USB_XCEIV=y}
-\item \code{CONFIG_AM335X_PHY_USB=y}
-\item \code{CONFIG_USB_GPIO_VBUS=y}
-\item \code{CONFIG_USB_GADGET_VBUS_DRAW=500}
-\item \code{CONFIG_USB_CONFIGFS_F_UVC=y}
+\item \kconfigval{CONFIG_USB}{y}
+\item \kconfigval{CONFIG_USB_MUSB_HDRC}{y}
+\item \kconfigval{CONFIG_USB_MUSB_DSPS}{y}
+\item \kconfigval{CONFIG_MUSB_PIO_ONLY}{y}
+\item \kconfigval{CONFIG_USB_GADGET}{y}
+\item \kconfigval{CONFIG_NOP_USB_XCEIV}{y}
+\item \kconfigval{CONFIG_AM335X_PHY_USB}{y}
+\item \kconfigval{CONFIG_USB_GPIO_VBUS}{y}
+\item \kconfigval{CONFIG_USB_GADGET_VBUS_DRAW}{500}
+\item \kconfigval{CONFIG_USB_CONFIGFS_F_UVC}{y}
\end{itemize}
For the webcam
\begin{itemize}
-\item \code{CONFIG_MEDIA_SUPPORT=y}
-\item \code{CONFIG_MEDIA_USB_SUPPORT=y}
-\item \code{CONFIG_USB_VIDEO_CLASS=y}
+\item \kconfigval{CONFIG_MEDIA_SUPPORT}{y}
+\item \kconfigval{CONFIG_MEDIA_USB_SUPPORT}{y}
+\item \kconfigval{CONFIG_USB_VIDEO_CLASS}{y}
\end{itemize}
For your convenience, of if you screw up your settings in a later lab,
diff --git a/labs/boot-time-filesystem-optimizations/boot-time-filesystem-optimizations.tex b/labs/boot-time-filesystem-optimizations/boot-time-filesystem-optimizations.tex
index 0922bc5c..7af12f2d 100644
--- a/labs/boot-time-filesystem-optimizations/boot-time-filesystem-optimizations.tex
+++ b/labs/boot-time-filesystem-optimizations/boot-time-filesystem-optimizations.tex
@@ -106,7 +106,7 @@ configuration interface:
\item Fill \code{Initramfs source file(s)} with
\code{../../rootfs/rootfs} (or the correct path to the directory
containing your root filesystem)
- \item Make sure you set \code{CONFIG_INITRAMFS_COMPRESSION_NONE=y}
+ \item Make sure you set \kconfigval{CONFIG_INITRAMFS_COMPRESSION_NONE}{y}
to avoid wasting space compressing the initramfs twice.
\end{itemize}
\item Disable \code{Enable the block layer}
diff --git a/labs/boot-time-kernel/boot-time-kernel.tex b/labs/boot-time-kernel/boot-time-kernel.tex
index a2eedcf8..ca578534 100644
--- a/labs/boot-time-kernel/boot-time-kernel.tex
+++ b/labs/boot-time-kernel/boot-time-kernel.tex
@@ -7,9 +7,9 @@ We are going to use the kernel \code{initcall_debug} functionality.
Our default kernel already has the configuration settings that we need:
\begin{itemize}
-\item \code{CONFIG_PRINTK_TIME=y}, to add a timestamp to each kernel
+\item \kconfigval{CONFIG_PRINTK_TIME}{y}, to add a timestamp to each kernel
message.
-\item \code{CONFIG_LOG_BUF_SHIFT=16}, to have a big enough kernel ring buffer.
+\item \kconfigval{CONFIG_LOG_BUF_SHIFT}{16}, to have a big enough kernel ring buffer.
\end{itemize}
That's not sufficient. We also need the output of the \code{dmesg}
@@ -108,7 +108,7 @@ Do this {\bf very progressively}. If you go too fast, you'll end up with a
kernel that doesn't boot any more, but you won't be able to tell which
parameter should have been kept.
-Also, don't disable \code{CONFIG_PRINTK} too early
+Also, don't disable \kconfig{CONFIG_PRINTK} too early
as you would lose all the kernel messages in the console.
Also, for the moment, don't touch the options related to size and
@@ -116,13 +116,13 @@ compression, including compiling the kernel with {\em Thumb2}, as the
impact of each option could depend on the size of the kernel.
Make sure you go through all the possibilities covered in the slides, in
-particular to enable \code{CONFIG_EMBEDDED} to allow to unselect further
+particular to enable \kconfig{CONFIG_EMBEDDED} to allow to unselect further
features that should be present on a general purpose
system\footnote{Here we have a very specific system and we don't have
to support programs that could be added in the future and could need
more kernel features}.
-At the end, you can disable \code{CONFIG_PRINTK}, and observe your
+At the end, you can disable \kconfig{CONFIG_PRINTK}, and observe your
total savings in terms of kernel size and boot time.
Last but not least, try to find other ways of reducing the kernel size.
@@ -147,7 +147,7 @@ First, measure and write down your kernel size and the total boot time:
\hline
\end{tabular}
-Now, compile your kernel with \code{CONFIG_ARM_THUMB}. Before you do
+Now, compile your kernel with \kconfig{CONFIG_ARM_THUMB}. Before you do
this, you could make a backup copy of your kernel source directory with
\code{cp -al}, as a full rebuild of the kernel will be needed, and we
may want to roll back later. Fortunately, thanks to our feature
diff --git a/labs/buildroot-basic/buildroot-basic.tex b/labs/buildroot-basic/buildroot-basic.tex
index 3421a8ce..53f1d46a 100644
--- a/labs/buildroot-basic/buildroot-basic.tex
+++ b/labs/buildroot-basic/buildroot-basic.tex
@@ -167,7 +167,7 @@ Now, let's do the configuration:
OMAP2, OMAP3, OMAP4, etc. So the appropriate {\em defconfig} is
named \code{omap2plus_defconfig}. You can open up this file in the
Linux kernel Git repository viewer, and see it contains the line
- \code{CONFIG_SOC_AM33XX=y}, which is a good indication that it has
+ \kconfigval{CONFIG_SOC_AM33XX}{y}, which is a good indication that it has
the support for the processor used in the BeagleBone Black. Now
that we have identified the {\em defconfig} name, enter
\code{omap2plus} in the \code{Defconfig name} option.
diff --git a/labs/buildroot-new-packages/buildroot-new-packages.tex b/labs/buildroot-new-packages/buildroot-new-packages.tex
index 3a096faf..b5e50408 100644
--- a/labs/buildroot-new-packages/buildroot-new-packages.tex
+++ b/labs/buildroot-new-packages/buildroot-new-packages.tex
@@ -163,7 +163,7 @@ Buildroot, and before it is built. Rebuild once again the
However, this patch relies on the Linux kernel {\em joystick
interface}, that we need to enable. Go to the Linux kernel
configuration using \code{make linux-menuconfig}, and enable
-\code{CONFIG_INPUT_JOYDEV}. Exit, and make sure to save your kernel
+\kconfig{CONFIG_INPUT_JOYDEV}. Exit, and make sure to save your kernel
configuration safely using \code{make linux-update-defconfig}. Restart
the overall build by running \code{make}.
diff --git a/labs/buildroot-rootfs/buildroot-rootfs.tex b/labs/buildroot-rootfs/buildroot-rootfs.tex
index 9d605b20..5747cff1 100644
--- a/labs/buildroot-rootfs/buildroot-rootfs.tex
+++ b/labs/buildroot-rootfs/buildroot-rootfs.tex
@@ -251,12 +251,12 @@ This will:
\end{itemize}
Once in the kernel \code{menuconfig}, search for the option
-\code{CONFIG_JOYSTICK_WIICHUCK} by using the search engine tool
+\kconfig{CONFIG_JOYSTICK_WIICHUCK} by using the search engine tool
accessible by typing \code{/}. Make sure to enable the {\em Nintendo
Wiimote Extension connector on i2c bus} option using a \code{*} so
that the driver is part of the kernel image itself (enabling with
\code{M} would lead the driver to be compiled as a module). Also, make
-sure the \code{CONFIG_INPUT_EVDEV} option is enabled with \code{*} (by
+sure the \kconfig{CONFIG_INPUT_EVDEV} option is enabled with \code{*} (by
default it is enabled as a module).
You can now exit the kernel \code{menuconfig}, and restart the build
@@ -294,7 +294,7 @@ Then you can actually save your kernel configuration to a custom file:
configuration file in
\code{board/felabs/beagleboneblack/linux.config}. It will be a {\em
minimal} configuration file (i.e a {\em defconfig}). In this file,
- verify that the option \code{CONFIG_JOYSTICK_WIICHUCK} is properly
+ verify that the option \kconfig{CONFIG_JOYSTICK_WIICHUCK} is properly
set to \code{y}.
\end{enumerate}
diff --git a/labs/kernel-compiling-and-nfs-booting/kernel-compiling-and-nfs-booting.tex b/labs/kernel-compiling-and-nfs-booting/kernel-compiling-and-nfs-booting.tex
index 844c3591..3a3e7981 100644
--- a/labs/kernel-compiling-and-nfs-booting/kernel-compiling-and-nfs-booting.tex
+++ b/labs/kernel-compiling-and-nfs-booting/kernel-compiling-and-nfs-booting.tex
@@ -71,20 +71,20 @@ use your cross-compiler.
Add the below options to support networking over USB device:
\begin{itemize}
- \item \code{CONFIG_USB_GADGET=y}
- \item \code{CONFIG_USB_MUSB_HDRC=y} {\em Driver for the USB OTG
+ \item \kconfigval{CONFIG_USB_GADGET}{y}
+ \item \kconfigval{CONFIG_USB_MUSB_HDRC}{y} {\em Driver for the USB OTG
controller}
- \item \code{CONFIG_USB_MUSB_GADGET=y} {\em Use the USB OTG controller
+ \item \kconfigval{CONFIG_USB_MUSB_GADGET}{y} {\em Use the USB OTG controller
in device (gadget) mode}
- \item \code{CONFIG_USB_MUSB_DSPS}=y
- \item Check the dependencies of \code{CONFIG_AM335X_PHY_USB}
- and find the way to set \code{CONFIG_AM335X_PHY_USB=y}
+ \item \kconfigval{CONFIG_USB_MUSB_DSPS}{y}
+ \item Check the dependencies of \kconfig{CONFIG_AM335X_PHY_USB}
+ and find the way to set \kconfigval{CONFIG_AM335X_PHY_USB}{y}
\item Find the "USB Gadget precomposed configurations" menu
and set it to {\em static} instead of {\em module}
- so that \code{CONFIG_USB_ETH=y}
+ so that \kconfigval{CONFIG_USB_ETH}{y}
\end{itemize}
-Make sure that this configuration has \code{CONFIG_ROOT_NFS=y} (support
+Make sure that this configuration has \code{CONFIG_ROOT_NFS}{y} (support
booting on an NFS exported root directory).
\section{Kernel compiling}
diff --git a/labs/kernel-debugging/kernel-debugging.tex b/labs/kernel-debugging/kernel-debugging.tex
index 222a4ef8..cf6e3217 100644
--- a/labs/kernel-debugging/kernel-debugging.tex
+++ b/labs/kernel-debugging/kernel-debugging.tex
@@ -13,15 +13,15 @@ each character being received.
Check what happens with your module. Do you see the debugging messages
that you added? Your kernel probably does not have
-\code{CONFIG_DYNAMIC_DEBUG} set and your driver is not compiled with
+\kconfig{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 the following options:
\begin{itemize}
-\item \code{CONFIG_DYNAMIC_DEBUG}: this will allow you to see
+\item \kconfig{CONFIG_DYNAMIC_DEBUG}: this will allow you to see
debugging messages.
-\item \code{CONFIG_DEBUG_INFO}: this option will make it
+\item \kconfig{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.
@@ -102,7 +102,7 @@ If you look again, the report tells you at what offset in the function
this happens. Let's disassemble the code for this function to
understand exactly where the issue happened.
-That's where we need a kernel compiled with \code{CONFIG_DEBUG_INFO}
+That's where we need a kernel compiled with \kconfig{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.
diff --git a/labs/kernel-i2c-input-interface/kernel-i2c-input-interface.tex b/labs/kernel-i2c-input-interface/kernel-i2c-input-interface.tex
index 95591f0e..ba9ddf5e 100644
--- a/labs/kernel-i2c-input-interface/kernel-i2c-input-interface.tex
+++ b/labs/kernel-i2c-input-interface/kernel-i2c-input-interface.tex
@@ -21,8 +21,8 @@ and detect changes is to regularly poll its registers, using the input
polling API described in the lectures.
Rebuild your kernel with static support for polled input device
-(\code{CONFIG_INPUT_POLLDEV=y}) and for event interface
-(\code{CONFIG_INPUT_EVDEV}) support. With the default configuration,
+(\kconfigval{CONFIG_INPUT_POLLDEV}{y}) and for event interface
+(\kconfig{CONFIG_INPUT_EVDEV}) support. With the default configuration,
these features are available as modules, which is less convenient.
Update and reboot your kernel.
@@ -251,7 +251,7 @@ when running \code{nInvaders}, issue first the
\subsubsection{Recompile your kernel}
Recompile your kernel with support for the joystick interface
-(\code{CONFIG_INPUT_JOYDEV}).
+(\kconfig{CONFIG_INPUT_JOYDEV}).
Reboot to the new kernel.
diff --git a/labs/sysdev-flash-filesystems/sysdev-flash-filesystems.tex b/labs/sysdev-flash-filesystems/sysdev-flash-filesystems.tex
index 2c84eb30..56343b37 100644
--- a/labs/sysdev-flash-filesystems/sysdev-flash-filesystems.tex
+++ b/labs/sysdev-flash-filesystems/sysdev-flash-filesystems.tex
@@ -41,7 +41,7 @@ Which gives the following layout:
First, make sure your kernel has support for UBI and UBIFS, and also
the option allowing us to pass the partition table through the command
line:
-(\code{CONFIG_MTD_CMDLINE_PARTS}).
+(\kconfig{CONFIG_MTD_CMDLINE_PARTS}).
Recompile your kernel if needed. We will update your kernel image on flash
in the next section.
diff --git a/labs/sysdev-real-time/sysdev-real-time.tex b/labs/sysdev-real-time/sysdev-real-time.tex
index a8eeee2b..4f80c64e 100644
--- a/labs/sysdev-real-time/sysdev-real-time.tex
+++ b/labs/sysdev-real-time/sysdev-real-time.tex
@@ -109,10 +109,10 @@ PREEMPT\_RT patches yet.
Configure your kernel for your Xplained board, and then make sure
that the below settings are disabled:
-\code{CONFIG_PROVE_LOCKING}, \code{CONFIG_DEBUG_LOCK_ALLOC},
-\code{CONFIG_DEBUG_MUTEXES} and \code{CONFIG_DEBUG_SPINLOCK}.
+\kconfig{CONFIG_PROVE_LOCKING}, \kconfig{CONFIG_DEBUG_LOCK_ALLOC},
+\kconfig{CONFIG_DEBUG_MUTEXES} and \kconfig{CONFIG_DEBUG_SPINLOCK}.
-Also, for the moment, disable the \code{CONFIG_HIGH_RES_TIMERS}
+Also, for the moment, disable the \kconfig{CONFIG_HIGH_RES_TIMERS}
option which impact we want to measure.
Boot the Xplained board by mounting the root filesystem that you
@@ -150,14 +150,14 @@ arm-none-linux-gnueabi-gcc -o rttest rttest.c -lrt
Execute the program on the board. Is the clock resolution good or bad?
Compare it to the timer tick of your system, as defined by
-\code{CONFIG_HZ}.
+\kconfig{CONFIG_HZ}.
Copy the results in a file, in order to be able to compare them
with further results.
Obviously, this resolution will not provide accurate sleep times, and
this is because our kernel doesn't use high-resolution timers. So
-let's add back the \code{CONFIG_HIGH_RES_TIMERS} option in the kernel
+let's add back the \kconfig{CONFIG_HIGH_RES_TIMERS} option in the kernel
configuration.
Recompile your kernel, boot your Xplained with the new version, and
@@ -182,7 +182,7 @@ Now, do the following tests:
\section{Testing the preemptible kernel}
-Recompile your kernel with \code{CONFIG_PREEMPT} enabled, which
+Recompile your kernel with \kconfig{CONFIG_PREEMPT} enabled, which
enables kernel preemption (except for critical sections protected by
spinlocks).
@@ -194,7 +194,7 @@ the results.
Download the latest \code{PREEMPT_RT} kernel patch and apply it to
your kernel sources.
-Configure your kernel with \code{CONFIG_PREEMPT_RT} and boot it.
+Configure your kernel with \kconfig{CONFIG_PREEMPT_RT} and boot it.
Repeat the tests and compare the results again. You should see a massive
improvement in the maximum latency.
diff --git a/labs/sysdev-thirdparty/sysdev-thirdparty.tex b/labs/sysdev-thirdparty/sysdev-thirdparty.tex
index f95e7820..3a30fd11 100644
--- a/labs/sysdev-thirdparty/sysdev-thirdparty.tex
+++ b/labs/sysdev-thirdparty/sysdev-thirdparty.tex
@@ -16,8 +16,8 @@ automated tools.
\section{Audio support in the Kernel}
Recompile your kernel with audio support. The options we want are:
-\code{CONFIG_SOUND}, \code{CONFIG_SND}, \code{CONFIG_SND_USB} and
-\code{CONFIG_SND_USB_AUDIO}.
+\kconfig{CONFIG_SOUND}, \kconfig{CONFIG_SND}, \kconfig{CONFIG_SND_USB} and
+\kconfig{CONFIG_SND_USB_AUDIO}.
At this stage, the easiest solution to update your kernel is probably
to get back to copying it to RAM from \code{tftp}. Anyway, we will have
diff --git a/slides/boot-time-application/boot-time-application.tex b/slides/boot-time-application/boot-time-application.tex
index fcfa6086..b390712c 100644
--- a/slides/boot-time-application/boot-time-application.tex
+++ b/slides/boot-time-application/boot-time-application.tex
@@ -34,13 +34,13 @@ A system-wide profiler
\item {\em legacy} mode:
\begin{itemize}
\item Low accuracy, use a kernel driver to profile
- \item \code{CONFIG_OPROFILE}
+ \item \kconfig{CONFIG_OPROFILE}
\item User space tools: \code{opcontrol} and \code{oprofiled}
\end{itemize}
\item {\em perf\_events} mode:
\begin{itemize}
\item Uses hardware performance counters
- \item \code{CONFIG_PERF_EVENTS} and \code{CONFIG_HW_PERF_EVENTS}
+ \item \kconfig{CONFIG_PERF_EVENTS} and \kconfig{CONFIG_HW_PERF_EVENTS}
\item User space tools: \code{operf}
\end{itemize}
\end{itemize}
@@ -113,7 +113,7 @@ Profiling through timer interrupt
\frametitle{perf}
\begin{itemize}
\item Uses hardware performance counters
- \item \code{CONFIG_PERF_EVENTS} and \code{CONFIG_HW_PERF_EVENTS}
+ \item \kconfig{CONFIG_PERF_EVENTS} and \kconfig{CONFIG_HW_PERF_EVENTS}
\item User space tool: \code{perf}. It is part of the kernel
sources so it is always in sync with your kernel.
\item Usage:
diff --git a/slides/boot-time-bootloader/boot-time-bootloader.tex b/slides/boot-time-bootloader/boot-time-bootloader.tex
index af74808f..bec0194c 100644
--- a/slides/boot-time-bootloader/boot-time-bootloader.tex
+++ b/slides/boot-time-bootloader/boot-time-bootloader.tex
@@ -33,7 +33,7 @@ Recompile U-Boot to remove features not needed in production
\code{setenv bootdelay 0}
\item This usually saves several seconds!
\item Before you do that, recompile U-Boot with
- \code{CONFIG_ZERO_BOOTDELAY_CHECK}, documented in
+ \kconfig{CONFIG_ZERO_BOOTDELAY_CHECK}, documented in
\code{doc/README.autoboot}. It allows to stop the autoboot
process by hitting a key even if the boot delay is set to
\code{0}.
@@ -151,7 +151,7 @@ Measured between \code{Booting kernel} and \code{Starting kernel ...}
\frametitle{Further U-Boot optimizations}
\begin{itemize}
\item Silence U-Boot console output. You will need to compile
- U-Boot with \code{CONFIG_SILENT_CONSOLE} and
+ U-Boot with \kconfig{CONFIG_SILENT_CONSOLE} and
\code{setenv silent yes}.\\
See \code{doc/README.silent} for details.
\end{itemize}
diff --git a/slides/boot-time-filesystems/boot-time-filesystems.tex b/slides/boot-time-filesystems/boot-time-filesystems.tex
index b8d96707..6de610dd 100644
--- a/slides/boot-time-filesystems/boot-time-filesystems.tex
+++ b/slides/boot-time-filesystems/boot-time-filesystems.tex
@@ -68,7 +68,7 @@ For raw flash storage
\item Mount time depending on filesystem size: the kernel has to
scan the whole filesystem at mount time, to read which block
belongs to each file.
-\item Need to use the \code{CONFIG_JFFS2_SUMMARY} kernel option
+\item Need to use the \kconfig{CONFIG_JFFS2_SUMMARY} kernel option
to store such information in flash. This dramatically reduces
mount time.
\item Benchmark on ARM:\\
@@ -133,7 +133,7 @@ For raw flash storage
\begin{frame}
\frametitle{Using UBI Fastmap}
\begin{itemize}
-\item Compile your kernel with \code{CONFIG_UBI_FASTMAP}
+\item Compile your kernel with \kconfig{CONFIG_UBI_FASTMAP}
\item Boot your system at least once with the
\code{ubi.fm_autoconvert=1} kernel parameter.
\item Reboot your system in a clean way
@@ -170,7 +170,7 @@ attach process.
For raw flash storage
\begin{itemize}
\item {\em ubiblock}: read-only block device on top of UBI
- (\code{CONFIG_MTD_UBI_BLOCK}). Available in Linux 3.15
+ (\kconfig{CONFIG_MTD_UBI_BLOCK}). Available in Linux 3.15
(developed on his spare time by Ezequiel Garcia,
a Bootlin contractor).
\item Allows to put SquashFS on a UBI volume.
@@ -183,7 +183,7 @@ For raw flash storage
\begin{frame}
\frametitle{Finding the best filesystem}
\begin{itemize}
-\item Raw flash storage: UBIFS with \code{CONFIG_UBI_FASTMAP} is
+\item Raw flash storage: UBIFS with \kconfig{CONFIG_UBI_FASTMAP} is
probably the best solution.
\item Block storage: SquashFS best solution for root filesystems
which can be read-only. Btrfs and f2fs probably the best solutions
diff --git a/slides/boot-time-init-scripts/boot-time-init-scripts.tex b/slides/boot-time-init-scripts/boot-time-init-scripts.tex
index cd4a1286..51a9cb1e 100644
--- a/slides/boot-time-init-scripts/boot-time-init-scripts.tex
+++ b/slides/boot-time-init-scripts/boot-time-init-scripts.tex
@@ -25,7 +25,7 @@ than with \code{grabserial}, you can use \code{bootchart}.
\frametitle{Measuring - bootchart}
\begin{itemize}
\item You can use \code{bootchartd} from \code{busybox}
- (\code{CONFIG_BOOTCHARTD=y})
+ (\kconfig{CONFIG_BOOTCHARTD=y})
\item Boot your board passing \code{init=/sbin/bootchartd} on your
kernel command line
\item Copy \code{/var/log/bootlog.tgz} from your target to your host
diff --git a/slides/boot-time-init-scripts3/boot-time-init-scripts3.tex b/slides/boot-time-init-scripts3/boot-time-init-scripts3.tex
index f5b25722..73ea047b 100644
--- a/slides/boot-time-init-scripts3/boot-time-init-scripts3.tex
+++ b/slides/boot-time-init-scripts3/boot-time-init-scripts3.tex
@@ -47,7 +47,7 @@ application and then switch to the final root filesystem with
\begin{itemize}
\item If you ship your initramfs inside a compressed kernel image, don't compress
it \\
- (enable \code{CONFIG_INITRAMFS_COMPRESSION_NONE}).
+ (enable \kconfig{CONFIG_INITRAMFS_COMPRESSION_NONE}).
\item Otherwise, by default, your initramfs data will be compressed twice, and
the kernel will be bigger and will take a little more time to load
and uncompress.
diff --git a/slides/boot-time-kernel/boot-time-kernel.tex b/slides/boot-time-kernel/boot-time-kernel.tex
index a156c70e..9981e46c 100644
--- a/slides/boot-time-kernel/boot-time-kernel.tex
+++ b/slides/boot-time-kernel/boot-time-kernel.tex
@@ -21,8 +21,8 @@ Here's what you get on the kernel log:
\end{verbatim}
\end{block}
You might need to increase the log buffer size with
-\code{CONFIG_LOG_BUF_SHIFT} in your kernel configuration. You will
-also need \code{CONFIG_PRINTK_TIME} and \code{CONFIG_KALLSYMS}.
+\kconfig{CONFIG_LOG_BUF_SHIFT} in your kernel configuration. You will
+also need \kconfig{CONFIG_PRINTK_TIME} and \kconfig{CONFIG_KALLSYMS}.
\end{frame}
\begin{frame}
@@ -93,10 +93,10 @@ First, we focus on reducing the size without removing features
\item Two benefits: the kernel will be smaller and load faster, and
less initialization code will get executed
\item Remove features that are not used by userland:
- \code{CONFIG_KALLSYMS}, \code{CONFIG_DEBUG_FS},
- \code{CONFIG_BUG}
+ \kconfig{CONFIG_KALLSYMS}, \kconfig{CONFIG_DEBUG_FS},
+ \kconfig{CONFIG_BUG}
\item Use features designed for embedded systems:
- \code{CONFIG_SLOB}, \code{CONFIG_EMBEDDED}
+ \kconfig{CONFIG_SLOB}, \kconfig{CONFIG_EMBEDDED}
\end{itemize}
\end{frame}
@@ -150,7 +150,7 @@ depend on storage and CPU performance.
\begin{frame}
\frametitle{Optimize kernel for size (1)}
\begin{itemize}
-\item \code{CONFIG_CC_OPTIMIZE_FOR_SIZE}: possibility to compile the kernel
+\item \kconfig{CONFIG_CC_OPTIMIZE_FOR_SIZE}: possibility to compile the kernel
with \code{gcc -Os} instead of \code{gcc -O2}.
\item Such optimizations give priority to code size at
the expense of code speed.
@@ -274,12 +274,12 @@ Calibrating delay loop (skipped) preset value.. 996.14 BogoMIPS (lpj=4980736)
To shave off the last milliseconds, you will probably want to remove
unnecessary features:
\begin{itemize}
- \item \code{CONFIG_PRINTK=n} will have the same effect as the
+ \item \kconfigval{CONFIG_PRINTK}{n} will have the same effect as the
\code{quiet} command line argument but you won't have
any access to kernel messages. You will have a
significantly smaller kernel though.
\item Compile your kernel in {\em Thumb2} mode:
- \code{CONFIG_THUMB2_KERNEL} (any ARM toolchain can do
+ \kconfig{CONFIG_THUMB2_KERNEL} (any ARM toolchain can do
that).
\end{itemize}
\end{frame}
@@ -293,9 +293,9 @@ More features you could remove:
\item Network stack
\item USB stack
\item Power management features
- \item \code{CONFIG_SYSFS_DEPRECATED}
+ \item \kconfig{CONFIG_SYSFS_DEPRECATED}
\item Input: keyboards / mice / touchscreens
- \item Reduce the \code{CONFIG_LEGACY_PTY_COUNT} value or set the
+ \item Reduce the \kconfig{CONFIG_LEGACY_PTY_COUNT} value or set the
\code{pty.legacy_count} kernel parameter
\end{itemize}
\end{frame}
diff --git a/slides/boot-time-measuring/boot-time-measuring.tex b/slides/boot-time-measuring/boot-time-measuring.tex
index 0630b6dc..8e0866f6 100644
--- a/slides/boot-time-measuring/boot-time-measuring.tex
+++ b/slides/boot-time-measuring/boot-time-measuring.tex
@@ -133,7 +133,7 @@ Later, we will see specific resources for measuring time
\item \code{time} for measuring application time
\item \code{strace} for application tracing
\item \code{bootchartd} for tracing the execution of system services
- \item \code{CONFIG_PRINTK_TIME} and \code{initcall_debug} for
+ \item \kconfig{CONFIG_PRINTK_TIME} and \code{initcall_debug} for
tracing kernel code and functions.
\end{itemize}
\end{frame}
diff --git a/slides/initramfs/initramfs.tex b/slides/initramfs/initramfs.tex
index 85e7f0f5..65cb0f1b 100644
--- a/slides/initramfs/initramfs.tex
+++ b/slides/initramfs/initramfs.tex
@@ -37,7 +37,7 @@
\frametitle{rootfs in memory: initramfs (3)}
\begin{itemize}
\item The contents of an initramfs are defined at the kernel
- configuration level, with the \code{CONFIG_INITRAMFS_SOURCE}
+ configuration level, with the \kconfig{CONFIG_INITRAMFS_SOURCE}
option
\begin{itemize}
\item Can be the path to a directory containing the root
@@ -47,7 +47,7 @@
(see documentation for details)
\end{itemize}
\item The kernel build process will automatically take the contents
- of the \code{CONFIG_INITRAMFS_SOURCE} option and integrate the
+ of the \kconfig{CONFIG_INITRAMFS_SOURCE} option and integrate the
root filesystem into the kernel image
\item Details (in kernel sources): \\
{\small
diff --git a/slides/kernel-driver-development-debugging/kernel-driver-development-debugging.tex b/slides/kernel-driver-development-debugging/kernel-driver-development-debugging.tex
index ff91d0f6..5d621192 100644
--- a/slides/kernel-driver-development-debugging/kernel-driver-development-debugging.tex
+++ b/slides/kernel-driver-development-debugging/kernel-driver-development-debugging.tex
@@ -59,7 +59,7 @@ dev_info(&pdev->dev, "in probe\n");
\code{DEBUG} can be defined by \codewithhash{\#define DEBUG} at the
beginning of the driver, or using
\code{ccflags-$(CONFIG_DRIVER) += -DDEBUG} in the \code{Makefile}
- \item When the kernel is compiled with \code{CONFIG_DYNAMIC_DEBUG},
+ \item When the kernel is compiled with \kconfig{CONFIG_DYNAMIC_DEBUG},
then these messages can dynamically be enabled on a per-file,
per-module or per-message basis
\begin{itemize}
@@ -67,7 +67,7 @@ dev_info(&pdev->dev, "in probe\n");
\item Very powerful feature to only get the debug messages you're
interested in.
\end{itemize}
- \item When neither \code{DEBUG} nor \code{CONFIG_DYNAMIC_DEBUG} are
+ \item When neither \code{DEBUG} nor \kconfig{CONFIG_DYNAMIC_DEBUG} are
used, these messages are not compiled in.
\end{itemize}
\end{frame}
@@ -102,7 +102,7 @@ dev_info(&pdev->dev, "in probe\n");
\frametitle{DebugFS}
A virtual filesystem to export debugging information to user space.
\begin{itemize}
- \item Kernel configuration: \code{CONFIG_DEBUG_FS}
+ \item Kernel configuration: \kconfig{CONFIG_DEBUG_FS}
\begin{itemize}
\item \code{Kernel hacking -> Debug Filesystem}
\end{itemize}
@@ -207,11 +207,11 @@ dev_info(&pdev->dev, "in probe\n");
\begin{itemize}
\item Details available in the kernel documentation:
\kerneldochtml{dev-tools/kgdb}
- \item Recommended to turn on \code{CONFIG_FRAME_POINTER} to aid in
+ \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
- \code{CONFIG_KGDB_SERIAL_CONSOLE})
+ \kconfig{CONFIG_KGDB_SERIAL_CONSOLE})
\item Configure \code{kgdboc} at boot time by passing to the kernel:
\begin{itemize}
\item \code{kgdboc=<tty-device>,<bauds>}.
@@ -266,14 +266,14 @@ dev_info(&pdev->dev, "in probe\n");
\begin{frame}
\frametitle{More kernel debugging tips}
\begin{itemize}
- \item Make sure \code{CONFIG_KALLSYMS_ALL} is enabled
+ \item Make sure \kconfig{CONFIG_KALLSYMS_ALL} is enabled
\begin{itemize}
\item Is turned on by default
\item To get oops messages with symbol names instead of raw addresses
\end{itemize}
\item On ARM, if your kernel doesn't boot or hangs without any
message, you can activate early debugging options
- (\code{CONFIG_DEBUG_LL} and \code{CONFIG_EARLYPRINTK}), and add
+ (\kconfig{CONFIG_DEBUG_LL} and \kconfig{CONFIG_EARLYPRINTK}), and add
\code{earlyprintk} to the kernel command line.
\end{itemize}
\end{frame}
diff --git a/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex b/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
index 4141bebe..180cfb78 100644
--- a/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
+++ b/slides/kernel-driver-development-io-memory/kernel-driver-development-io-memory.tex
@@ -265,7 +265,7 @@ __raw_writel(1 << KS8695_IRQ_UART_TX,
device memory.
\item On \code{x86}, \code{arm}, \code{arm64},
\code{powerpc}, \code{s390} and \code{unicore32}:
- \code{CONFIG_STRICT_DEVMEM} option to restrict \code{/dev/mem}
+ \kconfig{CONFIG_STRICT_DEVMEM} option to restrict \code{/dev/mem}
to non-RAM addresses, for security reasons (Linux 4.20 status).
\end{itemize}
\end{frame}
diff --git a/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex b/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
index 26936956..32c888ac 100644
--- a/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
+++ b/slides/kernel-driver-development-memory/kernel-driver-development-memory.tex
@@ -52,7 +52,7 @@
\item To allow the kernel to access more physical memory:
\begin{itemize}
\item Change the 3GB/1GB memory split to 2GB/2GB or 1GB/3GB
- (\code{CONFIG_VMSPLIT_2G} or \code{CONFIG_VMSPLIT_1G)}
+ (\kconfig{CONFIG_VMSPLIT_2G} or \kconfig{CONFIG_VMSPLIT_1G)}
$\Rightarrow$ reduce total user memory available for each process
\item Change for a 64 bit architecture ;-) See
\kerneldoctext{x86/x86_64/mm.txt} for an example.
@@ -224,7 +224,7 @@
Linux 4.20 on ARM: used in 48 \code{defconfig} files
\item SLOB: much simpler. More space efficient but doesn't scale
well. Can save space in small systems (depends on
- \code{CONFIG_EXPERT}). \\
+ \kconfig{CONFIG_EXPERT}). \\
Linux 4.20 on ARM: used in 7 \code{defconfig} files \\
Results on BeagleBone Black: -5 KB compressed kernel size, +1.43 s boot time!
\item SLUB: more recent and simpler than
diff --git a/slides/kernel-frameworks2/kernel-frameworks2.tex b/slides/kernel-frameworks2/kernel-frameworks2.tex
index 37d040ae..d3bb567f 100644
--- a/slides/kernel-frameworks2/kernel-frameworks2.tex
+++ b/slides/kernel-frameworks2/kernel-frameworks2.tex
@@ -291,7 +291,7 @@ int main(void)
\begin{frame}
\frametitle{Example: Framebuffer Framework}
\begin{itemize}
- \item Kernel option \code{CONFIG_FB}
+ \item Kernel option \kconfig{CONFIG_FB}
\begin{itemize}
\item \code{menuconfig FB}
\begin{itemize}
diff --git a/slides/kernel-input/kernel-input.tex b/slides/kernel-input/kernel-input.tex
index 78c2f52a..ca857c0d 100644
--- a/slides/kernel-input/kernel-input.tex
+++ b/slides/kernel-input/kernel-input.tex
@@ -30,7 +30,7 @@
\begin{frame}{Input subsystem overview}
\begin{itemize}
- \item Kernel option \code{CONFIG_INPUT}
+ \item Kernel option \kconfig{CONFIG_INPUT}
\begin{itemize}
\item \code{menuconfig INPUT}
\begin{itemize}
diff --git a/slides/sysdev-flash-filesystems/sysdev-flash-filesystems.tex b/slides/sysdev-flash-filesystems/sysdev-flash-filesystems.tex
index f25d7ca8..d8bd041d 100644
--- a/slides/sysdev-flash-filesystems/sysdev-flash-filesystems.tex
+++ b/slides/sysdev-flash-filesystems/sysdev-flash-filesystems.tex
@@ -292,7 +292,7 @@ setenv mtdparts mtdparts=omap2-nand.0:512k(XLoader)ro,1536k(UBoot)ro,512k(Env),4
\item MTD devices are visible in \code{/proc/mtd}
\item User space only sees MTD partitions, not the flash device
under those partitions (unless the kernel is compiled with
- \code{CONFIG_MTD_PARTITIONED_MASTER})
+ \kconfig{CONFIG_MTD_PARTITIONED_MASTER})
\item The {\bf mtdchar} driver creates a character device for each
MTD device/partition of the system
\begin{itemize}
@@ -776,7 +776,7 @@ ${bootargs_base} ${mtdparts}; bootz 0x81000000 - 0x82000000'}
\begin{frame}
\frametitle{Linux: ubiblock}
\begin{itemize}
- \item \code{CONFIG_MTD_UBI_BLOCK}
+ \item \kconfig{CONFIG_MTD_UBI_BLOCK}
\item Implemented by Ezequiel Garcia from Bootlin.
\item Preferred over \code{mtdblock} if UBI is available (UBI accounts
for data retention and wear leveling issues, while MTD does not)
diff --git a/slides/sysdev-realtime/sysdev-realtime.tex b/slides/sysdev-realtime/sysdev-realtime.tex
index c5624b9d..a4575704 100644
--- a/slides/sysdev-realtime/sysdev-realtime.tex
+++ b/slides/sysdev-realtime/sysdev-realtime.tex
@@ -314,7 +314,7 @@
\begin{frame}
\frametitle{1st option: no forced preemption}
- \code{CONFIG_PREEMPT_NONE}\\
+ \kconfig{CONFIG_PREEMPT_NONE}\\
Kernel code (interrupts, exceptions, system calls) never preempted.
Default behavior in standard kernels.
\begin{itemize}
@@ -332,7 +332,7 @@
\begin{frame}
\frametitle{2nd option: voluntary kernel preemption}
- \code{CONFIG_PREEMPT_VOLUNTARY}\\
+ \kconfig{CONFIG_PREEMPT_VOLUNTARY}\\
Kernel code can preempt itself
\begin{itemize}
\item Typically for desktop systems, for quicker application
@@ -346,7 +346,7 @@
\begin{frame}
\frametitle{3rd option: preemptible kernel}
- \code{CONFIG_PREEMPT}\\
+ \kconfig{CONFIG_PREEMPT}\\
Most kernel code can be involuntarily preempted at any time. When a
process becomes runnable, no more need to wait for kernel code
(typically a system call) to return before running the scheduler.
@@ -421,7 +421,7 @@
\begin{frame}
\frametitle{New real-time preemption option (1)}
- The PREEMPT\_RT patchset adds one new level of preemption, \code{CONFIG_PREEMPT_RT}:
+ The PREEMPT\_RT patchset adds one new level of preemption, \kconfig{CONFIG_PREEMPT_RT}:
\begin{center}
\includegraphics[height=0.4\textheight]{slides/sysdev-realtime/preempt-rt-option.png}
\end{center}
@@ -455,7 +455,7 @@
\begin{frame}
\frametitle{{\tt CONFIG\_PREEMPT\_RT} (2)}
\begin{itemize}
- \item With \code{CONFIG_PREEMPT_RT}, virtually all kernel code
+ \item With \kconfig{CONFIG_PREEMPT_RT}, virtually all kernel code
becomes preemptible
\begin{itemize}
\item An interrupt can occur at any time, when returning from the
@@ -505,7 +505,7 @@
\begin{itemize}
\item In the kernel configuration, be sure to enable
\begin{itemize}
- \item \code{CONFIG_PREEMPT_RT}
+ \item \kconfig{CONFIG_PREEMPT_RT}
\item High-resolution timers
\end{itemize}
\item Compile your kernel, and boot
@@ -535,7 +535,7 @@
introducing new issues for real-time (such as disabling preemption in
BPF... see \url{https://lwn.net/Articles/802884/}).
\item A major achievement though in Linux 5.3: the
- \code{CONFIG_PREEMPT_RT} configuration option is now in mainline, though
+ \kconfig{CONFIG_PREEMPT_RT} configuration option is now in mainline, though
it cannot be selected yet (missing dependencies). This
simplifies further mainlining work.
\item See the latest status presentations:
@@ -938,7 +938,7 @@ timer_delete(timer_t timerid)
\begin{frame}[fragile]
\frametitle{Scheduling latency tracer}
\fontsize{9}{9}\selectfont
- \code{CONFIG_SCHED_TRACER} ({\em Kernel Hacking} section)
+ \kconfig{CONFIG_SCHED_TRACER} ({\em Kernel Hacking} section)
\begin{itemize}
\item Maximum recorded time between waking up a top priority task
and its scheduling on a CPU, expressed in us.
diff --git a/slides/sysdev-root-filesystem-principles/sysdev-root-filesystem-principles.tex b/slides/sysdev-root-filesystem-principles/sysdev-root-filesystem-principles.tex
index 242746b8..1d682b5f 100644
--- a/slides/sysdev-root-filesystem-principles/sysdev-root-filesystem-principles.tex
+++ b/slides/sysdev-root-filesystem-principles/sysdev-root-filesystem-principles.tex
@@ -188,9 +188,9 @@ Kernel panic - not syncing: VFS: Unable to mount root fs on unknown block(0,0)
\item On the target system
\item The kernel must be compiled with
\begin{itemize}
- \item \code{CONFIG_NFS_FS=y} (NFS {\bf client} support)
- \item \code{CONFIG_IP_PNP=y} (configure IP at boot time)
- \item \code{CONFIG_ROOT_NFS=y} (support for NFS as rootfs)
+ \item \kconfigval{CONFIG_NFS_FS}{y} (NFS {\bf client} support)
+ \item \kconfigval{CONFIG_IP_PNP}{y} (configure IP at boot time)
+ \item \kconfigval{CONFIG_ROOT_NFS}{y} (support for NFS as rootfs)
\end{itemize}
\item The kernel must be booted with the following parameters:
\begin{itemize}
More information about the training-materials-updates
mailing list