微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

内核模块初始化和退出函数调用顺序错误

我正在做一个非常简单的hello世界内核模块,并得到一些疯狂的行为。 这工作,直到我升级到内核3.3.8,现在它…呃,它是在退出调用init函数,并在初始化的exitfunction。 我确定我的名字是正确的

// Needed for module deFinitions #include <linux/module.h> // Needed for initilization modules #include <linux/init.h> // Must declare some license MODULE_LICENSE("Dual BSD/GPL"); // Function to be called on insmod // Returns 0 on success static int __init mymod_init(void) { // Prints kernel alert. Check /var/log/syslog printk(KERN_ALERT "Module was loaded,this is the printk."); return 0; } // Function to be called on rmmod static void __exit mymod_exit(void) { // Prints kernel alert. Check /var/log/syslog printk(KERN_ALERT "Module was unloaded,this is the printk"); } // Register these functions module_init(mymod_init); module_exit(mymod_exit);

示例输出

root @ cop4610:/home/cop4610/Downloads/linux-3.3.8/mymodule# insmod mymodule.ko root @ cop4610:/home/cop4610/Downloads/linux-3.3.8/mymodule# tail / var / log / syslog Oct 12 10:08:20 cop4610内核:[633.567832]模块被卸载了,这是printk

以下是现场直播的video: http : //www.youtube.com/watch?v= 8aJNSpCd7as&feature= youtu.be

当kthread_run失败时,为什么linux内核的kref文件省略了kref_put

从Linux内核运行外部二进制文件

如何从用户空间调用compat ioctl? 有谁可以请提供一些实例吗?

Linux DMA:使用DMA引擎进行分散收集事务

为什么我们可以从disPATCH LEVEL或以上的非分页池访问内存

Linux内核设备驱动程序中的分散 – 收集列表

如何debuggingARM Linux内核(msleep())locking?

Android – 读取“设备属性”失败,错误“无效的长度”

__udivdi3 undefined – 如何find使用它的代码

g_mass_storage虚拟usb设备性能非常低

它需要一个换行符!!!!!! Arrggg!

printk(KERN_ALERT "modulee was unloaded,this is the printkn");

printk(KERN_ALERT "modulee was loaded,this is the printkn");

看起来并没有把它们搞乱,只是看起来像,因为第一个没有显示出来,直到第二个发出,因为缓冲区没有被刷新。

这是我的基本例子:

#include <linux/module.h> #include <linux/kernel.h> #define MODULE_NAME "hello_md" MODULE_LICENSE("GPL"); MODULE_AUTHOR("B3h3m0th"); MODULE_DESCRIPTION("Basic LKM; hello world module"); MODULE_VERSION("0.0"); static int __init insert_mod(void) { printk(KERN_ALERT "[%s] Init: "Hello World"n",MODULE_NAME); return 0; } static void __exit remove_mod(void) { printk(KERN_ALERT "[%s] Exitn",MODULE_NAME); } module_init(insert_mod); module_exit(remove_mod);

我的基本Makefile:

obj-m += basic_module.o KERNELVERSION = $(shell uname -r) all: $(MAKE) -C /lib/modules/$(KERNELVERSION)/build M=$(PWD) modules clean: $(MAKE) -C /lib/modules/$(KERNELVERSION)/build M=$(PWD) clean

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐