Linux内核开发教程:强制卸载内核模块技术详解.pptxVIP

  • 2
  • 0
  • 约1.57千字
  • 约 7页
  • 2026-02-06 发布于北京
  • 举报

Linux内核开发教程:强制卸载内核模块技术详解.pptx

Linux内核?

第二十八讲强制卸载内核模块主讲人:赵亚华章培训网、[]华章培训网

删除内核模块第2页一、内核模块删除 1、内核模块不再使用的时候需要删除 2、删除的时候可能出现问题 2.1、由于内核模块自身有bug 2.2、由于还有其它内核路径使用该模块 3、解析内核模块删除代码sys_delete_module

删除内核模块第3页二、强制删除内核模块 1、在内核模块中没有什么不可能 2、不能卸载的模块实例: static?DECLARE_COMPLETION(pletion);??int?init_module()??{??????????return?0;??}??void?cleanup_module(?)??{??????pletion(pletion);??}??MODULE_LICENSE(GPL);??

删除内核模块第4页 3、如何卸载上述不能卸载的模块实例: void?force(void)??{ }?? int?__init?rm_init(void)??{?????????? struct?module?*mod?=?(struct?module*)0xf88de380;????????? int?i;????????? int?o=0;?????????? mod-state?=?MODULE_STATE_LIVE;????????? mod-exit?=?force;???? for?(i?=?0;?i??NR_CPUS;?i++)?{????????????????? mod-ref[i].count?=?*(local_t?*)o;?????????? }?????????? return?0;?? }?? void?__exit?rm_exit(void)??{}?? module_init(rm_init);?? module_exit(rm_exit);?? MODULE_LICENSE(GPL);??

删除内核模块第5页 4、清除掉阻塞状态的rmmod进程: 由于rmmod睡眠在了等待完成状态,因此必须唤醒 它。 int?(*try)(task_t?*?p,?unsigned?int?state,?int?sync);?? int?__init?rm_init(void){?????????? struct?task_struct?*tsk?=?find_task_by_pid(28792);??????????? try=0xc011a460;?? (*try)(tsk,?TASK_INTERRUPTIBLE,?0);??? return?0;?? }?? void?__exit?rm_exit(void){??}?? module_init(rm_init);?? module_exit(rm_exit);?? MODULE_LICENSE(GPL);??

删除内核模块第6页 5、问题 上述的方式可能会OOPS,然而这是没有问题的。 不管怎样,一个进程的oops一般是没有问题的,因 此还是可以清除它的,这种oops一般不会破坏其它 的内核数据,一般都是由于引用已经被free的指针 引起的(当然可能有危险情况)。既然知道这些 rmmod都是阻塞在睡眠里面,那么我们只需 要强制唤 醒它们就可以了,至于说被唤醒后oops了怎么办? 由内核处理,或者听天由命!

感谢您对华章培训网的支持!.

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档