设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
Linux 程序设计专题讨论
›
驱动里边可以用open()系统调用或者fopen()库函数吗? ...
返回列表
查看:
967
|
回复:
9
驱动里边可以用open()系统调用或者fopen()库函数吗?
[复制链接]
macarthor
macarthor
当前离线
积分
1551
IP卡
狗仔卡
发表于 2005-10-14 09:27:13
|
显示全部楼层
|
阅读模式
rt
thx
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
rickxbx
rickxbx
当前离线
积分
1256
IP卡
狗仔卡
发表于 2005-10-14 10:43:38
|
显示全部楼层
Post by
macarthor
rt
thx
fopen不能使用
open 一般情况下不能使用,下面便是一个原因:
fs/namei.c do_getname():
119 if ((unsigned long) filename >= TASK_SIZE) {
120 if (!segment_eq(get_fs(), KERNEL_DS))
121 return -EFAULT;
122 } else if (TASK_SIZE - (unsigned long) filename < PATH_MAX)
123 len = TASK_SIZE - (unsigned long) filename;
复制代码
回复
支持
反对
使用道具
举报
显身卡
macarthor
macarthor
当前离线
积分
1551
IP卡
狗仔卡
楼主
|
发表于 2005-10-14 10:52:00
|
显示全部楼层
What's THIS???
另外,可以讲讲不能用的原因吗?或者给个链接,谢谢
回复
支持
反对
使用道具
举报
显身卡
rickxbx
rickxbx
当前离线
积分
1256
IP卡
狗仔卡
发表于 2005-10-14 11:11:16
|
显示全部楼层
fopen 不能用是肯定的,她是c库函数,需要动态链接,在fopen里面又会调用其他的c库函数,驱动程序没有c库支持.
open事实上不能直接用,当然可以通过自己写一个_syscall3原型就能用了,但是用了可能会失败,上面那一段代码就是会失败的一个原因.filename会>TASK_SIZE,然后下面那个if语句也可能成立.这就要看你在什么环境下怎么用这个open了
回复
支持
反对
使用道具
举报
显身卡
macarthor
macarthor
当前离线
积分
1551
IP卡
狗仔卡
楼主
|
发表于 2005-10-14 11:20:43
|
显示全部楼层
那驱动里我要访问一个文件,比如read/write/seek一个文件/root/test.txt,该怎么办呢?
回复
支持
反对
使用道具
举报
显身卡
rickxbx
rickxbx
当前离线
积分
1256
IP卡
狗仔卡
发表于 2005-10-14 11:50:31
|
显示全部楼层
文件名通过用户空间的指针传进内核就可以了
回复
支持
反对
使用道具
举报
显身卡
macarthor
macarthor
当前离线
积分
1551
IP卡
狗仔卡
楼主
|
发表于 2005-10-14 12:04:18
|
显示全部楼层
能给具体讲讲吗?谢谢!
回复
支持
反对
使用道具
举报
显身卡
nait
nait
当前离线
积分
952
IP卡
狗仔卡
发表于 2005-10-16 10:51:21
|
显示全部楼层
内核你不是有相应的函数吗
open对应sys_open
write对应sys_write
等等,以前做课设用过,现在不是很记得了
回复
支持
反对
使用道具
举报
显身卡
nait
nait
当前离线
积分
952
IP卡
狗仔卡
发表于 2005-10-16 10:52:16
|
显示全部楼层
cat /proc/kallsyms
看一下
回复
支持
反对
使用道具
举报
显身卡
rickxbx
rickxbx
当前离线
积分
1256
IP卡
狗仔卡
发表于 2005-10-16 14:52:19
|
显示全部楼层
Post by
macarthor
能给具体讲讲吗?谢谢!
看你怎么用这个驱动程序了,如果按照通常的读写,可以考虑通过read或者write的buffer传进去.
其实不这样也行,在open之前先orig=get_fs(),set_fs(KERNEL_DS),最后再set_fs(orig),如果按照楼上的说法,只能这样做了.
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
SuSE Linux
服务器架设、应用、维护
shell进阶应用、shell编程
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表