社区
驱动开发/核心开发
帖子详情
linux driver中调用open函数
我是Android开发者
2011-09-05 03:52:59
我有个问题困扰我很久,我想在driver中open “/dev/mmcblk0” ,然后调用lseek和read函数,去读取sd卡中某个区域的数据,可是我不知道头文件是什么?
有人用过吗?
...全文
536
18
打赏
收藏
linux driver中调用open函数
我有个问题困扰我很久,我想在driver中open “/dev/mmcblk0” ,然后调用lseek和read函数,去读取sd卡中某个区域的数据,可是我不知道头文件是什么? 有人用过吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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]
你是动态加载驱动的话,就可以。
我是Android开发者
2011-09-08
打赏
举报
回复
[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]这样做真的可以吗?
我是Android开发者
2011-09-08
打赏
举报
回复
[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(), 估计得用另外的办法
我是Android开发者
2011-09-05
打赏
举报
回复
[Quote=引用 2 楼 cqbamboo 的回复:]
我想应该是下面的3个头文件中的吧
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
[/Quote]我说的是在driver层 不是应用层
我是Android开发者
2011-09-05
打赏
举报
回复
我说的是,在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"
Linux
驱动之USB设备驱动
不管是USB设备还是USB接口,都会被注册到同一个bus上,也就是usb_bus_type,其之间的区别会在match
函数
中
区分,之后再去绑定不同的
driver
。当一个USB设备被插入的时候,USB设备驱动,也就是usb_generic_
driver
会跟USB设备交互,得到其所有的各种描述符,并为每个接口都定义成为一个device,之后再加载到usb_bus上,让其去匹配其对应的接口驱动程序。
Linux
驱动
中
的
open
函数
是如何从软件打通硬件呢?
打开文件是
Linux
系统
中
最基本的操作之一,
open
函数
可以实现打开文件的功能。下面我将为您介绍
open
函数
打通上层到底层硬件的详细过程。
Linux
驱动:应用程序
open
如何
调用
到驱动程序的
open
函数
字符设备文件的打开流程
linux
字符设备
open
系统
调用
流程
紧接着,又
调用
了do_filp_
open
函数
,该
函数
通过
调用
函数
get_empty_filp得到一个新的file结构体,之后的代码做了许多复杂的工作,如解析文件路径,查找该文件的文件节点inode等,直接来到了函do_dentry_
open
函数
,如下所示。最终,会执行def_chr_fops
中
的
open
函数
,也就是chrdev_
open
函数
,可以理解为一个字符设备的通用初始化
函数
,根据字符设备的设备号,找到相应的字符设备,从而得到操作该设备的方法,代码实现如下。
linux
驱动
中
probe
函数
是怎么
调用
的
linux
驱动
中
probe
函数
是怎么
调用
的
驱动开发/核心开发
21,600
社区成员
21,708
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章