当前位置:  技术问答>linux和unix

pci驱动的读写函数

    来源: 互联网  发布时间:2016-11-06

    本文导语:  又要麻烦各位大哥了!小弟那写的pci采集卡的驱动函数,要求也不高,实现基本的IO访问即可! 设备结构体如下: struct adlink_device { unsigned long mem_len;   //the lence of the memery region void __iomem *ioaddr; //the base star...

又要麻烦各位大哥了!小弟那写的pci采集卡的驱动函数,要求也不高,实现基本的IO访问即可!
设备结构体如下:
struct adlink_device
{
unsigned long mem_len;   //the lence of the memery region
void __iomem *ioaddr; //the base start address of IO memery
//我这里采用内存映射的方式
unsigned long mem_flag; //the flags of the IO port and IO memer
char mem[MEM_SIZE];     //define the buffer memmory whose size is MEM_SIZE
struct pci_dev *pci_dev;
struct cdev cdev;      //thr struct of character device
};
一开始是先尝试通过字符设备来把数据读写到 char mem[MEM_SIZE]; ,这步没有问题!整个驱动程序都很正常!
然后我打算往PCI寄存器的里面读写,就是 void __iomem *ioaddr读写!发现有2个问题:
1:往寄存器里写还好说,要是读的话,事先并不知道是char型还是int或者double什么的,而 *ioaddr类型也是viod的,该怎么进行read呢?
2:我就自己瞎尝试着 void __iomem *ioaddr写入!把原型的字符设备的write函数改为如下:
ssize_t adl_write(struct file *filp,char __user *buf,size_t size,loff_t *ppos)
{
unsigned long p=*ppos;
unsigned int count=size;
int ret=0;
struct adlink_device *dev=filp->private_data;
printk(KERN_ALERT "adlink file_operation's write is called!n");
char *mem=(char *)dev->ioaddr;
if (p>dev->mem_len)
{
  printk(KERN_ALERT "write %d bytes form %ldn",count,p);
   return count ? - ENXIO:0;
}
if(count>dev->mem_len-p)
   count=dev->mem_len-p;
if(copy_from_user(mem+p,buf,count))
   ret=-EFAULT;
else
{
   *ppos+=count;
   ret=count;}
printk(KERN_ALERT "write %d bytes form %ldn",count,p);
return ret;
}
编译加载,并建立/dev/adlink 节点之后,我往该节点写入数据:比如echo “hello" > /dev/adlink
在输出:adlink file_operation's write is called后,不断输出:
write 0 bytes form 0
这是为什么呢?为什么不写入呢?麻烦各位大大帮忙分析分析啊

|
if (p>dev->mem_len)//这一句有很明显的问题!

    
 
 

您可能感兴趣的文章:

  • 关于pci类芯片寄存器读写问题。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • pcie驱动和pci驱动
  • Linux源代码中ata驱动为什么要调用pci驱动的代码
  • 移植pci驱动和RTL8139网卡驱动,只发生一次中断?
  • -------------- 请问大家,做好一个PCI设备驱动了,如何做个应用程序来使用这个驱动呢??
  • 移植PCI驱动程序,提示找不到iobuf.h
  • 拜求windriver开发PCI针对Altera芯片的驱动问题。
  • Linux下PCI驱动,怎么解决不同版本内核都需要重新编译的问题??
  • 了解PCI板卡驱动开发的大虾请进来
  • ================== hefuhua 您做过PCI总线驱动吗?===================
  • 如图 scsi <---> scsi controller <---> pci <---> cpu 如果我想对scsi编写驱动我该对哪个部分编写?
  • PCI驱动程序的是不是可以不要file_operations;file;inode?
  • 做一个pci扩展卡的linux下驱动程序,我该要多少钱呢?
  • linux pci设备在枚举过程中向驱动程序模型注册的问题。
  • 请教,导师让做PCI、SATA驱动开发!
  • 请教2.6内核下的pci卡的驱动写法,分数绝对不是问题,要多少有多少。
  • PCI设备驱动程序在哪里注册file_operations
  • 关于编译pci设备驱动程序出现的问题
  • 请问接触过小型机的大大们,小型机一般有pci插槽吗?如果没有,如何接入pci设备呢?谢谢
  • 提问:PCI中断是如何映射的?
  • 启动项里写pci=nommconf是什么意思啊
  • PCI Utilities
  • PCI工具包
  • PCI BUS DRIVER 的问题
  • 关于pci的问题
  • 读PCI时有段代码不懂,请高手解释一下
  • 请问大家:在LINUX环境下,如何获得PCI设备的配置空间的地址?
  • 我不会安装内核,pci_register_driver不能使用,大量发分~~~
  • solaris下通过应用程序如何访问pci设备的配置空间,i/o空间等?
  • 为什么编译时错误:pci_register_driver没有声明~~~!!!!
  • #define PCI9054_MSG(fmt, args...) printK("kERN_WARNING:"fmt,##args)
  • 编译2.6内核出错,不知道为什么pci编译不过去!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3