驱动都是从 module_init (...); 开始

iguest 2010-08-04 10:11:29
从 module_exit (...); 退出的吗?
...全文
652 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
guopeixin 2010-08-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wwwunix 的回复:]
是的。
装载时(insmod),调用module_init(...)中说明的函数。
卸载时(rmmod),调用module_exit(...)中说明的函数。
[/Quote]
木错,就如这位大侠所说,必须的
iguest 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 iguest 的回复:]
是每个驱动代码中都必须有一个 module_init(...); 和 module_exit(...); 还是会有其它开工的init和exit?
[/Quote]


还会有其它形式的init和exit吗?


抱歉,上面打错了。



iguest 2010-08-04
  • 打赏
  • 举报
回复
是每个驱动代码中都必须有一个 module_init(...); 和 module_exit(...); 还是会有其它开工的init和exit?

Linux-Torvalds 2010-08-04
  • 打赏
  • 举报
回复
module_init和module_exit虽然很多时候连在一起,但是它们之间却是很“遥远的”~~
nommm 2010-08-04
  • 打赏
  • 举报
回复
module_init和module_exit是模块加载和卸载,在加载和卸载模块时被系统调用,加载了以后你还要创建设备节点,然后才能使用驱动,3楼的例子只是用一个最简单的例子给你演示模块的加载和卸载而已,不过没有输出,你可以用printk输出一点东西看看。
iguest 2010-08-04
  • 打赏
  • 举报
回复
搞错了,上面那个编译出来了。

Makefile是下面这样的:


obj-m := calculate.o
iguest 2010-08-04
  • 打赏
  • 举报
回复
4.6 导出符号中的源码,书中没有讲如何编译。
iguest 2010-08-04
  • 打赏
  • 举报
回复
Linux 设备驱动开发详解

代码:


#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE ("Dual BSD/GPL");

int add_integar (int a, int b)
{
return a+b;
}


int sub_integar (int a, int b)
{
return a-b;
}

EXPORT_SYMBOL (add_integar);
EXPORT_SYMBOL (sub_integar);


Makefile:


obj-m := calculate


编译:make -C /kernelcode/linux-2.6.10 M=$(pwd) modules

编译信息:


make: Entering directory `/home/kernelcode/linux-2.6.10'
scripts/Makefile.build:195: target `/home/test_project/calculate/calculate' doesn't match the target pattern
CC [M] /home/matthew/test_project/calculate/calculate
gcc: no input files
make[1]: *** [/home/test_project/calculate/calculate] Error 1
make: *** [_module_/home/test_project/calculate] Error 2
make: Leaving directory `/home/matthew/linux-2.6.10'
[root@localhost calculate]#


这个要怎么编译?

wwwunix 2010-08-04
  • 打赏
  • 举报
回复
是的。
装载时(insmod),调用module_init(...)中说明的函数。
卸载时(rmmod),调用module_exit(...)中说明的函数。
iguest 2010-08-04
  • 打赏
  • 举报
回复
如果不是,那么os如何调用驱动?
jxj141 2010-08-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 iguest 的回复:]
引用 8 楼 iguest 的回复:
是每个驱动代码中都必须有一个 module_init(...); 和 module_exit(...); 还是会有其它开工的init和exit?



还会有其它形式的init和exit吗?


抱歉,上面打错了。
[/Quote]
每个驱动都必须有的。驱动加载的时候调用 module_init(...); 的函数,卸载时调用module_exit(...); 中的函数。
gowyz 2010-08-04
  • 打赏
  • 举报
回复
学习了

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧