博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
硬件访问技术
阅读量:5815 次
发布时间:2019-06-18

本文共 774 字,大约阅读时间需要 2 分钟。

<访问流程>

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

 

<地址映射>

在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;">

 
 
 
 

转载于:https://www.cnblogs.com/big-devil/p/8589919.html

你可能感兴趣的文章
python 开发之selenium
查看>>
Xcode3.2.5中找不到Mac OS X - Command Line Utility -...
查看>>
css的div垂直居中的方法,百分比div垂直居中
查看>>
如何理解EM算法
查看>>
nginx 域名跳转一例~~~(rewrite、proxy)
查看>>
linux用户家目录无损迁移到独立硬盘
查看>>
文件查找
查看>>
shell编程前言(一)
查看>>
5、centos7.*配置yum的EPEL源及其它源
查看>>
JSON前后台简单操作
查看>>
shell中一些常见的文件操作符
查看>>
CentOS 7 装vim遇到的问题和解决方法
查看>>
JavaScript基础教程1-20160612
查看>>
使用第三方类、库需要注意的正则类RegexKitLite的使用
查看>>
iOS \U7ea2 乱码 转换
查看>>
FCN图像分割
查看>>
ios xmpp demo
查看>>
python matplotlib 中文显示参数设置
查看>>
数据库事务隔离级别
查看>>
os模块大全详情
查看>>