linux驱动中地址空间转换

在linux kernel 中,物理地址是不能直接使用的,必须通过转换才可以。

转换分为两种, 静态和动态。
静态就是下面那种,不过,静态的地址转换,还需要在kernel 初始化的时候作映射。 
动态映射是使用 ioremap 函数

[cpp] view plaincopy
  1. #define SL2312_GPIO_BASE  0x4D000000    
  2.     
  3. #define IO_ADDRESS(x)  (((X)&0x0fffffff)+(((x)>>4)&0x0f000000)+0xf0000000)     
  4.     
  5. #define GEMINI_GPIO_BASE1  IO_ADDRESS(SL2312_GPIO_BASE)     


 
linux 有内存保护机制,无论是内核态还是用户态。 
静态映射 :是在物理地址上加一个偏移量, 所以虚拟地址是固定的。 
动态映射 :系统会生成一个虚拟地址对应到物理地址上,虚拟地址不是固定的

linux在初始化运行时会根据一个map_desc的数组中的物理地址进行静态映射,0x4D000000地址应该就是这样映射的。
静态映射的地址无须使用icoremap函数,只要知道在map_desc数组中物理地址与虚拟地址的移仿就可以了。 
于驱动程序中关于物理地址是不是都要转换呢,这个是当然的,linux是运行在虚拟地址的
任何程序不能访问物理地址,都必须转换为物理地址才能访问只不过,在内核空间已经是转换好了的(如前所述),可以随便的访问。 

动态映射是由Linux内核统一管理,当使用kmalloc(分配在内核空间)和malloc函数申请时,内核会找到一块空余的物理内存,并在页表中动态地添加一项其与虚拟地址对应的表项。 
静态映射那应该就是LINUX在初始化阶段读取map_desc数组进行的地址映射,map_desc中包括了一对对的物理地址和虚拟地址的对应关系,这个可以根据硬件修改,其中的虚拟地址必须是内核空间的,例如,SDRAM的物理是0x30000000 那么可以将其映射为0xe0000000. 通过静态映射后的地址一般之后就不会更改了的,除非你想办法改掉。

 

注:以上均摘自论坛,仅供参考,不对的请指正,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

getClass()和.class的区别

getClass()和.class的区别 在学习反射时想到了这个问题,.getClass()和.class有没有什么区别? 当然,最明显的区别就是.getClass()是一个对象实例的方法,只有对象实例才有这个方法,具体的类是没有的。类的Class类实例是通…

华为敏捷 DevOps 实践:产品经理如何开好敏捷回顾会议

开篇小故事:前几年,一本叫《沉思录》的书在国内突然曝光度很多,因为前某国家领导人“摆案头,读百遍”。《沉思录》是古罗马皇帝马可奥勒写给自己的书,内容大部分是在鞍马劳顿中写的。其实有一句“我们所听到的不过只是…

斐波那契数列的鬼畜的性质

斐波那契数列的鬼畜的性质 斐波那契数列定理1 \(gcd(f[i],f[i1])1\) 利用辗转相减法 证明:\(gcd(f[i],f[i1])\)\(gcd(f[i1]-f[i],f[i])\)\(gcd(f[i-1],f[i])\)\(....\)\(gcd(f[1],f[2])1\) 斐波那契数列定理2 \(f[mn]f[m-1]f[n]f[m]f[n1]\) 证明:\(f[mn]…

xml与java对象转换 -- XStreamAlias

XStreamAlias使用 一、 特点: 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象;支持内部私有字段,不需要setter/getter方法 提供序列化接口; 自定义转换类型策略; XStream的优点很多,但是也有一些小bug,比如在定义别名中的下划线…

windows下安装zabbix_agent

Server端在linux系统上,server端版本为2.2.6,是以前就装好的已经跑了很久的稳定版。目前的需求是要将新业务的服务器添加到该监控队列。而这些服务器是windows系统。 第一次下载了最新版的zabbix_agent for windows。按照正常程序安装完成后,…

JS和Jquery获取和修改label的值

获取值: label标签在JS和Jquery中使用不能像其他标签一样用value获取它的值: var labeldocument.getElementById("id");var valuelabel.value;var value$("#id").val();可以这样:JS: var labeldocument.getElementById(&…

Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)

本篇文章主要介绍了"Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)",主要涉及到Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)方面的内容,对于Linux内核访问外设I/O--动态映射(ioremap)和静态映射(map_desc)感…

点击显示隐藏盒子函数

示例&#xff1a;&#xff08;手机导航栏&#xff09; <header> <div class"logo"></div> <p class"text">微蜂传媒</p> <div class"nav_btn" οnclick"showHide(.dropdown_menu)"></div> …

MyBatis 缓存机制

Mybatis 有两级缓存&#xff1a; 一级缓存&#xff1a; 也称为本地缓存&#xff0c;SqlSession级别的缓存。一级缓存是一直开启的&#xff1b; 与数据库同一次会话期间查询到的数据会放在本地缓存中&#xff0c;以后如果需要获取相同的数据&#xff0c;直接从缓存中拿&#xff…

Android虚拟化引擎VirtualApp探究

2019独角兽企业重金招聘Python工程师标准>>> 介绍 首先需要说明的是&#xff0c;VirtualApp并不是前些阵子滴滴开源的插件化框架VirtualApk。 VirtualApp是一个更加黑科技的东西&#xff0c;他可以创建一个虚拟空间&#xff0c;你可以在虚拟空间内任意的安装、启动和…

揭开全景相机的创业真相

&#xff08;Bubl全景相机&#xff09; 国外一开源&#xff0c;国内就自主。这在VR&#xff08;虚拟现实&#xff09;领域体现的淋漓尽致——Google的Cardborad一开源&#xff0c;国内就有数百家厂商蜂拥做了各种插手机的VR盒子。到了全景相机&#xff0c;这一幕似乎又开始重演…

一个厉害的网站

2019独角兽企业重金招聘Python工程师标准>>> dromara 发现一个网站&#xff0c;发现上面的开源项目真的都非常厉害诶。 转载于:https://my.oschina.net/miaojiangmin/blog/2934221

最全VR产业链全景图(必收藏)

http://www.360doc.com/content/16/0324/20/28622037_544974325.shtml

本地计算机绑定域名访问

我们知道localhost绑定的是本地主机IP&#xff08;127.0.0.1&#xff09;&#xff0c;那么我们能不能自定义绑定本地主机IP地址呢&#xff1f;答案是肯定的&#xff0c;同修改hosts文件&#xff0c;我们可以实现上面的需求。 打开本地C盘&#xff0c;找到Windows文件夹-->Sy…

Tomcat配置及原理文章

同一tomcat实现多端口多域名访问 tomcat源码分析(第一篇 从整体架构开始) tomcat源码分析(第二篇 tomcat启动过程详解) tomcat源码分析(第三篇 tomcat请求原理解析--Connector源码分析) tomcat源码分析(第四篇 tomcat请求处理原理解析--Container源码分析)转载于:https://www.c…

windwon安装macaca环境

一 安装配置java1.安装java_jdk &#xff0c;安装过程中顺带一起安装jre(1)选择【新建系统变量】--弹出“新建系统变量”对话框&#xff0c;在“变量名”文本框输入“JAVA_HOME”,在“变量值”文本框输入JDK的安装路径&#xff0c; 如“C&#xff1a;/Java/jdk1.6.0_25”(2)在“…

三星要用Exynos 9芯片打造独立VR头显

【天极网VR虚拟现实频道】近期有数据显示&#xff0c;2016年全球VR虚拟现实设备的出货量达到了630万台&#xff0c;其中三星Gear VR以451万台出货量称霸全球VR市场&#xff0c;占据高达71%的市场份额。不过三星的眼光并不局限于手机VR设备&#xff0c;这家公司正在计划推出一款…

消息队列常见的 5 个应用场景

消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能、高可用、可伸缩和最终一致性架构。使用较多的消息队列有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ。 消息队列应用场…

Leetcode之二叉树(前200道)

持续更新... github链接&#xff1a;https://github.com/x2mercy/Leetcode_Solution 为什么括号200道呢&#xff01;因为准备按照200道这样的周期刷&#xff0c;每200道刷两遍&#xff0c;第一遍按难度刷&#xff0c;第二遍按类别刷&#xff01; 先整理binarytree这一类别也是因…