免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7519 | 回复: 4
打印 上一主题 下一主题

u-boot相关powerpc处理器 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2009-12-07 17:54 |显示全部楼层
把flash的那个全局变量所在的地址块映射到程序需要访问的地址上(虚拟地址),打开MMU

论坛徽章:
0
2 [报告]
发表于 2009-12-08 10:21 |显示全部楼层
感觉问题不是lz描述的那么复杂
把D-cache关掉或在全局变量定义的地方加个volatile试一试

论坛徽章:
0
3 [报告]
发表于 2009-12-11 10:49 |显示全部楼层
从flash引导,在ram重定位后,在访问全局变量之前,把ram的物理地址映射到虚拟地址0xfe000000,当然你的bin文件有多大就映射多少页,然后打开mmu。估计所谓的arm引导后flash和ram地址自动转换也是通过mmu转了一下,因为总线上的ram和flash接法已经决定了片选的物理地址

如果你嫌这样太麻烦,可以在引导代码里自己做自定义全局变量symbol重定位,但这样更麻烦

[ 本帖最后由 readkernel 于 2009-12-11 10:56 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2009-12-13 21:44 |显示全部楼层
-mrelocatable

* On ppc32 we compile with -mrelocatable, which means that references
* to extern and static variables get relocated automatically.
* On ppc64 we have to relocate the references explicitly with
* RELOC.  (Note that strings count as static variables.)

去看看arch\powerpc\kernel\prom_init.c
获许会对你的实现有帮助

[ 本帖最后由 readkernel 于 2009-12-13 21:49 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-12-16 09:31 |显示全部楼层
或者可以用一个更简单的方法

在.lds文件里把.data段的运行地址定义在ram的物理地址空间中,加载地址还是跟在.text后面

操作系统下普通的二进制文件在加载运行时,加载程序 会根据 链接定义 自动把.data段加载到它的运行地址上。

但你这段并不是由操作系统加载的,而是CPU上电启动引导的,所以.text段中的程序开头部分必须做.data段加载操作,把.data段copy到它的运行地址上,后面读写全局变量都是在ram中了。

google里搜 链接脚本文件定义
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP