驱动笔记 - IO端口和IO内存

访问IO端口

(#include <asm/io.h>)

设备资源
struct resource
{
resource_size_t start; //资源起始物理地址
resource_size_t end; //资源结束物理地址
const char *name;
unsigned long flags; //资源类型,如IORESOURCE_MEM,IORESOURCE_IO,IORESOURCE_IRQ
struct resource *parent, *sibling, *child; //资源链表指针
}

申请IO端口
struct resource *request_region(unsigned long first, unsigned long n, const char *name)
申请使用从first开始的n个端口,name为设备名字,失败返回NULL

释放IO端口
void release_region(unsigned long start, unsigned long n);

IO端口分配情况/proc/ioports

unsigned inb(unsigned port) 读字节端口
void outb(unsigned char byte, unsigned port) 写字节端口

unsigned inw(unsigned port) 16位
void outw(unsigned short word, unsigned port)

unsigned inl(unsigned port) 32位
void outl(unsigned longword, unsigned port)

访问IO内存(比访问IO端口多一步映射)
申请IO内存
struct resource *request_mem_region(unsigned long start, unsigned long len, char *name)(返回为物理地址)

void release_mem_region(unsigned long start, unsigned long len)

IO内存分配情况

/proc/iomem

访问IO内存前需进行物理地址到虚拟地址的映射
void *ioremap(unsigned long phys_addr, unsigned long size)
void iounmap(void *addr);

访问IO内存
读:
unsigned ioread8(void *addr)
unsigned ioread16(void *addr)
unsigned ioread32(void *addr)

unsigned readb(address)

unsigned readw(address)

unsigned readl(address)

写:
void iowrite8(u8 value, void *addr)
void iowrite16(u16 value, void *addr)
void iowrite32(u32 value, void *addr)

void writeb(unsigned value, address)

void writew(unsigned value, address)

void writel(unsigned value, address)

时间: 2024-08-02 00:43:28

驱动笔记 - IO端口和IO内存的相关文章

linux 系统对IO端口和IO内存的管理

一.I/O端口       端口(port)是接口电路中能被CPU直接访问的寄存器的地址.几乎每一种外设都是通过读写设备上的寄存器来进行的.CPU通过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据.外设寄存器也称为“I/O端口”,通常包括:控制寄存器.状态寄存器和数据寄存器三大类,而且一个外设的寄存器通常被连续地编址. 二.IO内存        例如,在PC上可以插上一块图形卡,有2MB的存储空间,甚至可能还带有ROM,其中装有可执行代码. 三.IO端口和IO内存的区分及联系 

[转]io端口和io内存

(一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义.物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存.BIOS等).在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上.        物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32 bits地址线的x86处理器中,物理地址空间是2的32次方,即4GB,但物理RAM一般不能上到4GB,因为还

IO端口和IO内存的区别 转

目录(?)[-] Linux系统对IO端口和IO内存的管理 一.I/O端口 二.IO内存 三.IO端口和IO内存的区分及联系 四.外设IO端口物理地址的编址方式 统一编址 独立编址 优缺点 五.Linux下访问IO端口 I/O映射方式 内存映射方式 六.Linux下访问IO内存 六.ioremap和ioport_map 七.总结 IO端口和IO内存的区别及分别使用的函数接口  每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根

IO端口和IO内存的区别及分别使用的函数接口

每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把CPU分成两大类.一类CPU(如M68K,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令进行,所以,这种CPU没有专门用于设备I/O的指令.这就是所谓的"I/O内存"方式.另一类CPU(典型的如X86),将外设的寄存器看成一个独立的地址空间,所以访问内存的指令不能用来访问这

&lt;摘录&gt;io端口和io内存

linux中的 IO端口映射和IO内存映射 (一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义.物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上 (如显存.BIOS等).在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址线上.        物理地址空间,一部分给物理RAM(内存)用,一部分给总线用,这是由硬件设计来决定的,因此在32 bits地址线的x86处理器中,物理地址空间是2的32次方,即4

[转载]IO端口和IO内存

在驱动程序编写过程中,很少会注意到IO Port和IO Mem的区别.虽然使用一些不符合规范的代码可以达到最终目的,这是极其不推荐使用的. 结合下图,我们彻底讲述IO端口和IO内存以及内存之间的关系.主存16M字节的SDRAM,外设是个视频采集卡,上面有16M字节的SDRAM作为缓冲区. 1.      CPU是i386架构的情况在i386系列的处理中,内存和外部IO是独立编址,也是独立寻址的.MEM的内存空间是32位可以寻址到4G,IO空间是16位可以寻址到64K. 2.      在Linu

[转载]来认识寄存器,内存,IO空间,IO端口,IO内存

整天说内存,寄存器,端口,他们有什么联系,有什么不同之处,你了解他们么? 第一.寄存器和内存的区别 寄存器和内存都是可以用来读写的,但寄存器的操作时有副作用,称之为(side effect 边际效果) 读取一个寄存器可能导致寄存器中的内容发生变化,比如在一些设备的中断状态寄存器中,读取了寄存器后会自动清零 第二.IO空间和内存空间 并不是所有的体系结构都有IO空间这个定义的,我所了解的只有X86体系上有,而ARM体系结构就没有这种区别, 在X86上,IO空间和内存是独立的,他们各自有各自的总线,

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

20150222 IO端口映射和IO内存映射(详解S3C24XX_GPIO驱动) 2015-02-22 李海沿 刚刚我们实现了linux系统内存的分配,读写,释放功能,下面,我们一鼓作气将IO端口映射及IO内存映射搞定,加油! (一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义.物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存.BIOS等).在程序指令中的虚拟地址经过段映射和页面映射后,就生成了物理地址,这个物理地址被放到CPU的地址

汇编学习笔记(10)-IO端口与指令

一.什么是IO端口 计算机上有很多输入输出设备,比如显示器,打印机,鼠标,键盘.这些设备通过接口和CPU相连接,并提供了一组寄存器给CPU用于控制对应的硬件,为了方便管理这些寄存器,CPU给这个寄存器统一分配地址,如管理内存一样使用这些寄存器,这就称之为IO端口. 二.IO端口输入输出指令 80x86的IO端口编址和内存编址是分开的,使用一组特殊的命令访问IO端口,注意的输入输出是对CPU而言的,比如输入指的是数据进入CPU,相反输出指的是从CPU输出数据到IO端口      输入指令 IN A