发新话题
打印

有谁编过pci的驱动,介绍一下经验。

有谁编过pci的驱动,介绍一下经验。

比方说Linux下如何如何识别PCI卡、确定PCI卡的内存映射空间?

      
Rocky

TOP

找一下windriver或者是kerneldriver的软件,可以有很大的帮助!      

TOP

1
开始
insert module & remove module

insert modle
includes
--"probe board"
--"get and analyse board infomation "
--"request irq"                                                            
--"register board as some type(character type, block type, and so on..)"    *这里有一个参数是文件跳转表*
... as Ur need

FYI: <linux/pci.h> <linux/moudle.h> ...
NOTE: linux/GNU system is a VM system, so after you get board infomation, the board base access address is PHYS_ADDR,
if yr pci board don't use DMA mode to transfer data, you have to call IOREMAP() routine tp get VIRT_ADDR.

remove module (release resouce)

-- ioumap, unregister, freeirq ...

2
根据文件跳转表去一一完善各个子功能
e.g.
brd_open
brd_close
brd_read
brd_write
brd_ioctl
....

这样在user level,open/close/read/write /dev/brd, 就会对应到这些routines,也就是打开/关闭/读写/控制 target board.

3.
如果在insert module routine 里面 request irq, 在加一个interrupt service routine,通常就是set 一下flag

That‘s all




12[/SIZE]      

TOP

我个人的理解是:如果是专用设备,可以不把其映射成文件,也就不用为其编写通用的驱动程序,直接在应用程序中处理可以吗?      
Rocky

TOP

我认识一人写过这样的driver,不过我个人不是很喜欢这种方式。

等于先把device map一下,然后直接access map过后的area。

可以到网上找找实例      

TOP

可以看一下<<linux 内核编程>>这本书,有中文和英文的.网上可检索到,大约在13章左右讲到PCI详细结构和驱动编法。      

TOP

发新话题