LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1061|回复: 12

模块编程

[复制链接]
发表于 2004-5-18 12:32:46 | 显示全部楼层 |阅读模式
我想问一个模块编程的问题,我要在模块里加入一个系统调用,可总是提示不能解析sys_call_table[],请问是什么原因呢?
我用的是2.4.20-8版本内核
发表于 2004-5-20 01:07:53 | 显示全部楼层
请给出具体代码段。
ps:系统调用涉及的头文件都被包含进来了吗?
 楼主| 发表于 2004-5-20 09:21:48 | 显示全部楼层
当然包含了,错误的原因是2.4.18后的版本已经不再导出sys_call_table了。所以加系统调用就困难了,也不知道怎么解决。你看另一个贴子,有人回过,但我试了,不行的。
发表于 2004-5-20 09:27:12 | 显示全部楼层
:ask
ksyms -a
有输出吗?
 楼主| 发表于 2004-5-20 09:33:22 | 显示全部楼层
这有关系吗,如果sys_call_table不再导出,我就没法添加自己的系统调用了,我为什么要在那里面输出呢?
发表于 2004-5-20 09:38:48 | 显示全部楼层
呵呵,原来你想要做自己的系统调用,我理解错误了(我以为你不能使用系统调用)。不好意思。
为什么不参考一下模块软件比如说alsa的源码呢?
 楼主| 发表于 2004-5-20 09:43:49 | 显示全部楼层
alsa是什么呢,可否提供一些资料,还有我可否问一些其他问题。
就是内核空间和用户空间通信的问题,有哪些方法
发表于 2004-5-20 12:22:45 | 显示全部楼层
alsa是Linux的通用声卡驱动啊,它以模块的形式驱动声卡。比如说xmms就有alsa的插件。你可以参考一下alsa究竟如何创建自己的系统调用的。

ps:内核空间与用户空间的通信估计只能使用信号以及系统调用
 楼主| 发表于 2004-5-20 12:26:47 | 显示全部楼层
我可以直接用系统定义好的,比如说read、write了,可是我总是搞不明白,系统和用户是怎样传数据的,我在用户态的调用,怎么才能在核心得到呢〉?
发表于 2004-5-20 12:40:07 | 显示全部楼层
最初由 wzy123 发表
我可以直接用系统定义好的,比如说read、write了,可是我总是搞不明白,系统和用户是怎样传数据的,我在用户态的调用,怎么才能在核心得到呢〉?

系统调用被转换为INT 0x80中断请求,以内核态进入system_call,根据system_call_table中的表项来执行函数程序。

ps:其实理论是挺抽象的,你不如把你的一些代码片段给出来,大家讨论一下吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表