首页 > 其他 > 详细

第八章随笔

时间:2016-07-03 21:28:11      阅读:125      评论:0      收藏:0      [点我收藏+]

读书笔记:

第八章:

    如果a.c使用了b.c文件中的函数,需要在a.c文件中使用extern预先定义b.c中的函数,extern的作用就是告诉编译器该函数的函数名,参数个数,参数类型和返回值类型,等到a.o和b.o链接成可执行文件或程序时,编译器再到b.o中寻找函数的具体实现,也就是说,extern只在编译阶段起作用;

    由于symbol_consumer驱动使用了symbol_producer驱动中导出的符号,因此,在安装symbol_consumer之前,需要先安装symbol_producer,卸载时顺序正好相反;

    modprobe命令会根据depmod命令生成的linux模块依赖关系来装载linux模块;

    卸载linux驱动:

    当卸载函数被阻塞时,rmmod命令也会被阻塞,也就是永远不会执行到卸载linux驱动模块的代码:

    (1)引用计数器的值和引用者不一致,实际上引用者是不存在的,因此,只需要将当前的linux驱动模块的引用计数器清零即可;

     (2)将原来的卸载函数替换成一个空的卸载函数即可;

上面的两种情况都需要获取表示要卸载的linux驱动模块的module结构体指针,struct module表示了linux驱动的相关信息,从/proc/kallsyms文件中查找系统分配给要卸载的linux驱动的module结构体的首地址,然后将首地址强行转换成module结构体指针。

 

第八章随笔

原文:http://www.cnblogs.com/qiekaifanqie/p/5638681.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!