zoukankan      html  css  js  c++  java
  • ioremap

    将一个IO地址空间映射到内核的虚拟地址空间上

    物理地址
    CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中内存的,但也常被映射到其他存储器上(如显存、bios等)

    总线地址
    外设使用的是地址总线,cpu使用的是物理地址。物理地址和总线地址之间的关系有系统设计决定的。在X86平台上,物理地址就是总线地址,这是因为它们共享相同的地址空间

    虚拟地址
    程序访问存储器所使用的逻辑地址称为虚拟地址
    CPU启动保护模式后,程序运行在虚拟地址空间中。CPU在启动的时候是运行在实模式的,Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的
    需要MMU的支持,把虚拟地址转换成物理地址

    ioremap

    #include <io.h>
    void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
    void *ioremap(unsigned long phys_addr, unsigned long size)

    phys_addr:要映射的起始的IO地址
    size:要映射的空间的大小
    flags:要映射的IO空间的和权限有关的标志

    I/O读写

    //read
    unsigned int ioread8(void*addr); 
    unsigned int ioread16(void*addr);
    unsigned int ioread32(void*addr); 
    //write
    void iowrite8(u8value,void*addr); 
    void iowrite16(u16value,void*addr);
    void iowrite32(u32value,void*addr); 
    //读一系列值到给定的I/O内存地址
    void ioread8_rep(void *addr, void *buf, unsigned long count); 
    void ioread16_rep(void *addr, void *buf, unsigned long count);
    void ioread32_rep(void *addr, void *buf, unsigned long count);
    //写一系列值到给定的I/O内存地址
    void iowrite8_rep(void *addr, const void *buf, unsigned long count); 
    void iowrite16_rep(void *addr, const void *buf, unsigned long count); 
    void iowrite32_rep(void *addr, const void *buf, unsigned long count); 
    //操作一块I/O地址
    void memset_io(void *addr, u8 value, unsigned int count); 
    void memcpy_fromio(void *dest, void *source, unsigned int count); 
    void memcpy_toio(void *dest, void *source, unsigned int count);
  • 相关阅读:
    [Flash开发笔记] ActionScript 生成伪 Guid
    [Flash开发笔记] 如何在as2.0中使用自定义类事件
    vs2005 智能感知不正常的解决办法
    [Flash开发笔记] 自定义ActionScript中的trim函数,取回车函数,字节换算函数
    爱你不容易——ExternalInterface
    软件测试中开发团队和测试团队的职责
    [Flash开发笔记] 正确理解MovieClipLoader的onLoadComplete事件
    ActionScript 中的字符串替换函数
    “hello world”PHP
    使用"类型文件"(typed File),创建自己的"数据库"
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709809.html
Copyright © 2011-2022 走看看