`
isiqi
  • 浏览: 16560201 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

I/O内存内存操作

阅读更多

I/O内存内存操作
访问寄存器和访问普通的SDRAM是不同的。
特殊寄存器在2410上映射在虚拟地址的0xf0000000开始的地方。
具体可以参考map.h的定义。
#define ioread8(p) ({ unsigned int __v = __raw_readb(p); __v; })
#define ioread16(p) ({ unsigned int __v = le16_to_cpu(__raw_readw(p)); __v; })
#define ioread32(p) ({ unsigned int __v = le32_to_cpu(__raw_readl(p)); __v; })
#define iowrite8(v,p) __raw_writeb(v, p)
#define iowrite16(v,p) __raw_writew(cpu_to_le16(v), p)
#define iowrite32(v,p) __raw_writel(cpu_to_le32(v), p)
(1)所有的读写指令所赋的地址必须都是虚拟地址,你有两种选择:使用内核已经定义好的地址,如
S3C2440_GPJCON等等,这些都是内核定义好的虚拟地址,有兴趣的可以看源码。还有一种方法就是使用自己用ioremap映射的虚拟地址。绝对
不能使用实际的物理地址,否则会因为内核无法处理地址而出现oops。
(2)在使用I/O指令时,可以不使用request_region和request_mem_region,而直接使用outb、ioread等指令。因为request的功能只是告诉内核端口被谁占用了,如再次request,内核会制止。
(3)在使用I/O指令时,所赋的地址数据有时必须通过强制类型转换为 unsigned long ,不然会有警告(具体原因请看Linux设备驱动程序学习(7)-内核的数据类型) 。虽然你的程序可能也可以使用,但是最好还是不要有警告为妙。
(4)在include\asm-arm\arch-s3c2410\hardware.h中定义了很多io口的操作函数,有需要可以在驱动中直接使用,很方便。
另外一个方式是采用ioremap,为了以后兼容性的考虑,我觉得最好采用这个方式。

分享到:
评论

相关推荐

    Linux下必用的I/O 操作手段I/O文件

    除了基本的I/O操作外,还有其他高级I/O机制,例如异步I/O、内存映射文件和缓冲I/O等。异步I/O允许程序在等待I/O操作完成时继续执行其他任务,提高了效率。内存映射文件将文件内容映射到进程的虚拟地址空间,使得访问...

    ( 内存与I/O操作)嵌入式基础

    - **I/O端口与I/O内存的应用示例**: - 通过I/O端口控制LED的开关。 - 使用I/O内存配置和控制网络接口卡。 综上所述,内存管理和I/O操作是嵌入式系统开发中的核心概念和技术。通过对这些技术的理解和应用,可以...

    内存映射I/O大文件性能测试代码

    内存映射I/O(Memory-Mapped I/O)是一种在操作系统中高效处理大文件的技术,它允许应用程序将文件的内容直接映射到进程的虚拟地址空间,从而实现文件与内存的直接交互,无需通过传统的I/O系统调用。这种方法在处理...

    Unix I/O 小结

    Unix I/O系统是操作系统的核心部分,它提供了对文件和设备进行输入输出操作的接口。本文主要总结了Unix下的I/O模型及其相关系统调用。 在Unix中,每个进程都有一个打开文件描述符表,用于存储指向文件inode的指针和...

    mac i/o kit 基本原理

    I/O Kit是Apple公司为开发者提供的一套强大的、用于构建设备驱动程序的框架,它允许开发者以面向对象的方式处理输入/输出(I/O)操作。本文将深入探讨I/O Kit的基本原理,帮助你理解和掌握Mac驱动开发的核心知识。 ...

    Java I/O, 2nd Edition

    缓冲区则可以提高I/O操作的效率,减少磁盘和内存之间的交互次数。字符编码如UTF-8、GBK等在处理多语言文本时至关重要。 2. **标准I/O库**:详细讲解了java.io包中的类和接口,如File类用于文件的创建、读写和删除,...

    I/O管理程序(最新发表) I/O管理程序(最新发表)

    本文将深入探讨Linux 2.4.0内核中的I/O子系统,特别是关于I/O端口资源管理的实现原理,这对于理解操作系统内核机制和设备驱动程序开发至关重要。 在硬件层面上,I/O端口是CPU与外设通信的关键通道。它们分为控制、...

    C#文件管理系统 I/O

    5. **异步I/O**: 异步I/O操作对于提高用户体验尤其重要,因为它允许程序在等待I/O操作完成时继续执行其他任务。C#的async/await关键字使得编写异步代码变得简单。例如,File.WriteAllTextAsync()和FileStream....

    深入分析 Java I/O 的工作机制(转载)

    Java中的I/O操作基于流的概念,流是数据的有序传输通道。Java将所有的I/O操作抽象为流对象,分为字节流和字符流两大类。字节流处理单个字节的数据,如InputStream和OutputStream;字符流处理Unicode字符,如Reader...

    计算机硬件教程CPU、主板、内存、I/O设备、硬盘等。

    主要包括计算机硬件的基础知识,如CPU、主板、内存、I/O设备、硬盘等。

    ARM9 I/O driver source

    - **内存映射I/O**:ARM9处理器支持内存映射I/O,即将I/O设备的寄存器映射到内存空间,通过读写内存地址来访问设备。 - **总线管理**:在多设备系统中,总线管理器负责分配资源,如地址空间和中断号,确保设备间不...

    很全面的资料:Linux之I/O端口

    - **统一编址**:I/O端口和内存共享相同的地址空间,CPU通过操作码识别是内存访问还是I/O操作。这种方式简化了硬件设计,但可能导致软件实现复杂。 在Linux系统中,对I/O端口的操作通常需要特权级别,普通用户进程...

    I/O缓冲池演示程序

    I/O缓冲池的核心思想是预先在内存中分配一组缓冲区,当进行I/O操作时,数据会被先存入缓冲区,而不是直接写入或读出硬件。这样可以减少频繁的硬件访问,因为对内存的访问通常比对硬盘或其他外设的访问更快。此外,...

    Intel Virtualization Technology for Direct I/O

    2. DMA重映射(Direct Memory Access remapping):DMA是一种允许I/O设备直接访问系统内存的技术。在虚拟化环境中,DMA重映射确保即使多个虚拟机同时访问内存时,也能保证数据不被错误地重叠或破坏。 3. 设备虚拟化...

    Linux直接I/O机制介绍

    传统操作系统中的I/O操作通常是通过缓存I/O来完成的,即数据在传输过程中会先经过操作系统内核的缓存。这种缓存机制虽然能够在一定程度上提升性能,但也存在一些不足之处。 **什么是缓存I/O (Buffered I/O)?** ...

    重叠I/O实现的大文件读写

    重叠I/O是异步I/O的一种实现,它允许启动一个I/O操作后立即返回,而不是等待操作完成。 3. **I/O完成端口(IOCP)**: IOCP是Windows系统提供的一个高级I/O模型,它允许多个线程共享一个I/O端口,并处理来自不同...

    Server Virtualization: Avoiding the I/O Trap

    6. **精简配置和 Thin Provisioning**:通过精简配置,仅为实际使用的数据分配存储空间,可以更高效地利用存储资源,减少不必要的I/O操作。 7. **负载均衡**:通过智能地分配虚拟机到不同的物理服务器,可以平衡I/O...

    Linux I/O 原理和 Zero-copy 技术全面揭秘

    2. **I/O缓冲区**:在Linux中,I/O操作通常涉及数据在用户空间和内核空间之间的传递,这需要通过缓冲区完成。当数据从磁盘读取或写入网络时,会先存放在内核缓冲区,然后通过系统调用复制到用户空间或反之。 3. **...

    PCI总线的I/O空间直接访问方法1.rar

    例如,在x86架构下,可以使用in和out指令进行PMIO,或者使用I/O内存映射寄存器进行MMIO。同时,操作系统通常提供API函数,如Windows的DeviceIoControl和Linux的ioport_map/unmap,来简化对PCI设备的访问。 文件...

Global site tag (gtag.js) - Google Analytics