I’ve created import-kernel-symbols,
which is a tiny python script to generate headers importing non-exported (non
EXPORT_SYMBOL decorated) kernel symbols.
When crafting / testing / experimenting kernel modules, occationally you need to call non-exported kernel symbols.
If you can call non-exported symbols without attaching
EXPORT_SYMBOL to those symbols, you can try using these functions without modifying / recompiling the kernel.
In addition to this benefit, you can keep your kernel module simple, loadable and external. It’s a desirable feature for in-house kernel modules. (When you to upstream it, you simply modify the kernel :))
This python script generates references to the specified non-exported symbols.
It extracts symbol kernel space address from
System.map, and generates header for easy use.
First you need to create the importing header template,
imported.h.in. This sample is located under
1 2 3 4 5 6 7 8 9 10 11
Next, passing it and appropriate
System.map is a file containing symbols and addresses in kernel itself. Typically (in Ubuntu case) it is located under
/boot/System.map-$(uname -r), or
Note that this
System.map file permission is sometimes set as
-rw------- with owner
root. In this case, you need to
sudo to read
System.map or change permission of this file.
After hitting the command such as
python import-kernel-symbols.py imported.h.in System.map, it will dump the generated header. The example is below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
OK! Now, since all symbols are resolved by this header correctly, you can call the hidden symbol via special syntax.
In the case of
Note that since it skips
EXPORT_SYMBOL_GPL license check, take care of the license of your module.
In this case, maybe, releasing code as
GPL is the most conservative approach I think.
Happy Hacking ;)