- 论坛徽章:
- 0
|
原帖由 yuyinyuyin664 于 2008-12-5 20:39 发表
PCI 设备通过BAR +OFFSET 但是这个BAR 怎么得到呢!?
能给个访问这个SATA 设备,比如硬盘寄存器的例子哩,要汇编的! 好懂.. 就是怎么向SATA HDD 硬盘发送命令,并完成一次数据读写. 汇编的更容易理解.
哎没钱了! ...
host controller是哪个芯片? 还是AHCI依从的? 南桥手册里有没有描述?
正常情况下, ATA controller是一个PCI设备, 因此, 在枚举的时候firmware/OS kernel会为它分配resources (物理地址区间), 此后driver被加载的时候, 在probe函数中进行2步工作:
1) pci_request_region(s)
2) ioremap或者pci_iomap,将BAR区间映射到一个线性地址区间, 得到起始线性地址
此后就可以用普通的方式读写该BAR所指向的区间里的寄存器了(上面步骤2中得到的线性地址,加上offset)。
如果你问的是, Linux kernel怎么为BAR分配物理地址, 这个问题就很麻烦了, 涉及到很多方面的知识。 我没有全部搞懂, 即使懂了也没法说——内容太多了。 |
|