[bootlin/training-materials updates] master: slides: rename sysdev-linux-intro-modules to kernel-intro-modules (46849b81)
Thomas Petazzoni
thomas.petazzoni at bootlin.com
Fri Sep 9 22:25:45 CEST 2022
Repository : https://github.com/bootlin/training-materials
On branch : master
Link : https://github.com/bootlin/training-materials/commit/46849b813e7120466aea70f2d22fe7d8828e4f33
>---------------------------------------------------------------
commit 46849b813e7120466aea70f2d22fe7d8828e4f33
Author: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
Date: Fri Sep 9 22:22:48 2022 +0200
slides: rename sysdev-linux-intro-modules to kernel-intro-modules
This chapter is now only used by the Linux kernel training, so the
"sysdev" prefix didn't make much sense.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni at bootlin.com>
>---------------------------------------------------------------
46849b813e7120466aea70f2d22fe7d8828e4f33
mk/linux-kernel.mk | 2 +-
.../kernel-intro-modules/kernel-intro-modules.tex | 153 +++++++
.../modules-to-access-rootfs.dia | 483 +++++++++++++++++++++
.../modules-to-access-rootfs.dia | 483 ---------------------
.../sysdev-linux-intro-modules.tex | 153 -------
5 files changed, 637 insertions(+), 637 deletions(-)
diff --git a/mk/linux-kernel.mk b/mk/linux-kernel.mk
index 6fff5b5a..40918318 100644
--- a/mk/linux-kernel.mk
+++ b/mk/linux-kernel.mk
@@ -17,7 +17,7 @@ LINUX_KERNEL_SLIDES = \
sysdev-kernel-building \
sysdev-kernel-booting \
kernel-board-setup-kernel-compiling-and-booting-labs \
- sysdev-linux-intro-modules \
+ kernel-intro-modules \
kernel-driver-development-modules \
kernel-driver-development-lab-modules \
kernel-driver-development-general-apis \
diff --git a/slides/kernel-intro-modules/kernel-intro-modules.tex b/slides/kernel-intro-modules/kernel-intro-modules.tex
new file mode 100644
index 00000000..4675595b
--- /dev/null
+++ b/slides/kernel-intro-modules/kernel-intro-modules.tex
@@ -0,0 +1,153 @@
+\subsection{Using kernel modules}
+
+\begin{frame}
+ \frametitle{Advantages of modules}
+ \begin{columns}
+ \column{0.7\textwidth}
+ \begin{itemize}
+ \item Modules make it easy to develop drivers without rebooting:
+ load, test, unload, rebuild, load...
+ \item Useful to keep the kernel image size to the minimum (essential
+ in GNU/Linux distributions for PCs).
+ \item Also useful to reduce boot time: you don't spend time
+ initializing devices and kernel features that you only need later.
+ \item Caution: once loaded, have full control and privileges in the
+ system. No particular protection. That's why only the \code{root} user
+ can load and unload modules.
+ \item To increase security, possibility to allow only signed modules,
+ or to disable module support entirely.
+ \end{itemize}
+ \column{0.3\textwidth}
+ \includegraphics[width=\textwidth]{slides/kernel-intro-modules/modules-to-access-rootfs.pdf}
+ \end{columns}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Module dependencies}
+ \begin{itemize}
+ \item Some kernel modules can depend on other modules,
+ which need to be loaded first.
+ \item Example: the \code{ubifs} module depends on the
+ \code{ubi} and \code{mtd} modules.
+ \item Dependencies are described
+ both in \code{/lib/modules/<kernel-version>/modules.dep}
+ and in \code{/lib/modules/<kernel-version>/modules.dep.bin} (binary hashed format)\\
+ These files are generated when you run \code{make modules_install}.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Kernel log}
+
+ When a new module is loaded, related information is available in the
+ kernel log.
+ \begin{itemize}
+ \item The kernel keeps its messages in a circular buffer (so that it
+ doesn't consume more memory with many messages)
+ \item Kernel log messages are available through the \code{dmesg}
+ command ({\bf d}iagnostic {\bf mes}sa{\bf g}e)
+ \item Kernel log messages are also displayed in the system console
+ (console messages can be filtered by level using the
+ \code{loglevel} kernel command line parameter,
+ or completely disabled with the
+ \code{quiet} parameter). Example:\\
+ \code{console=ttyS0 root=/dev/mmcblk0p2 loglevel=5}
+ \item Note that you can write to the kernel log from user space too.
+ That's useful when your device's serial console is being monitored
+ for critical messages:
+ \code{echo "<n>Debug info" > /dev/kmsg}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Module utilities (1)}
+ \code{<module_name>}: name of the module file without the trailing \code{.ko}\\
+ \begin{itemize}
+ \item \code{modinfo <module_name>} (for modules in \code{/lib/modules})\\
+ \code{modinfo <module_path>.ko}\\
+ Gets information about a module without loading it: parameters, license,
+ description and dependencies.\\
+ \item \code{sudo insmod <module_path>.ko}\\
+ Tries to load the given module. The full path to the module object
+ file must be given.
+ \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+ \frametitle{Understanding module loading issues}
+ \begin{itemize}
+ \item When loading a module fails, \code{insmod} often doesn't give
+ you enough details!
+ \item Details are often available in the kernel log.
+ \item Example:\\
+\scriptsize
+\begin{verbatim}
+$ sudo insmod ./intr_monitor.ko
+insmod: error inserting './intr_monitor.ko': -1 Device or resource busy
+$ dmesg
+[17549774.552000] Failed to register handler for irq channel 2
+\end{verbatim}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Module utilities (2)}
+ \begin{itemize}
+ \item \code{sudo modprobe <top_module_name>}\\
+ Most common usage of \code{modprobe}: tries to load all the
+ dependencies of the given top module, and then this module. Lots of
+ other options are available. \code{modprobe} automatically looks in
+ \code{/lib/modules/<version>/} for the object file corresponding
+ to the given module name.
+ \item \code{lsmod}\\
+ Displays the list of loaded modules\\
+ Compare its output with the contents of \code{/proc/modules}!
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Module utilities (3)}
+ \begin{itemize}
+ \item \code{sudo rmmod <module_name>}\\
+ Tries to remove the given module.\\
+ Will only be allowed if the module is no longer in use (for
+ example, no more processes opening a device file)
+ \item \code{sudo modprobe -r <top_module_name>}\\
+ Tries to remove the given top module and all its no longer needed dependencies
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Passing parameters to modules}
+ \begin{itemize}
+ \item Find available parameters:\\
+ \code{modinfo usb-storage}
+ \item Through \code{insmod}:\\
+ \code{sudo insmod ./usb-storage.ko delay_use=0}
+ \item Through \code{modprobe}:\\
+ Set parameters in \code{/etc/modprobe.conf} or in any file in \code{/etc/modprobe.d/}:\\
+ \code{options usb-storage delay_use=0}
+ \item Through the kernel command line, when the driver is built statically into the kernel:\\
+ \code{usb-storage.delay_use=0}
+ \begin{itemize}
+ \item \code{usb-storage} is the {\em driver name}
+ \item \code{delay_use} is the {\em driver parameter name}. It
+ specifies a delay before accessing a USB storage device (useful for
+ rotating devices).
+ \item \code{0} is the {\em driver parameter value}
+ \end{itemize}
+ \end{itemize}
+\end{frame}
+
+\begin{frame}
+ \frametitle{Check module parameter values}
+ How to find/edit the current values for the parameters of a loaded module?
+ \begin{itemize}
+ \item Check \code{/sys/module/<name>/parameters}.
+ \item There is one file per parameter, containing the parameter value.
+ \item Also possible to change parameter values if these files have
+ write permissions (depends on the module code).
+ \item Example:\\
+ \code{echo 0 > /sys/module/usb_storage/parameters/delay_use}
+ \end{itemize}
+\end{frame}
diff --git a/slides/kernel-intro-modules/modules-to-access-rootfs.dia b/slides/kernel-intro-modules/modules-to-access-rootfs.dia
new file mode 100644
index 00000000..740c813e
--- /dev/null
+++ b/slides/kernel-intro-modules/modules-to-access-rootfs.dia
@@ -0,0 +1,483 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
+ <dia:diagramdata>
+ <dia:attribute name="background">
+ <dia:color val="#ffffffff"/>
+ </dia:attribute>
+ <dia:attribute name="pagebreak">
+ <dia:color val="#000099ff"/>
+ </dia:attribute>
+ <dia:attribute name="paper">
+ <dia:composite type="paper">
+ <dia:attribute name="name">
+ <dia:string>#Letter#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="tmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="bmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="lmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="rmargin">
+ <dia:real val="2.5399999618530273"/>
+ </dia:attribute>
+ <dia:attribute name="is_portrait">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="scaling">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="fitto">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="grid">
+ <dia:composite type="grid">
+ <dia:attribute name="dynamic">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="width_x">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="width_y">
+ <dia:real val="1"/>
+ </dia:attribute>
+ <dia:attribute name="visible_x">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="visible_y">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:composite type="color"/>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#d8e5e5ff"/>
+ </dia:attribute>
+ <dia:attribute name="guides">
+ <dia:composite type="guides">
+ <dia:attribute name="hguides"/>
+ <dia:attribute name="vguides"/>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="display">
+ <dia:composite type="display">
+ <dia:attribute name="antialiased">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="snap-to-grid">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="snap-to-object">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="show-grid">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="show-connection-points">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ </dia:diagramdata>
+ <dia:layer name="Arrière-plan" visible="true" connectable="true" active="true">
+ <dia:object type="Standard - Box" version="0" id="O0">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,3.95"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,3.9;38.05,6.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,3.95"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="2.0499999999999998"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#d9cb2fff"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#fff8a8ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="corner_radius">
+ <dia:real val="0.59999999999999998"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O1">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,4.975"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="27.74,4.01488;30.26,5.22646"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Kernel#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="Latin Modern Sans" style="80" name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="29,4.975"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000ff"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O2">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,6.04955"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.6382,5.99955;29.3618,11.1"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="29,6.04955"/>
+ <dia:point val="29,11.05"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O0" connection="8"/>
+ </dia:connections>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O3">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,24"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="20,23.4059;36.98,24.9509"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#The modules in the initramfs are updated every time
+a kernel upgrade is available.#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="0" name="Helvetica"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="0.80000000000000004"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="20,24"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000ff"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O4">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,0"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.64,-0.890679;38.36,1.42575"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Using kernel modules to support
+many different devices and setups#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="sans" style="80" name="Helvetica-Bold"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.1994443982839584"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="29,0"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000ff"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O5">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,8"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,7.95;38.05,16.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,8"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="8"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#d9cb2fff"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#fff8a8ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="corner_radius">
+ <dia:real val="0.59999999999999998"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O6">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,9"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.3113,8.03988;36.6887,9.25146"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Intermediate root filesystem (initramfs)#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="Latin Modern Sans" style="80" name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="29,9"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000ff"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O7">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,10"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="21.585,9.12065;36.415,16.903"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#
+No special driver required to access it
+Contains all the modules to access the specific
+storage and filesytem of the device
+Load such modules
+and mount the new root filesystem
+
+#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="Latin Modern Sans" style="0" name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="0.95249996334314346"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="29,10"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000ff"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Box" version="0" id="O8">
+ <dia:attribute name="obj_pos">
+ <dia:point val="20,18"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="19.95,17.95;38.05,21.05"/>
+ </dia:attribute>
+ <dia:attribute name="elem_corner">
+ <dia:point val="20,18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_width">
+ <dia:real val="18"/>
+ </dia:attribute>
+ <dia:attribute name="elem_height">
+ <dia:real val="3"/>
+ </dia:attribute>
+ <dia:attribute name="border_width">
+ <dia:real val="0.10000000149011612"/>
+ </dia:attribute>
+ <dia:attribute name="border_color">
+ <dia:color val="#d9cb2fff"/>
+ </dia:attribute>
+ <dia:attribute name="inner_color">
+ <dia:color val="#fff8a8ff"/>
+ </dia:attribute>
+ <dia:attribute name="show_background">
+ <dia:boolean val="true"/>
+ </dia:attribute>
+ <dia:attribute name="corner_radius">
+ <dia:real val="0.59999999999999998"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O9">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.05,18.0899;32.95,19.3015"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Final root filesystem#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="Latin Modern Sans" style="80" name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="1.0583332926034927"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="29,19.05"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000ff"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Text" version="1" id="O10">
+ <dia:attribute name="obj_pos">
+ <dia:point val="28.9362,20.3975"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="25.2912,19.5182;32.5812,20.633"/>
+ </dia:attribute>
+ <dia:attribute name="text">
+ <dia:composite type="text">
+ <dia:attribute name="string">
+ <dia:string>#Regular system startup#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="font">
+ <dia:font family="Latin Modern Sans" style="0" name="Courier"/>
+ </dia:attribute>
+ <dia:attribute name="height">
+ <dia:real val="0.95249996334314346"/>
+ </dia:attribute>
+ <dia:attribute name="pos">
+ <dia:point val="28.9362,20.3975"/>
+ </dia:attribute>
+ <dia:attribute name="color">
+ <dia:color val="#000000ff"/>
+ </dia:attribute>
+ <dia:attribute name="alignment">
+ <dia:enum val="1"/>
+ </dia:attribute>
+ </dia:composite>
+ </dia:attribute>
+ <dia:attribute name="valign">
+ <dia:enum val="3"/>
+ </dia:attribute>
+ </dia:object>
+ <dia:object type="Standard - Line" version="0" id="O11">
+ <dia:attribute name="obj_pos">
+ <dia:point val="29,16"/>
+ </dia:attribute>
+ <dia:attribute name="obj_bb">
+ <dia:rectangle val="28.6382,15.95;29.3618,18.05"/>
+ </dia:attribute>
+ <dia:attribute name="conn_endpoints">
+ <dia:point val="29,16"/>
+ <dia:point val="29,18"/>
+ </dia:attribute>
+ <dia:attribute name="numcp">
+ <dia:int val="1"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow">
+ <dia:enum val="22"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_length">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:attribute name="end_arrow_width">
+ <dia:real val="0.5"/>
+ </dia:attribute>
+ <dia:connections>
+ <dia:connection handle="0" to="O5" connection="6"/>
+ <dia:connection handle="1" to="O8" connection="1"/>
+ </dia:connections>
+ </dia:object>
+ </dia:layer>
+</dia:diagram>
diff --git a/slides/sysdev-linux-intro-modules/modules-to-access-rootfs.dia b/slides/sysdev-linux-intro-modules/modules-to-access-rootfs.dia
deleted file mode 100644
index 740c813e..00000000
--- a/slides/sysdev-linux-intro-modules/modules-to-access-rootfs.dia
+++ /dev/null
@@ -1,483 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
- <dia:diagramdata>
- <dia:attribute name="background">
- <dia:color val="#ffffffff"/>
- </dia:attribute>
- <dia:attribute name="pagebreak">
- <dia:color val="#000099ff"/>
- </dia:attribute>
- <dia:attribute name="paper">
- <dia:composite type="paper">
- <dia:attribute name="name">
- <dia:string>#Letter#</dia:string>
- </dia:attribute>
- <dia:attribute name="tmargin">
- <dia:real val="2.5399999618530273"/>
- </dia:attribute>
- <dia:attribute name="bmargin">
- <dia:real val="2.5399999618530273"/>
- </dia:attribute>
- <dia:attribute name="lmargin">
- <dia:real val="2.5399999618530273"/>
- </dia:attribute>
- <dia:attribute name="rmargin">
- <dia:real val="2.5399999618530273"/>
- </dia:attribute>
- <dia:attribute name="is_portrait">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="scaling">
- <dia:real val="1"/>
- </dia:attribute>
- <dia:attribute name="fitto">
- <dia:boolean val="false"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="grid">
- <dia:composite type="grid">
- <dia:attribute name="dynamic">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="width_x">
- <dia:real val="1"/>
- </dia:attribute>
- <dia:attribute name="width_y">
- <dia:real val="1"/>
- </dia:attribute>
- <dia:attribute name="visible_x">
- <dia:int val="1"/>
- </dia:attribute>
- <dia:attribute name="visible_y">
- <dia:int val="1"/>
- </dia:attribute>
- <dia:composite type="color"/>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#d8e5e5ff"/>
- </dia:attribute>
- <dia:attribute name="guides">
- <dia:composite type="guides">
- <dia:attribute name="hguides"/>
- <dia:attribute name="vguides"/>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="display">
- <dia:composite type="display">
- <dia:attribute name="antialiased">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="snap-to-grid">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="snap-to-object">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="show-grid">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="show-connection-points">
- <dia:boolean val="true"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- </dia:diagramdata>
- <dia:layer name="Arrière-plan" visible="true" connectable="true" active="true">
- <dia:object type="Standard - Box" version="0" id="O0">
- <dia:attribute name="obj_pos">
- <dia:point val="20,3.95"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="19.95,3.9;38.05,6.05"/>
- </dia:attribute>
- <dia:attribute name="elem_corner">
- <dia:point val="20,3.95"/>
- </dia:attribute>
- <dia:attribute name="elem_width">
- <dia:real val="18"/>
- </dia:attribute>
- <dia:attribute name="elem_height">
- <dia:real val="2.0499999999999998"/>
- </dia:attribute>
- <dia:attribute name="border_width">
- <dia:real val="0.10000000149011612"/>
- </dia:attribute>
- <dia:attribute name="border_color">
- <dia:color val="#d9cb2fff"/>
- </dia:attribute>
- <dia:attribute name="inner_color">
- <dia:color val="#fff8a8ff"/>
- </dia:attribute>
- <dia:attribute name="show_background">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="corner_radius">
- <dia:real val="0.59999999999999998"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Text" version="1" id="O1">
- <dia:attribute name="obj_pos">
- <dia:point val="29,4.975"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="27.74,4.01488;30.26,5.22646"/>
- </dia:attribute>
- <dia:attribute name="text">
- <dia:composite type="text">
- <dia:attribute name="string">
- <dia:string>#Kernel#</dia:string>
- </dia:attribute>
- <dia:attribute name="font">
- <dia:font family="Latin Modern Sans" style="80" name="Courier"/>
- </dia:attribute>
- <dia:attribute name="height">
- <dia:real val="1.0583332926034927"/>
- </dia:attribute>
- <dia:attribute name="pos">
- <dia:point val="29,4.975"/>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#000000ff"/>
- </dia:attribute>
- <dia:attribute name="alignment">
- <dia:enum val="1"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="valign">
- <dia:enum val="3"/>
- </dia:attribute>
- <dia:connections>
- <dia:connection handle="0" to="O0" connection="8"/>
- </dia:connections>
- </dia:object>
- <dia:object type="Standard - Line" version="0" id="O2">
- <dia:attribute name="obj_pos">
- <dia:point val="29,6.04955"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="28.6382,5.99955;29.3618,11.1"/>
- </dia:attribute>
- <dia:attribute name="conn_endpoints">
- <dia:point val="29,6.04955"/>
- <dia:point val="29,11.05"/>
- </dia:attribute>
- <dia:attribute name="numcp">
- <dia:int val="1"/>
- </dia:attribute>
- <dia:attribute name="end_arrow">
- <dia:enum val="22"/>
- </dia:attribute>
- <dia:attribute name="end_arrow_length">
- <dia:real val="0.5"/>
- </dia:attribute>
- <dia:attribute name="end_arrow_width">
- <dia:real val="0.5"/>
- </dia:attribute>
- <dia:connections>
- <dia:connection handle="0" to="O0" connection="8"/>
- </dia:connections>
- </dia:object>
- <dia:object type="Standard - Text" version="1" id="O3">
- <dia:attribute name="obj_pos">
- <dia:point val="20,24"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="20,23.4059;36.98,24.9509"/>
- </dia:attribute>
- <dia:attribute name="text">
- <dia:composite type="text">
- <dia:attribute name="string">
- <dia:string>#The modules in the initramfs are updated every time
-a kernel upgrade is available.#</dia:string>
- </dia:attribute>
- <dia:attribute name="font">
- <dia:font family="sans" style="0" name="Helvetica"/>
- </dia:attribute>
- <dia:attribute name="height">
- <dia:real val="0.80000000000000004"/>
- </dia:attribute>
- <dia:attribute name="pos">
- <dia:point val="20,24"/>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#000000ff"/>
- </dia:attribute>
- <dia:attribute name="alignment">
- <dia:enum val="0"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="valign">
- <dia:enum val="3"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Text" version="1" id="O4">
- <dia:attribute name="obj_pos">
- <dia:point val="29,0"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="19.64,-0.890679;38.36,1.42575"/>
- </dia:attribute>
- <dia:attribute name="text">
- <dia:composite type="text">
- <dia:attribute name="string">
- <dia:string>#Using kernel modules to support
-many different devices and setups#</dia:string>
- </dia:attribute>
- <dia:attribute name="font">
- <dia:font family="sans" style="80" name="Helvetica-Bold"/>
- </dia:attribute>
- <dia:attribute name="height">
- <dia:real val="1.1994443982839584"/>
- </dia:attribute>
- <dia:attribute name="pos">
- <dia:point val="29,0"/>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#000000ff"/>
- </dia:attribute>
- <dia:attribute name="alignment">
- <dia:enum val="1"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="valign">
- <dia:enum val="3"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Box" version="0" id="O5">
- <dia:attribute name="obj_pos">
- <dia:point val="20,8"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="19.95,7.95;38.05,16.05"/>
- </dia:attribute>
- <dia:attribute name="elem_corner">
- <dia:point val="20,8"/>
- </dia:attribute>
- <dia:attribute name="elem_width">
- <dia:real val="18"/>
- </dia:attribute>
- <dia:attribute name="elem_height">
- <dia:real val="8"/>
- </dia:attribute>
- <dia:attribute name="border_width">
- <dia:real val="0.10000000149011612"/>
- </dia:attribute>
- <dia:attribute name="border_color">
- <dia:color val="#d9cb2fff"/>
- </dia:attribute>
- <dia:attribute name="inner_color">
- <dia:color val="#fff8a8ff"/>
- </dia:attribute>
- <dia:attribute name="show_background">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="corner_radius">
- <dia:real val="0.59999999999999998"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Text" version="1" id="O6">
- <dia:attribute name="obj_pos">
- <dia:point val="29,9"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="21.3113,8.03988;36.6887,9.25146"/>
- </dia:attribute>
- <dia:attribute name="text">
- <dia:composite type="text">
- <dia:attribute name="string">
- <dia:string>#Intermediate root filesystem (initramfs)#</dia:string>
- </dia:attribute>
- <dia:attribute name="font">
- <dia:font family="Latin Modern Sans" style="80" name="Courier"/>
- </dia:attribute>
- <dia:attribute name="height">
- <dia:real val="1.0583332926034927"/>
- </dia:attribute>
- <dia:attribute name="pos">
- <dia:point val="29,9"/>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#000000ff"/>
- </dia:attribute>
- <dia:attribute name="alignment">
- <dia:enum val="1"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="valign">
- <dia:enum val="3"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Text" version="1" id="O7">
- <dia:attribute name="obj_pos">
- <dia:point val="29,10"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="21.585,9.12065;36.415,16.903"/>
- </dia:attribute>
- <dia:attribute name="text">
- <dia:composite type="text">
- <dia:attribute name="string">
- <dia:string>#
-No special driver required to access it
-Contains all the modules to access the specific
-storage and filesytem of the device
-Load such modules
-and mount the new root filesystem
-
-#</dia:string>
- </dia:attribute>
- <dia:attribute name="font">
- <dia:font family="Latin Modern Sans" style="0" name="Courier"/>
- </dia:attribute>
- <dia:attribute name="height">
- <dia:real val="0.95249996334314346"/>
- </dia:attribute>
- <dia:attribute name="pos">
- <dia:point val="29,10"/>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#000000ff"/>
- </dia:attribute>
- <dia:attribute name="alignment">
- <dia:enum val="1"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="valign">
- <dia:enum val="3"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Box" version="0" id="O8">
- <dia:attribute name="obj_pos">
- <dia:point val="20,18"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="19.95,17.95;38.05,21.05"/>
- </dia:attribute>
- <dia:attribute name="elem_corner">
- <dia:point val="20,18"/>
- </dia:attribute>
- <dia:attribute name="elem_width">
- <dia:real val="18"/>
- </dia:attribute>
- <dia:attribute name="elem_height">
- <dia:real val="3"/>
- </dia:attribute>
- <dia:attribute name="border_width">
- <dia:real val="0.10000000149011612"/>
- </dia:attribute>
- <dia:attribute name="border_color">
- <dia:color val="#d9cb2fff"/>
- </dia:attribute>
- <dia:attribute name="inner_color">
- <dia:color val="#fff8a8ff"/>
- </dia:attribute>
- <dia:attribute name="show_background">
- <dia:boolean val="true"/>
- </dia:attribute>
- <dia:attribute name="corner_radius">
- <dia:real val="0.59999999999999998"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Text" version="1" id="O9">
- <dia:attribute name="obj_pos">
- <dia:point val="29,19.05"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="25.05,18.0899;32.95,19.3015"/>
- </dia:attribute>
- <dia:attribute name="text">
- <dia:composite type="text">
- <dia:attribute name="string">
- <dia:string>#Final root filesystem#</dia:string>
- </dia:attribute>
- <dia:attribute name="font">
- <dia:font family="Latin Modern Sans" style="80" name="Courier"/>
- </dia:attribute>
- <dia:attribute name="height">
- <dia:real val="1.0583332926034927"/>
- </dia:attribute>
- <dia:attribute name="pos">
- <dia:point val="29,19.05"/>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#000000ff"/>
- </dia:attribute>
- <dia:attribute name="alignment">
- <dia:enum val="1"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="valign">
- <dia:enum val="3"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Text" version="1" id="O10">
- <dia:attribute name="obj_pos">
- <dia:point val="28.9362,20.3975"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="25.2912,19.5182;32.5812,20.633"/>
- </dia:attribute>
- <dia:attribute name="text">
- <dia:composite type="text">
- <dia:attribute name="string">
- <dia:string>#Regular system startup#</dia:string>
- </dia:attribute>
- <dia:attribute name="font">
- <dia:font family="Latin Modern Sans" style="0" name="Courier"/>
- </dia:attribute>
- <dia:attribute name="height">
- <dia:real val="0.95249996334314346"/>
- </dia:attribute>
- <dia:attribute name="pos">
- <dia:point val="28.9362,20.3975"/>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#000000ff"/>
- </dia:attribute>
- <dia:attribute name="alignment">
- <dia:enum val="1"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="valign">
- <dia:enum val="3"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Line" version="0" id="O11">
- <dia:attribute name="obj_pos">
- <dia:point val="29,16"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="28.6382,15.95;29.3618,18.05"/>
- </dia:attribute>
- <dia:attribute name="conn_endpoints">
- <dia:point val="29,16"/>
- <dia:point val="29,18"/>
- </dia:attribute>
- <dia:attribute name="numcp">
- <dia:int val="1"/>
- </dia:attribute>
- <dia:attribute name="end_arrow">
- <dia:enum val="22"/>
- </dia:attribute>
- <dia:attribute name="end_arrow_length">
- <dia:real val="0.5"/>
- </dia:attribute>
- <dia:attribute name="end_arrow_width">
- <dia:real val="0.5"/>
- </dia:attribute>
- <dia:connections>
- <dia:connection handle="0" to="O5" connection="6"/>
- <dia:connection handle="1" to="O8" connection="1"/>
- </dia:connections>
- </dia:object>
- </dia:layer>
-</dia:diagram>
diff --git a/slides/sysdev-linux-intro-modules/sysdev-linux-intro-modules.tex b/slides/sysdev-linux-intro-modules/sysdev-linux-intro-modules.tex
deleted file mode 100644
index 22f767d3..00000000
--- a/slides/sysdev-linux-intro-modules/sysdev-linux-intro-modules.tex
+++ /dev/null
@@ -1,153 +0,0 @@
-\subsection{Using kernel modules}
-
-\begin{frame}
- \frametitle{Advantages of modules}
- \begin{columns}
- \column{0.7\textwidth}
- \begin{itemize}
- \item Modules make it easy to develop drivers without rebooting:
- load, test, unload, rebuild, load...
- \item Useful to keep the kernel image size to the minimum (essential
- in GNU/Linux distributions for PCs).
- \item Also useful to reduce boot time: you don't spend time
- initializing devices and kernel features that you only need later.
- \item Caution: once loaded, have full control and privileges in the
- system. No particular protection. That's why only the \code{root} user
- can load and unload modules.
- \item To increase security, possibility to allow only signed modules,
- or to disable module support entirely.
- \end{itemize}
- \column{0.3\textwidth}
- \includegraphics[width=\textwidth]{slides/sysdev-linux-intro-modules/modules-to-access-rootfs.pdf}
- \end{columns}
-\end{frame}
-
-\begin{frame}
- \frametitle{Module dependencies}
- \begin{itemize}
- \item Some kernel modules can depend on other modules,
- which need to be loaded first.
- \item Example: the \code{ubifs} module depends on the
- \code{ubi} and \code{mtd} modules.
- \item Dependencies are described
- both in \code{/lib/modules/<kernel-version>/modules.dep}
- and in \code{/lib/modules/<kernel-version>/modules.dep.bin} (binary hashed format)\\
- These files are generated when you run \code{make modules_install}.
- \end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{Kernel log}
-
- When a new module is loaded, related information is available in the
- kernel log.
- \begin{itemize}
- \item The kernel keeps its messages in a circular buffer (so that it
- doesn't consume more memory with many messages)
- \item Kernel log messages are available through the \code{dmesg}
- command ({\bf d}iagnostic {\bf mes}sa{\bf g}e)
- \item Kernel log messages are also displayed in the system console
- (console messages can be filtered by level using the
- \code{loglevel} kernel command line parameter,
- or completely disabled with the
- \code{quiet} parameter). Example:\\
- \code{console=ttyS0 root=/dev/mmcblk0p2 loglevel=5}
- \item Note that you can write to the kernel log from user space too.
- That's useful when your device's serial console is being monitored
- for critical messages:
- \code{echo "<n>Debug info" > /dev/kmsg}
- \end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{Module utilities (1)}
- \code{<module_name>}: name of the module file without the trailing \code{.ko}\\
- \begin{itemize}
- \item \code{modinfo <module_name>} (for modules in \code{/lib/modules})\\
- \code{modinfo <module_path>.ko}\\
- Gets information about a module without loading it: parameters, license,
- description and dependencies.\\
- \item \code{sudo insmod <module_path>.ko}\\
- Tries to load the given module. The full path to the module object
- file must be given.
- \end{itemize}
-\end{frame}
-
-\begin{frame}[fragile]
- \frametitle{Understanding module loading issues}
- \begin{itemize}
- \item When loading a module fails, \code{insmod} often doesn't give
- you enough details!
- \item Details are often available in the kernel log.
- \item Example:\\
-\scriptsize
-\begin{verbatim}
-$ sudo insmod ./intr_monitor.ko
-insmod: error inserting './intr_monitor.ko': -1 Device or resource busy
-$ dmesg
-[17549774.552000] Failed to register handler for irq channel 2
-\end{verbatim}
- \end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{Module utilities (2)}
- \begin{itemize}
- \item \code{sudo modprobe <top_module_name>}\\
- Most common usage of \code{modprobe}: tries to load all the
- dependencies of the given top module, and then this module. Lots of
- other options are available. \code{modprobe} automatically looks in
- \code{/lib/modules/<version>/} for the object file corresponding
- to the given module name.
- \item \code{lsmod}\\
- Displays the list of loaded modules\\
- Compare its output with the contents of \code{/proc/modules}!
- \end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{Module utilities (3)}
- \begin{itemize}
- \item \code{sudo rmmod <module_name>}\\
- Tries to remove the given module.\\
- Will only be allowed if the module is no longer in use (for
- example, no more processes opening a device file)
- \item \code{sudo modprobe -r <top_module_name>}\\
- Tries to remove the given top module and all its no longer needed dependencies
- \end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{Passing parameters to modules}
- \begin{itemize}
- \item Find available parameters:\\
- \code{modinfo usb-storage}
- \item Through \code{insmod}:\\
- \code{sudo insmod ./usb-storage.ko delay_use=0}
- \item Through \code{modprobe}:\\
- Set parameters in \code{/etc/modprobe.conf} or in any file in \code{/etc/modprobe.d/}:\\
- \code{options usb-storage delay_use=0}
- \item Through the kernel command line, when the driver is built statically into the kernel:\\
- \code{usb-storage.delay_use=0}
- \begin{itemize}
- \item \code{usb-storage} is the {\em driver name}
- \item \code{delay_use} is the {\em driver parameter name}. It
- specifies a delay before accessing a USB storage device (useful for
- rotating devices).
- \item \code{0} is the {\em driver parameter value}
- \end{itemize}
- \end{itemize}
-\end{frame}
-
-\begin{frame}
- \frametitle{Check module parameter values}
- How to find/edit the current values for the parameters of a loaded module?
- \begin{itemize}
- \item Check \code{/sys/module/<name>/parameters}.
- \item There is one file per parameter, containing the parameter value.
- \item Also possible to change parameter values if these files have
- write permissions (depends on the module code).
- \item Example:\\
- \code{echo 0 > /sys/module/usb_storage/parameters/delay_use}
- \end{itemize}
-\end{frame}
More information about the training-materials-updates
mailing list