Ядро Linux допускает стек модулей, что в основном означает, что один модуль может использовать символы, определенные в других модулях.Но это возможно только тогда, когда символы экспортируются.Давайте воспользуемся очень простым модулем hello world.В этом модуле мы добавили функцию с именем «hello_export» и использовали макрос EXPORT_SYMBOL для экспорта этой функции.
hello_export.c
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_INFO "Hello,world");
return 0;
}
static hello_export(void) {
printk(KERN_INFO "Hello from another module");
return 0;
}
static void hello_exit(void)
{
printk(KERN_INFO "Goodbye cruel world");
}
EXPORT_SYMBOL(hello_export);
module_init (hello_init);module_exit (hello_exit);Подготовьте Makefile, скомпилируйте его с помощью команды make, а затем вставьте его в ядро с помощью insmod.$ insmod hello_export.ko Все символы, которые известны ядру, перечислены в / proc / kallsyms.Давайте поищем наш символ в этом файле.
$ cat / proc / kallsyms |grep hello_export d09c4000 T hello_export [hello_export]
Из результатов мы видим, что экспортированный нами символ указан в символах, распознаваемых ядром.