mirror of
https://github.com/sysprog21/lkmpg.git
synced 2025-02-21 18:59:39 +08:00
Revise the version magic descriptions for recent kernels
This commit is contained in:
parent
3c742b0c7c
commit
f7e2186e6b
15
lkmpg.tex
15
lkmpg.tex
@ -255,7 +255,7 @@ sudo rmmod hello_1
|
||||
Notice that the dash was replaced by an underscore.
|
||||
To see what just happened in the logs:
|
||||
\begin{codebash}
|
||||
journalctl --since "1 hour ago" | grep kernel
|
||||
sudo journalctl --since "1 hour ago" | grep kernel
|
||||
\end{codebash}
|
||||
|
||||
You now know the basics of creating, compiling, installing and removing modules.
|
||||
@ -336,8 +336,6 @@ While we are at it, those were exactly the kind of variables that you have set i
|
||||
|
||||
\subsection{The \_\_init and \_\_exit Macros}
|
||||
\label{init_n_exit}
|
||||
This demonstrates a feature of kernel 2.2 and later.
|
||||
Notice the change in the definitions of the init and cleanup functions.
|
||||
The \cpp|__init| macro causes the init function to be discarded and its memory freed once the init function finishes for built-in drivers, but not loadable modules.
|
||||
If you think about when the init function is invoked, this makes perfect sense.
|
||||
|
||||
@ -485,19 +483,18 @@ If you can't think of a case that will force you to use modules for a precompile
|
||||
Now, if you just install a kernel source tree, use it to compile your kernel module and you try to insert your module into the kernel, in most cases you would obtain an error as follows:
|
||||
|
||||
\begin{verbatim}
|
||||
insmod: error inserting 'poet_atkm.ko': -1 Invalid module format
|
||||
insmod: ERROR: could not insert module poet.ko: Invalid module format
|
||||
\end{verbatim}
|
||||
|
||||
Less cryptic information is logged to the systemd journal:
|
||||
|
||||
\begin{verbatim}
|
||||
Jun 4 22:07:54 localhost kernel: poet_atkm: version magic '2.6.5-1.358custom 686
|
||||
REGPARM 4KSTACKS gcc-3.3' should be '2.6.5-1.358 686 REGPARM 4KSTACKS gcc-3.3'
|
||||
kernel: poet: disagrees about version of symbol module_layout
|
||||
\end{verbatim}
|
||||
|
||||
In other words, your kernel refuses to accept your module because version strings (more precisely, version magics) do not match.
|
||||
Incidentally, version magics are stored in the module object in the form of a static string, starting with vermagic:.
|
||||
Version data are inserted in your module when it is linked against the \verb|init/vermagic.o| file.
|
||||
In other words, your kernel refuses to accept your module because version strings (more precisely, \textit{version magic}, see \src{include/linux/vermagic.h}) do not match.
|
||||
Incidentally, version magic strings are stored in the module object in the form of a static string, starting with \cpp|vermagic:|.
|
||||
Version data are inserted in your module when it is linked against the \verb|kernel/module.o| file.
|
||||
To inspect version magics and other strings stored in a given module, issue the command \sh|modinfo module.ko|:
|
||||
|
||||
\begin{verbatim}
|
||||
|
Loading…
x
Reference in New Issue
Block a user