terrace
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2005-12-04
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:958回复:0

关于块设备驱动程序的几个问题

楼主#
更多 发布于:2004-03-06 10:51
我在看LDD那本书时对于块设备有些问题始终搞不明白,恳请各位高手指点。
1.对于字符设备驱动程序,它和应用层的接口函数很容易明白,如某设备的读操作在driver中定义为:xxx_read(struct *file ,char * buff,size_t count,loff_t *offset),在应用层调用时,就可以用fd=read(int fd,char *buff,int count)进行调用。
但是对于块设备驱动程序,它没有相应的读写函数(2.4以后),如何对块设备进行读写?(即有类似read(int fd,char *buff,int count)函数的函数吗?)在驱动层应如何定义对应的类似于xxx_read(...)函数)?Ldd说使用request函数。但是对于用户空间的char *buff,int count,如何构造成一个 struct request * 结构?
可能是我的理解有问题,但是我始终觉得块设备驱动实在是太麻烦了。
2.请问散离表结构(SCAT/GATHER)是如何构造的?即若用户有个调用形如:
fd=read(int fd,char *buff,int count),如何对其构造一个(内核空间)散离表?
3.关于pci设备编程的一个问题。
一个pci设备配置头空间的基地址寄存器(0x10)中的内容为IoBaseAddr,该设备有几个端口,相对于该IoBaseAddr的偏移地址为OFFSET,请问,能用
inx(IoBaseAddr+OFFSET) 和outx(IoBaseAddr+OFFSET,value)进行读写操作吗?
(x为b,w,l)

[编辑 -  3/6/04 by  terrace]

[编辑 -  3/6/04 by  terrace]
游客

返回顶部