вот простой программный код модуля.Программирование модулей в linux
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include <linux/init.h> /* Needed for the macros */
static int hello3_data __initdata = 3;
static int __init hello_3_init(void)
{
printk(KERN_INFO "Hello, world %d\n", hello3_data);
return 0;
}
static void __exit hello_3_exit(void)
{
printk(KERN_INFO "Goodbye, world %d\n",hello3_data);
}
module_init(hello_3_init);
module_exit(hello_3_exit);
Я инициализирует переменную с __initdata
макро и функции с __init
. когда я сделал insmod
, модуль был вставлен, и я смог увидеть сообщение журнала (/ var/log/messages). Но, когда я сделал rmmod
, он не смог его удалить, и он говорит Resource busy
.
My question is does the `modules_init` function cleans the memory of `hello3_data`??
or it is done by `module_exit`??.
Кто-то, пожалуйста, объясните.
Спасибо. вот что я хотел знать. BTW написано в/linux/init.h, что '#define __initdata __section (.init.data)', можете ли вы его уточнить, как ядро знает, что оно должно использоваться только в функции '__init'. –
@RajuKundhe См. Мой недавно отредактированный ответ. – starrify
Спасибо большое. это помог. !! –