阅读:958回复:0
关于块设备驱动程序的几个问题
我在看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] |
|