I/O共享存储器 ?很多硬件设备都有自己的存储器,通常称之为 I/O共享存储器(I/O Shared Memory),如显存 映射/O共享存储器的地址 & > 根据设备和总线类型的不同,可以在三个不同的物理 地址范围之间进行映射 >对于连接到ISA总线上的大多数设备 0xa0000~0xfffff(640KB~1MB >对于使用VESA局部总线的一些老设备(图形卡) ●0xe00000~0xff(现在基本不生产) cience and TTechil 嵌入式系统实验室 2023/7/14 Linux OS Analysis 22/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 22/105 I/O共享存储器 ❖很多硬件设备都有自己的存储器,通常称之为 I/O共享存储器(I/O Shared Memory),如显存 ❖映射I/O共享存储器的地址 ➢根据设备和总线类型的不同,可以在三个不同的物理 地址范围之间进行映射 ➢对于连接到ISA总线上的大多数设备 ⚫0xa0000~0xfffff(640KB~1MB) ➢对于使用VESA局部总线的一些老设备(图形卡) ⚫0xe00000~0xffffff(现在基本不生产)
>对于连接到PCI总线的设备 ●映射到RAM物理地址4GB的顶端 关于图形加速端☐AGP(Accelerated Graphics Port)标准 >是高性能图形卡的PCI增强版 >不仅有/O共享存储器,还能通过图形地址再映射表 GART(Graphics Address Remapping Table)直接对主 板的RAM部分进行寻址 >具有更高的数据传输速率 Science and Techn 嵌入式系统实验室 2023/7/14 Linux OS Analysis 23/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 23/105 ➢对于连接到PCI总线的设备 ⚫映射到RAM物理地址4GB的顶端 ❖关于图形加速端口AGP(Accelerated Graphics Port)标准 ➢是高性能图形卡的PCI增强版 ➢不仅有I/O共享存储器,还能通过图形地址再映射表 GART(Graphics Address Remapping Table)直接对主 板的RAM部分进行寻址 ➢具有更高的数据传输速率
必/O共享存储器的访问 >对于物理地址1M之内的/O共享存储器访问 ●直接访问3G以上的对应线性区间 ●addr+3G >对于高端缸/O共享存储器访问 ●没有直接映射在3G以上的线性区间 ● 需要为其创建一块非连续线性区,并将其映射到高端缸/O共 享存储器的物理地址上 ●ioremap/.iounmap,类似vmalloc ●ioremap_nocache ●io mem=ioremap(某个物理起始地址,长度) ●访问io mem+相对于起始地址的偏移处 嵌入式系统实验室 2023/7/14 Linux OS Analysis 24/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 24/105 ❖I/O共享存储器的访问 ➢对于物理地址1M之内的I/O共享存储器访问 ⚫直接访问3G以上的对应线性区间 ⚫addr+3G ➢对于高端I/O共享存储器访问 ⚫没有直接映射在3G以上的线性区间 ⚫需要为其创建一块非连续线性区,并将其映射到高端I/O共 享存储器的物理地址上 ⚫ioremap/iounmap,类似vmalloc ⚫ioremap_nocache ⚫io_mem=ioremap(某个物理起始地址,长度) ⚫访问io_mem+相对于起始地址的偏移处
必访问/O共享存储器的一些体系结构相关的接口 >readb、readw、readl >writeb、writew、writel >memcpy_fromio、 memcpy toio memset 10 1958 例如访问0xfc000000I/O单元 >io mem-ioremap(0xfb000000,0x2000000) >t2=readb(io mem+0x1000000) Cence and Technol 嵌入式系统实验室 2023/7/14 Linux OS Analysis 25/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 25/105 ❖访问I/O共享存储器的一些体系结构相关的接口 ➢readb、readw、readl ➢writeb、writew、writel ➢memcpy_fromio、memcpy_toio ➢memset_io ❖例如访问0xfc000000I/O单元 ➢io_mem=ioremap(0xfb000000,0x2000000) ➢t2=readb(io_mem+0x1000000)
00152: /米 00153: readX/writex()are used to access memory mapped devices.On some 00154: 米 architectures the memory mapped IO stuff needs to be accessed 00155: 米 differently.On the x86 architecture,we just read/write the 00156: 米 memory location directly. 00157: 米 00158: 00159: static inline unsigned char readb(const volatile void iomem *addr) 00160: { 00161: return *(volatile unsigned char force *)addr; 00162: 00163: 00164: static inline unsigned short readw(const volatile void iomem *addr) 00165: { 00166: return *(volatile unsigned short force *)addr; 00167:} 00168: 00169: static inline unsigned int readl(const volatile void_iomem *addr) 00170: 00171: return *(volatile unsigned int force *addr; 00172: wce and 嵌入式系统实验室 2023/7/14 Linux OS Analysis 26/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 26/105