# [FE training-materials-updates] kernel labs: update the simple module lab

Michael Opdenacker michael.opdenacker at free-electrons.com
Thu Oct 3 06:44:54 CEST 2013

Repository : git://git.free-electrons.com/training-materials.git

On branch  : kernel-ng

>---------------------------------------------------------------

commit 3ee5f6823838496d26ec45e4d1a53579ee9161e9
Author: Michael Opdenacker <michael.opdenacker at free-electrons.com>
Date:   Thu Oct 3 06:44:01 2013 +0200

kernel labs: update the simple module lab

- According to our new board and development environment

Signed-off-by: Michael Opdenacker <michael.opdenacker at free-electrons.com>

>---------------------------------------------------------------

3ee5f6823838496d26ec45e4d1a53579ee9161e9
.../kernel-i2c-device-model.tex                    |    2 +-
labs/kernel-module-simple/kernel-module-simple.tex |   74 ++++++++++++++------
2 files changed, 55 insertions(+), 21 deletions(-)

diff --git a/labs/kernel-i2c-device-model/kernel-i2c-device-model.tex b/labs/kernel-i2c-device-model/kernel-i2c-device-model.tex
index acc4fb2..5fe4773 100644
--- a/labs/kernel-i2c-device-model/kernel-i2c-device-model.tex
+++ b/labs/kernel-i2c-device-model/kernel-i2c-device-model.tex
@@ -17,7 +17,7 @@ device/driver match.
\section{Setup}

Go to the \code{~/felabs/linux/src/linux} directory. Check out the
-\code{3.11.y-bbb} branch if needed.
+\code{3.11.y-bbb} branch.

Now create a new \code{nunchuk} branch starting from the
\code{3.11.y-bbb} branch,  for your upcoming work on the nunchuk
diff --git a/labs/kernel-module-simple/kernel-module-simple.tex b/labs/kernel-module-simple/kernel-module-simple.tex
index afd7630..2ae8012 100644
--- a/labs/kernel-module-simple/kernel-module-simple.tex
+++ b/labs/kernel-module-simple/kernel-module-simple.tex
@@ -12,16 +12,16 @@ After this lab, you will be able to:

\section{Setup}

-Stay inside the \code{\$HOME/felabs/linux/modules} directory.
-Boot your board again, as you did in the previous lab.
+Go to the \code{~/felabs/linux/modules/nfsroot/root/hello} directory.

\section{Writing a module}

-Go to the \code{nfsroot/root} directory. All the files you generate
+Look at the contents of the current directory. All the files you generate
there will also be visible from the target. That's great to load
modules!

-Create a \code{hello_version.c} file implementing a module which
+Add C code to the \code{hello_version.c} file, to implement a module which
displays this kind of message when loaded:

\begin{verbatim}
@@ -46,20 +46,20 @@ build modules outside a kernel source tree.  Compile your module.

+Load your new module file on the target. Check that it works as
expected. Until this, unload it, modify its code, compile and load it
again as many times as needed.

Run a command to check that your module is on the list of loaded
-modules. Now, try to get the list of loaded modules with only the cat
-command.
+modules. Now, try to get the list of loaded modules with only the
+\code{cat} command.

+\code{Hello <who>} instead of \code{Hello Master}.

- Compile and test your module by checking that it takes the who
+Compile and test your module by checking that it takes the \code{who}
parameter into account when you load it.

@@ -85,7 +85,7 @@ Run the \code{scripts/checkpatch.pl -h} command in the kernel sources,
to find which options are available.  Now, run:

\begin{verbatim}
-scripts/checkpatch.pl --file --no-tree <path>/hello_version.c
+~/felabs/linux/src/linux/scripts/checkpatch.pl --file --no-tree hello_version.c
\end{verbatim}

See how many violations are reported on your code. If there are
@@ -97,6 +97,10 @@ sudo apt-get install indent
indent -linux hello_version.c
\end{verbatim}

+Caution: don't run \code{indent} when you modify source files created
+by other people. Otherwise, people won't be able to distinguish your own
+changes from the ones made by \code{indent}.
+
You can now compare the indented file with the original:

\begin{verbatim}
@@ -109,20 +113,33 @@ no errors left.

\section{Adding the {\tt hello\_version} module to the kernel sources}

+As we are going to make changes to the kernel sources, first create a
+special branch for such changes:
+
+\begin{verbatim}
+git checkout 3.11.y-bbb
+git checkout -b hello
+\end{verbatim}
+
kernel sources. Of course, also modify kernel configuration and
building files accordingly, so that you can select your module in
\code{make xconfig} and have it compiled by the \code{make} command.

-Configure your kernel with the config file corresponding to your
-running kernel. Now check that the configuration interface shows your
-new driver and lets you configure it as a module.
+Run the one of the kernel configuration interfaces and check that it
+shows your new driver lets you configure it as a module.

Run the \code{make} command and make sure that the code of your new
-driver is getting compiled. Then, install your kernel module using
-\code{make modules_install}. Beware, the modules should be installed
-in the root filesystem of the target, not in the root filesystem of
+driver is getting compiled.
+
+Then, commit your changes in the current branch (try to choose an
+appropriate commit message):
+
+\begin{verbatim}
+cd ~/felabs/linux/src/linux
+git commit -as
+\end{verbatim}

\section{Create a kernel patch}

@@ -130,5 +147,22 @@ You can be proud of your new module! To be able to share it with
others, create a patch which adds your new files to the mainline
kernel.

-Test that your patch file is compatible with the patch command by
-applying it to unmodified kernel sources.
+Creating a patch with \code{git} is extremely easy! You just generate it
+from the commits between your branch and another branch, usually the
+one you started from:
+
+\begin{verbatim}
+git format-patch 3.11.y-bbb
+\end{verbatim}
+
+Have a look at the generated file. You can see that its name reused
+the commit message.
+
+If you want to change the last commit message at this stage, you
+can run:
+
+\begin{verbatim}
+git commit --amend
+\end{verbatim}
+
+And run \code{git format-patch} again.