TIwilliam hill官网
直播中

张雷

7年用户 208经验值
私信 关注

AM3352 GPMC地址为何要做虚拟内存映射?

本帖最后由 一只耳朵怪 于 2018-6-4 16:07 编辑

各位好:
     在我的板中,GPMC用来控制三种外设存储设备。cs0为nand flash,cs1为cpld,cs2为dsp(cx64x00)。地址空间划分为:
  cs0:0x01000000~0x01FFFFFF(16M)
  cs1:0x50000000~0x05FFFFFF(16M)
  cs2:0x08000000~0x08FFFFFF(16M)
   在3.14内核中,初始化nand flash时,GPMC控制寄存器地址(0x50000000)地址被映射成0xf0110000,即我写GPMC控制寄存器的时候都要写入基地址为0xf0110000
   DSP的地址空间(0x08000000)被映射成0xf3000000,操作DSP的HPI接口时,都要往0xf3000000地址操作。
   请问内核可以设置成不需要地址映射的吗?

回帖(5)

罗兰君

2018-6-4 05:42:52
这是和Linux的内存管理有关吧,所有驱动层操作的地址都是虚拟地址。
举报

范逊敏

2018-6-4 05:49:37
引用: 344868615qq 发表于 2018-6-4 05:42
这是和Linux的内存管理有关吧,所有驱动层操作的地址都是虚拟地址。

还有就是安全机制的问题,系统不允许直接访问物理地址
当然习惯了就好了,慢慢适应吧 不要妄想改变什么,哈哈
举报

张雷

2018-6-4 06:02:52
引用: 344868615qq 发表于 2018-6-4 05:42
这是和Linux的内存管理有关吧,所有驱动层操作的地址都是虚拟地址。

GPMC的地址0x00000000~0x1FFFFFFF这个512M的地址本来就是从物理内存映射过来的虚拟地址,然后在这512M的空间内分地址块,这些地址块的的地址又被映射到0xF0114000开始的地址去了。
另外GPMC控制寄存器的地址0x50000000也被映射到0xf0110000的地址了。
举报

张雷

2018-6-4 06:08:12
引用: rfffwef 发表于 2018-6-4 05:49
还有就是安全机制的问题,系统不允许直接访问物理地址
当然习惯了就好了,慢慢适应吧 不要妄想改变什么,哈哈

被映射的虚拟地址再次映射,但是cpsw的寄存器的地址就没有被映射,datasheet里面定义的是多少就是多少。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分