linux driver中调用open函数

我是Android开发者 2011-09-05 03:52:59
我有个问题困扰我很久,我想在driver中open “/dev/mmcblk0” ,然后调用lseek和read函数,去读取sd卡中某个区域的数据,可是我不知道头文件是什么?
有人用过吗?
...全文
536 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
钱国正 2011-09-17
  • 打赏
  • 举报
回复
我现在也遇到这样的情况把应用程序改为驱动的形式,不知道怎么实现
winli_87 2011-09-16
  • 打赏
  • 举报
回复
以后就main 函数名 就知道该多包含哪些头文件了
jjlmonkey 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 zhangjie201412 的回复:]
引用 10 楼 jjlmonkey 的回复:
在kernel里 可以用
#include <linux/fs.h>
struct file *filp_open(const char *filename, int flags, int mode);

file->f_op->read()
file->f_op->write()

但是好像在driver加载过程中,tmpfs没有挂载……
[/Quote]
你是动态加载驱动的话,就可以。
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jjlmonkey 的回复:]
在kernel里 可以用
#include <linux/fs.h>
struct file *filp_open(const char *filename, int flags, int mode);

file->f_op->read()
file->f_op->write()

但是好像在driver加载过程中,tmpfs没有挂载到/dev上,不一定能访问到/dev/block……
[/Quote]这样做真的可以吗?
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xg1410 的回复:]
sys_open
[/Quote]求解释
woshi_ziyu 2011-09-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jjlmonkey 的回复:]

在kernel里 可以用
#include <linux/fs.h>
struct file *filp_open(const char *filename, int flags, int mode);

file->f_op->read()
file->f_op->write()

但是好像在driver加载过程中,tmpfs没有挂载到/dev上,不一定能访问到/dev/bloc……
[/Quote]
+++++++++++++
钱国正 2011-09-06
  • 打赏
  • 举报
回复
驱动中调用可以直接使用系统调用啊
leerobin83 2011-09-06
  • 打赏
  • 举报
回复
LZ,你直接调用mmc的read write函数或者mmc再写个接口给自己用不就行了
jason-xu 2011-09-06
  • 打赏
  • 举报
回复
驱动里不能调用的open等函数的,这个是应用层接口函数,其实你要读mmcblock的数据其实直接通过调用SD卡驱动的读写函数和lseek函数来实现
lr2131 2011-09-06
  • 打赏
  • 举报
回复
open("/dev/mmcblk0",O_RDWR);
xg1410 2011-09-06
  • 打赏
  • 举报
回复
sys_open
jjlmonkey 2011-09-06
  • 打赏
  • 举报
回复
在kernel里 可以用
#include <linux/fs.h>
struct file *filp_open(const char *filename, int flags, int mode);

file->f_op->read()
file->f_op->write()

但是好像在driver加载过程中,tmpfs没有挂载到/dev上,不一定能访问到/dev/block/mmcblk0.
jerrylim 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhangjie201412 的回复:]

引用 2 楼 cqbamboo 的回复:
我想应该是下面的3个头文件中的吧
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
我说的是在driver层 不是应用层
[/Quote]

驱动中file_operations结构体中的函数有些是不用自己实现的,因为内核已经帮我们实现好了。如open,close.你只要在应用程序中用open()或fopen()打开相应的设备文件就可以对设备进行其它操作了。
cqbamboo 2011-09-05
  • 打赏
  • 举报
回复
Linux driver 是在kernel层
而 open() 是系统调用,是提供给应用层的
我觉得,在driver中好像不能直接用open(), 估计得用另外的办法
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cqbamboo 的回复:]
我想应该是下面的3个头文件中的吧
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
[/Quote]我说的是在driver层 不是应用层
  • 打赏
  • 举报
回复
我说的是,在linux driver中,不是应用层~~~
cqbamboo 2011-09-05
  • 打赏
  • 举报
回复
我想应该是下面的3个头文件中的吧
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
yldyb 2011-09-05
  • 打赏
  • 举报
回复
你说的是fopen(), fseek(), fread(), fclose()吗? 头文件是"stdio.h"

21,600

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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