15、编写你的第一个内核模块 - LKMs 第1部分

编写你的第一个内核模块 - LKMs 第1部分

1. 内核模块初始化返回值

当内核模块初始化失败时,若返回 -ENOMEM 值,在用户空间该值会返回给 glibc glibc 中有一些“粘合”代码会将此值乘以 -1 ,并将全局整数 errno 设置为该结果。此时, [f]init_module(2) 系统调用将返回 -1 ,表示失败。这是因为 insmod(8) 实际上会调用此系统调用。 errno 将被设置为 ENOMEM ,反映出内核模块插入因内存分配失败而失败。

相反,框架期望初始化函数成功时返回值为 0 。在较旧的内核版本中,成功时未返回 0 会导致内核模块从内核内存中突然卸载。如今,虽然不会卸载内核模块,但内核会发出警告消息,提示返回了可疑的非零值。

2. 清理例程

清理例程不接收参数,也不返回任何值( void )。其作用是在将内核模块从内核内存中卸载之前执行所有必要的清理操作。如果内核模块中不包含 module_exit() 宏,那么除非系统关机或重启,否则将无法卸载该模块。不过,这种阻止卸载的行为只有在将 CONFIG_MODULE_FORCE_UNLOAD 内核配置标志设置为禁用(默认设置)时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值