皇冠搏彩中心

联系我们

IO端口映射和IO内存映射(详解S3C24XX_GP驱动)

作者:admin时间:2021-04-15 12:51

  传来的地方,由硬件电途掌管其全部寄义。物理地方中很大一个人是留给内存条中的内存的,但也常被照射到其他存储器上(如显存、BIOS等)。正在法式指令中的虚拟地方源委段照射和页面照射后,就天生了物理地方,这个物理地方被放到CPU的地方线上。

  物理地方空间,一个人给物理RAM(内存)用,一个人给总线用,这是由硬件打算来决心的,所以正在32 bits地方线处置器中,物理地方空间是2的32次方,即4GB,但物理RAM寻常不行上到4GB,由于尚有一个人要给总线用(总线上还挂着其余很众装备)。正在PC机中,寻常是把低端物理地方给RAM用,高端物理地方给总线)总线地方:总线的地方线或正在地方周期上形成的信号。外设利用的是总线地方,CPU利用的是物理地方。

  物理地方与总线地方之间的闭连由编制的打算决心的。正在x86平台上,物理地方即是总线地方,这是由于它们共享相仿的地方空间这句话有点难融会,详睹下面的独立编址。正在其他平台上,大概必要转换/照射。譬喻:CPU必要拜访物理地方是0xfa的单位,那么正在x86平台上,会形成一个PCI总线xfa地方的拜访。由于物理地方和总线地方相仿,因而凭眼睛看是不行确定这个地方是用正在哪儿的,它或者正在内存中,或者是某个卡上的存储单位,以至大概这个地方上没有对应的存储器。

  rtual Memory Management)机制,这必要MMU(Memory Management Unit)的接济。MMU往往是CPU的一个人,要是处置器没有MMU,或者有MMU但没有启用,CPU践诺单位发出的内存地方将直接传到芯片引脚上,被内存芯片(物理内存)回收,这称为物理地方(Physical Address),要是处置器启用了MMU,CPU践诺单位发出的内存地方将被MMU截获,从CPU到MMU的地方称为虚拟地方(Virtual Address),而MMU将这个地方翻译成另一个地方发到CPU芯片的外部地方引脚上,也即是将虚拟地方照射成物理地方。Linux中,历程的4GB(虚拟)内存分为用户空间、内核空间。用户空间漫衍为0~3GB(即PAGE_OFFSET,正在0X86中它等于0xC0),剩下的1G为内核空间。法式员只可利用虚拟地方。编制中每个历程有各自的私有效户空间(0~3G),这个空间对编制中的其他历程是弗成睹的。

  CPU发出取指令吁请时的地方是今朝上下文的虚拟地方,MMU再从页外中找到这个虚拟地方的物理地方,完结取指。同样读取数据的也是虚拟地方,譬喻mov ax, var.编译时var即是一个虚拟地方,也是通过MMU从也外中来找到物理地方,再形成总线时序,完结取数据的。

  1)外设都是通过读写装备上的寄存器来实行的,外设寄存器也称为I/O端口,而IO端口有两种编址体例:独立编址和团结编制。

  团结编址也称为I/O内存体例,外设寄存器位于内存空间(良众外设有本人的内存、缓冲区,外设的寄存器和内存统称I/O空间)。

  独立编址(只身编址):IO地方与存储地方分隔独立编址,I/0端口地方不占用存储空间的地方领域,云云,正在编制中就存正在了另一种与存储地方无闭的IO地方,CPU也必需具有专用与输入输出操作的IO指令(IN、OUT等)和掌管逻辑。独立编址下,地方总线上过来一个地方,装备不明晰是给IO端口的、依旧给存储器的,于是处置器通过MEMR/MEMW和IOR/IOW两组掌管信号来完成对I/O端口和存储器的分歧寻址。如,intel 80x86就采用只身编址,CPU内存和I/O是沿途编址的,即是说内存一个人的地方和I/O地方是重叠的。

  嵌入式微掌管器如ARM、PowerPC等并 不供给I/O空间,仅有内存空间,可直接用地方、指针拜访。但对付Linux内核而言,它大概用于分歧的CPU,因而它必需都要思虑这两种体例,于是它采 用一种新的法子,将基于I/O照射体例的或内存照射体例的I/O端口通称为I/O区域(I/O region),岂论你采用哪种体例,都要先申请IO区域:request_resource(),收场时开释 它:release_resource()。

  前面说过,IO内存是团结编址下的观点,对付团结编址,IO地方空间是物理主存的一个人,对付编程而言,咱们只可操作虚拟内存,因而,拜访的第一步即是要把装备所处的物理地方照射到虚拟地方,Linux2.6下用ioremap():

  然后,咱们可能直接通过指针来拜访这些地方,可是也可能用Linux内核的一组函数来读写:

  拜访IO端口有2种途径:I/O照射体例(I/O-mapped)、内存照射体例(Memory-mapped)。前一种途径不照射到内存空间,直接利用intb()/outb()之类的函数来读写IO端口;后一种MMIO是先把IO端口照射到IO内存(内存空间),再利用拜访IO内存的函数来拜访IO端口。

  通过这个函数,可能把port早先的count个延续的IO端口照射为一段内存空间,然后就可能正在其返回的地方是像拜访IO内存雷同拜访这些IO端口。

  CPU对外设端口物理地方的编址体例有两种:一种是IO照射体例,另一种是内存照射体例。

  Linux将基于IO照射体例的和内存照射体例的IO端口统称为IO区域(IO region)。

  IO region依旧是一种IO资源,所以它依旧可能用resource构造类型来描绘。

  全部变量ioport_resource和iomem_resource,来别离描绘基于IO照射体例的统统IO端口空间和基于内存照射体例的IO内存资源空间(包罗IO端口和外设内存)。

  正在X86处置器中存正在着I/O空间的观点,I/O空间是相对付内存空间而言的,它通过特定的指令in、out来拜访。端标语标识了外设的寄存器地方。Intel语法的in、out指令体例为:

  目前,大无数嵌入式微掌管器如ARM、PowerPC等中并不供给I/O空间,而仅存正在内存空间。内存空间可能直接通过地方、指针来拜访,法式和法式运转中利用的变量和其他数据都存正在于内存空间中。

  即使是正在X86处置器中,固然供给了I/O空间,要是由咱们本人打算电途板,外设依旧可能只挂接正在内存空间。此时,CPU可能像拜访一个内存单位那样拜访外设I/O端口,而不必要设立特意的I/O指令。所以,内存空间是必需的,而I/O空间是可选的。

  上述各函数中I/O端标语port的类型高度依赖于全部的硬件平台,所以,只是写出了unsigned。

电话:13866999966
联系人:王经理
Q Q:88996699
邮箱:HR@163.com
地址:北京市朝阳区沿江中路298号江湾商业中心26楼2602-2605