使用道具 举报
Post by cupid 几乎每一种外设都是通过读写设备上的寄存器来进行的。外设寄存器也称为“I/O端口”,通常包括:控制寄存器、状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址。CPU对外设IO端口物理地址的编址方式有两种:一种是I/O映射方式(I/O-mapped),另一种是内存映射方式(Memory-mapped)。而具体采用哪一种则取决于CPU的体系结构。 我想问的是,对我们而言,编程的时候,I/O映射方式和内存映射方式有什么不同啊? 因为我需要写一个驱动,可是现在一些基础知识还有些模糊。 谢谢拉!
Post by cupid 还有一个问题,对某种外围芯片来说,我如何操作它的端口,采用I/O端口还是I/O内存方法?比如,以PC的并口芯片为例呢。
Post by cupid 谢谢啊。 在使用I/O端口时,request_region的参数是实际的物理地址,而不是偏移量吧?另外,Linux系统也不会把它当成虚拟地址进行转换吧? 下面都是cs8900驱动,但是,好像request_region的参数不一样,也不知道哪个是对的? 驱动1: #define EPORT_ADDR 0x300 #define EIOADDR (EIO_BASE+EPORT_ADDR) request_region(EPORT_ADDR, NETCARD_IO_EXTENT,"cs89x0"); 驱动2: static int io = 0xd0000300; request_region(dev_cs89x0.base_addr, NETCARD_IO_EXTENT, "cs8900a"); 谢谢拉!
本版积分规则 发表回复 回帖后跳转到最后一页