zoukankan      html  css  js  c++  java
  • 硬件访问技术

    <访问流程>

    驱动程序控制设备,其主要是通过访问设备中的寄存器来到达控制设备的目的,因此讨论如何访问硬件,其实质是研究如何访问寄存器。

    <地址映射>

    在linux系统中,无论是内核所使用地址还是应用程序所使用地址,都虚拟地址,然而芯片手册上锁给出的地址都是物理地址,因此驱动程序开发是第一步就是将物理地址映射为虚拟地址。

    1)动态映射

    所谓动态映射就是指在linux系统驱动程序中,使用函数ioremap(),将物理地址映射为虚拟地址。

    函数原型:
    void *ioremap(phyaddr,size)

    参数分析:

    phyasddr:物理地址

    size:映射的区域长度

    返回值:返回的映射后的虚拟地址

    2)静态映射

    所谓静态映射就是指linux系统根据用户实现指定的映射关系,在内核启动是时,自动将物理地址映射为虚拟地址

    事先指定静态映射结构:
    map_desc

    {

    unsigned long virtual; /*映射后的虚拟地址*/

    unsigned long pfn; /*物理地址所在的页帧号*/

    unsigned long length;/*映射长度*/

    unsigned int type;/*映射的设备类型*/

    }

    pfn:

    调用函数:

    __phys_to_pfn(物理地址)计算出物理地址所在的页帧号

    告知内核:
    将编写好的map_desc 放到内核代码中一个位置(特定的一个位置)

    <寄存器读写>

    linux内核中提供了一套访问寄存器的函数。

     

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 相关阅读:
    一个面试问题的答案总结
    全局变量与局部变量的特点
    浮点数类型在内存当中是如何存储的
    常用的几种调用约定
    裸函数
    安卓活动的启动模式
    安卓的生命周期
    android中的内部存储与外部存储
    堆栈图学习汇编结束篇最后一个堆栈图的练习
    Android内部存储与外部存储的文件操作类
  • 原文地址:https://www.cnblogs.com/big-devil/p/8589919.html
Copyright © 2011-2022 走看看