I/O体系结构 总线:PC的CPU、RAM、IVO设备之间需要某些 数据通路来保证信息的流动 必总类 >ISA、EISA、 VESA、PCI以及MCA等等 >三种基本类型 ●数据总线 (pentium,64位) 地址总线(pentium,32位) ●控制总线 总线用于CPU与/O设备之间的连接时,成为I/O总 线 cience and fechllo 嵌入式系统实验室 2023/7/14 Linux OS Analysis 3/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 3/105 I/O体系结构 ❖总线:PC的CPU、RAM、I/O设备之间需要某些 数据通路来保证信息的流动 ❖总类: ➢ISA、 EISA、 VESA、PCI以及MCA等等 ➢三种基本类型 ⚫数据总线(pentium,64位) ⚫地址总线(pentium,32位) ⚫控制总线 ➢当总线用于CPU与I/O设备之间的连接时,成为I/O总 线
统一编址(典型am)和独立编址(典型PC) 在x86处理器中,只使用了32位地址总线中的16 位对/O设备进行寻址 >寻址范围? 使用64位数据总线中的8、16、32位传送数据 冬/O设备与CPU之间的连接层次为: >CPU→I/O端口→I/O接口→设备控制器 Science and Techno 嵌入式系统实验室 2023/7/14 Linux OS Analysis 4/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 4/105 ❖统一编址(典型arm) 和 独立编址(典型PC) ❖在x86处理器中,只使用了32位地址总线中的16 位对I/O设备进行寻址 ➢寻址范围? ❖使用64位数据总线中的8、16、32位传送数据 ❖I/O设备与CPU之间的连接层次为: ➢CPU→I/O端口→I/O接口→设备控制器
PC的I/O体系结构 CPU VO bus 生能年和卡作华年华 年华出出年华车年华自车和华单出海中华华年车年毛华非华生单保 4008 1/0 Port 1/0Port 1/OInterface 1/0 Device 室 1/0 Controller JRY
2023/7/14 Linux OS Analysis 5/105 PC的I/O体系结构
I/O端口(I/0port) 每个/O端口8位,由于只使用16位地址总线访问,因此 I/O地址空间一共提供65536个I/O端口 在端口地址对齐的情况下,连续的I/O端口可以看成16位 /32位端口 特定的指令用来访问I/O端口:in,ins,out,outs 958 ?I/O端口的另外一种访问方法 >直接映射到物理地址空间 >可以使用存储器操作指令,如mov,and,or等等 m 嵌入式系统实验室 2023/7/14 Linux OS Analysis 6/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 6/105 I/O端口(I/O port) ❖ 每个I/O端口8位,由于只使用16位地址总线访问,因此 I/O地址空间一共提供65536个I/O端口 ❖ 在端口地址对齐的情况下,连续的I/O端口可以看成16位 /32位端口 ❖ 特定的指令用来访问I/O端口:in,ins,out,outs ❖ I/O端口的另外一种访问方法 ➢ 直接映射到物理地址空间 ➢ 可以使用存储器操作指令,如mov,and,or等等
I/O端口中的寄存器 命令 Control register Status register 状态 CPU Device's 1/0 Interface Input register 输入数据 输出数据 Output register Science and Technon 2023/7/14 Linux OS Analysis 7/105 嵌入式系统实验室 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 7/105 I/O端口中的寄存器 命令 状态 输入数据 输出数据
Linux中访问I/O端口的操作 inb、inw、inl inb p、inwp、inlp outb、outw、outl outb_p、outw_p、outl_p 1958 insb、insw、insl outsb、outsw、outsl of Science and Techa 参见io32.h的最后几个宏和宏扩展 嵌入式系统实验室 2023/7/14 Linux OS Analysis 8/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 8/105 Linux中访问I/O端口的操作 ❖inb、inw、inl ❖inb_p、inw_p、inl_p ❖outb、outw、outl ❖outb_p、outw_p、outl_p ❖insb、insw、insl ❖outsb、outsw、outsl 参见io_32.h的最后几个宏和宏扩展
I/O端口的分配 必不同的设备使用各自不同的端口 ?内核使用资源信息来记录端口分配信息 冬在这里,一个资源表示/O端口地址的一个范围 00014: 00015: 米 Resources are tree-like,allowing 00016: 米 nesting etc.. 00017: 00018: struct resource{ 个资源表示/O端口地址的一个范围 00019: resource size t start; 00020: resource size t end; 00021: const char *name; 00022: unsigned long flags; 00023: struct resource *parent,*sibling,*child; 00024: 所有同种资源使用树形结构记录,ioport resource。 一个较大范围可以进一步划分为子范围,使用兄弟链表来表示 2023/7114 弋系统实验室 Linux US AnalysIs 911U5 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 9/105 I/O端口的分配 ❖不同的设备使用各自不同的端口 ❖内核使用资源信息来记录端口分配信息 ❖在这里,一个资源表示I/O端口地址的一个范围 所有同种资源使用树形结构记录,ioport_resource。 一个较大范围可以进一步划分为子范围,使用兄弟链表来表示 一个资源表示I/O端口地址的一个范围
为什么使用树型结构 ?以DE硬盘接口为例来说明 DE硬盘接口的端口地址:0xf000~0xf00f 冬DE链的主盘使用0xf000~0xf007的子范围 冬从盘使用0xf008~0xf00f的子范围 冬这样,一个父结点+2个子节点 >父节点的范围能够覆盖所有子节点的范围 Science and fechno 嵌入式系统实验室 2023/7/14 Linux OS Analysis 10/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 10/105 为什么使用树型结构 ❖以IDE硬盘接口为例来说明 ❖IDE硬盘接口的端口地址:0xf000~0xf00f ❖IDE链的主盘使用0xf000~0xf007的子范围 ❖从盘使用0xf008~0xf00f的子范围 ❖这样,一个父结点+2个子节点 ➢父节点的范围能够覆盖所有子节点的范围
?I/O端口资源树ioport resource的根节点跨越了整 个I/0地址空间0~65565 00023: struct resource ioport_resource 00024: name ="PCI IO" 00025: .start =0, 00026: .end IO SPACE LIMIT, 00027: .flags IORESOURCE IO, 00028: } 00040:#define IO SPACE LIMIT 0xffff uty of Science and Technole 嵌入式系统实验室 2023/7/14 Linux OS Analysis 11/105 EMBEDDED SYSTEM LABORATORY SUZHOU INSTITUTE FON ADVANCED STUDY OF USTC
2023/7/14 Linux OS Analysis 11/105 ❖I/O端口资源树ioport_resource的根节点跨越了整 个I/O地址空间0~65565