ioremap,linux中ioremap和mmap的区别
来源:整理 编辑:智能门户 2023-08-17 09:57:19
本文目录一览
1,linux中ioremap和mmap的区别
你不是已经说了区别ioremap是将物理地址转换为虚拟地址mmap是将设备内存线性地址映射到用户地址空间linux的线程只能访问虚拟地址,不管是不是内核,ioremap应用,比如有个寄存器地址是0xe8000000你要用ioremap映射后,才能访问地址0xe8000000。这两个地址是不同的,mmu会帮你搞定,对你是透明的mmap在内核我用过ops中的mmap方法我写过一个例程,见附件。里面还有用户态的测试程序。
2,linux驱动中ioremap返回值是0是怎么回事
#include #include #include int mian() { pid_t pid; int a=2; int ret=1; pid=fork(); if(pid==0) { return 2; } else if(pid>0) { wait((void *)&ret); printf("return is:%d\n",ret); return 0; } else { printf("create process error!"); ...
3,内核态连续物理地址申请大于50M如何做
这样应该很难找到连续的50M的内存,这个要求有点高,内核中最大一次只能分配MAX_ORDER=11的内存,而且经常会失败,因为内存碎片会比较多。如果要分配这么大的连续内存,建议在引导时分配内存,使用mem=xxx启动参数,可以保留RAM顶部的内存,然后在系统启动后使用ioremap将保留的内存映射后使用。与其在内核里面申请这么大的连续内存,不如考虑你的设计方案是否合理memory初始化的过程中就可以预留出来嘛想多大就多大
4,ioremap将物理地址映射为虚拟地址问题
首先,你的函数参数有点问题,应该是ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) ,或者ioremap(unsigned long phys_addr, unsigned long size); 比如: ioremap(0x70000000, 4);表明物理地址是0x70000000,长度4个字节(即32位).ioremap函数会自动将物理的io地址映射到线形地址,读写的时候可以使用ioread8,ioread16,ioread32,iowrite8iowrite16,iowrite32这样的函数,当然也可以直接使用返回的地址进行操作,但是不推荐,否则不好移植.你好!不好意思。这个问题我帮不了你。如果对你有帮助,望采纳。
5,linux驱动里ioremap对外设IO资源进行映射有点糊涂
linux驱动里ioremap对外设I/O资源进行映射有点糊涂
悬赏分:5 -
离问题结束还有 14 天 1 小时
我写的驱动要对外设I/O资源进行操作,需要对物理地址进行映射,部分程序如下:
void *AC97C_VIR_BASE;
#define AC97C_PHY_BASE 0xfffa0000
#define AC97C_CAMR_VIR AC97C_CAMR+AC97C_VIR_BASE
#define AC97C_CBMR_VIR AC97C_CBMR+AC97C_VIR_BASE
#define AC97C_COTHR_VIR AC97C_COTHR+AC97C_VIR_BASE
AC97C_VIR_BASE = ioremap( AC97C_PHY_BASE, 0x100 );
在程序里
size = ((AT91C_BASE_AC97C->AC97C_CAMR_VIR) & AT91C_AC97C_SIZE) >> 16;
size = ((AT91C_BASE_AC97C->AC97C_CBMR_VIR) & AT91C_AC97C_SIZE) >> 16;
这两句能编译通过,但是其他的涉及虚拟地址映射的部分都编译出错了
比如:
(AT91C_BASE_AC97C->AC97C_COTHR_VIR) = data;
(AT91C_BASE_AC97C->AC97C_COMR_VIR) |= AT91C_AC97C_RXRDY;
都提示:
error: invalid lvalue in assignment
这是为什么呢?请哪位高手指点小弟一下
您不登录也可以回答问题
您还可以输入字
输入内容已经达到长度限制
登录后回答可以获得经验值奖励,并可以查看和管理所有的回答。 |
用户名
动态
上周上升
7701
6101
3463
2614
2204
使用可以第一时间收到“提问有新回答”“回答被采纳”“网友求助”的通知。
您想在自己的网站上展示百度“知道”上的问答吗?来吧!
如要投诉或提出意见建议,请到反馈。(AT91C_BASE_AC97C->AC97C_COTHR_VIR) = data;
你这是结构体吗?应该是应该是基地址映射好,然后对其对应的寄存器赋值就可以,看不懂这些代码表达的含义,像是给结构体指针赋值
6,驱动中操作物理绝对地址为什么要先ioremap
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags) 入口: phys_addr:要映射的起始的IO地址; size:要映射的空间的大小; flags:要映射的IO空间的和权限有关的标志; 功能: 将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问; 实现:对要映射的IO地址空间进行判断,低PCI/ISA地址不需要重新映射,也不允许用户将IO地址空间映射到正在使用的RAM中,最后申请一 个 vm_area_struct结构,调用remap_area_pages填写页表,若填写过程不成功则释放申请的vm_area_struct空 间; 意义: 比如isa设备和pci设备,或者是fb,硬件的跳线或者是物理连接方式决定了硬件上的内存影射到的cpu物理地址。 在内核访问这些地址必须分配给这段内存以虚拟地址,这正是__ioremap的意义所在 ,需要注意的是,物理内存已经"存在"了,无需alloc page给这段地址了. 文件中的注释也是比较详尽的,并且只 暴露了__ioremap,iounmap两个函数供其他模 块调用,函数remap_area_pte,remap_area_pmd,remap_area_pages只为__ioremap所用. -------- 为了使软件访问I/O内存,必须为设备分配虚拟地址.这就是ioremap的工作.这个函数专门用来为I/O内存区域分配虚拟地址(空间).对于直接映射的I/O地址ioremap不做任何事情(uClinux中是这么实现的??) 有了ioremap(和iounmap),设备就可以访问任何I/O内存空间,不论它是否直接映射到虚拟地址空间.但是,这些地址永远不能直接使用(指物理地址),而要用readb这种函数. 根据计算机平台和所使用总线的不同,I/O 内存可能是,也可能不是通过页表访问的,通过页表访问的是统一编址(PowerPC),否则是独立编址(Intel)。如果访问是经由页表进行的,内核必须首先安排物理地址使其对设备驱动 程序可见(这通常意味着在进行任何 I/O 之前必须先调用 ioremap)。如果访问无需页表,那么 I/O 内存区域就很象 I/O 端口,可以使 用适当形式的函数读写它们。 不管访问 I/O 内存时是否需要调用 ioremap,都不鼓励直接使用指向 I/O 内存的指针。尽管(在“I/O 端口和 I/O 内存” 介绍过)I/O 内存在硬件一级是象普通 RAM 一样寻址的,但在“I/O 寄存器和常规内存”中描述过的那些需要额外小心的情况中已经建议不要使用普 通指针。相反,使用“包装的”函数访问 I/O 内存,一方面在所有平台上都是安全的,另一方面,在可以直接对指针指向的内存区域执行操作的时候,该函数 是经过优化的 ------- 自己原以为当给显卡上的存储空间分配了总线地址A以后,它所对应的虚拟空间就随之确定了.也就是A+3G.可是事实上,在ioremap.c文件里面的实现并不是这样的.所用的函数是 __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)实现的时候是为从phys_addr开始的size大小的物理地址分配一块虚拟地址.注意这里是分配,而不是指定.我所认为的分配应该是指定即根据phys_addr得到其所对应的虚拟地址是phys_addr+3G. 本人认为一合理的解释是这样的:系统虚拟空间中映射的非IO卡上的地址空间满足3G差关系,而IO卡上的 存储空间就不满足了.驱动中操作物理绝对地址为什么要先ioremap
文章TAG:
linux 区别 ioremap
大家都在看
-
苹果自动同步怎么关闭,关闭手机应用如何进行
2022-12-30
-
iphone手机自动触摸,手机屏幕跳动可能是因为系统有问题
2022-12-30
-
酷睿 自动降频,为什么要关闭cpu自动降频?答案揭晓!
2023-01-22
-
怎么设置自动换锁屏壁纸,手机锁屏壁纸怎么设置自动更换?
2023-01-23
-
手机很快自动锁屏,手机自动锁屏怎么回事?看视频就ok了!
2023-01-25
-
Flyme6开启自动开关机,魅族6如何发力关机?
2023-02-07
-
笔记本fn键自动使用,如何使用小米笔记本电脑进行安全配置?
2023-02-09
-
宁波优塑智能科技怎么样,宁波优创是不是做华为的呀谁买过他们的东西啊价格好吗
2023-02-16
-
龙浦智能科技股份怎么样,马丁路德机器人公司怎么样
2023-02-16
-
余额宝自动赚钱是怎么回事,理财有讲究!财富自由
2023-02-19
-
智能科技护腰带怎么用,石墨烯护腰带好用吗
2023-02-22
-
北京建筑智能科技怎么样,建筑智能化工程技术以后容易就业吗月薪怎么样
2023-02-23
-
iphone5如何自动导出图图片片,从电脑手机怎么用?
2023-02-28
-
带着外星科技闯都市,现代都市小说 主角无敌 带外星科技的小说
2023-03-06
-
智能电视频繁自动切换,电视机器停电后自动启动一般原因如下
2023-03-15