免费注册 查看新帖 |

Chinaunix

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

[BootLoader] 读和写内存范围以外的区域,却没有导致CPU异常,啥道理? [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-02-17 23:52 |只看该作者 |倒序浏览
本帖最后由 arm-linux-gcc 于 2013-02-18 09:29 编辑

我在2440板子上尝试了一个case:在uboot环境下,没开MMU,运行在物理地址的,我板子上的内存只有64M,但是我在96M这个位置去md和mw(这个位置什么都没有,即不是内存,也没有设备),结果却并未导致crash。

对于这种错误的,需要具备什么条件才能够监控到?
是必须通过MMU的页表来实现对非法区域的读写的禁止?
或者是必须至少要有MPU才可以?




有高人能讲讲程序crash的本质吗,我自己有一点简单的理解,如下:
首先进入异常模式之后,异常处理代码会打印出oops,然后做死循环。导致异常的原因我自己理解的有以下几点:
1,指令异常,将不是指令的地方当作了指令来执行,导致CPU进入未定义模式,这种通常都是因为野的函数指针导致的。
2,访问异常,访问了不允许访问的页,即某些页映射为不可访问,这种就是最常说的段错误,最常见的空指针也是属于这种性质的错误。
3,还有做除法时,除以0也会导致CPU进入异常模式。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
2 [报告]
发表于 2013-02-18 11:50 |只看该作者
谷歌查了一下,找到两个帖子,发现了以下解释,应该能解释我的疑问

http://stackoverflow.com/questio ... ntation-faults-in-c

An embedded system without MMU won't give you any segfault at all - even when "writing" to the ROM.

Segmentation fault is caused by bad accesses to memory, only if your OS has a MMU. Otherwise, you won't get it but only strange behavior.





http://coding.derkeiler.com/Arch ... 09-02/msg00774.html

In a typical system with no MMU, *nothing* detects a segmentation
fault, and one never happens.

论坛徽章:
0
3 [报告]
发表于 2013-02-20 10:13 |只看该作者
一个地址,包括你这里超过64M的96M的那个位置,都会有对应的映射的空间的,即属于物理上哪个设置的地址空间(或者是空的,无效的地址)

而关于如何映射,需要你找到该CPU的datasheet,找到其中和 Memory Map相关的部分,一般都有 这个 内存地址映射表的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP