当前位置: 技术问答>linux和unix
在线急问,驱动中读写寄存器问题??
来源: 互联网 发布时间:2015-06-17
本文导语: 最近我写了一个驱动,其实现功能很简单,就是对某些地址读和写; 可是我只能对驱动中某些固定下来的地址读写, 也就是说如果我的应用调用read(fd,buff,count)时, 只能对驱动里read()下指定的地址读. read函数如下:regA和regB...
最近我写了一个驱动,其实现功能很简单,就是对某些地址读和写;
可是我只能对驱动中某些固定下来的地址读写,
也就是说如果我的应用调用read(fd,buff,count)时,
只能对驱动里read()下指定的地址读. read函数如下:regA和regB是寄存器
static ssize_t xx_read(struct file *filp, char *buff, size_t count, loff_t *offp){
unsigned short tmp[2],in;
tmp[0]=inw((unsigned short *)regA);
tmp[1]=inw((unsigned short *)regB);
in=copy_to_user(buff,(void *)tmp,count);
if(in){
return -EFAULT;
}
return 1;
}
这样的话只能对寄存器regA和regB读,
怎样才能实现对任意的地址读呢?
也就是,可以只读regA或regB,或者随便读别的哪儿都行?这些可以由应用程序自由选择.
要是一般的函数可以带个地址参数就行了,好像这个又不行,怎么办呢?
写了这么多不知道问题清楚没.
做过的大侠们,怎么修改,给点建议吧? 我很急啊
可是我只能对驱动中某些固定下来的地址读写,
也就是说如果我的应用调用read(fd,buff,count)时,
只能对驱动里read()下指定的地址读. read函数如下:regA和regB是寄存器
static ssize_t xx_read(struct file *filp, char *buff, size_t count, loff_t *offp){
unsigned short tmp[2],in;
tmp[0]=inw((unsigned short *)regA);
tmp[1]=inw((unsigned short *)regB);
in=copy_to_user(buff,(void *)tmp,count);
if(in){
return -EFAULT;
}
return 1;
}
这样的话只能对寄存器regA和regB读,
怎样才能实现对任意的地址读呢?
也就是,可以只读regA或regB,或者随便读别的哪儿都行?这些可以由应用程序自由选择.
要是一般的函数可以带个地址参数就行了,好像这个又不行,怎么办呢?
写了这么多不知道问题清楚没.
做过的大侠们,怎么修改,给点建议吧? 我很急啊
|
不知道你想读什么地址,物理地址?逻辑地址?。。。。
至于你说的可以由应用程序自由选择,你可以在驱动实现ioctl接口,
由应用程序设置一个标志变量控制你在read里的读操作
至于你说的可以由应用程序自由选择,你可以在驱动实现ioctl接口,
由应用程序设置一个标志变量控制你在read里的读操作
|
实现llseek函数,定义一个设备私有变量表示位置,read的时候就可以从这个位置开始读了
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。