花了两天时间来专门研究u-boot的内存分布,这个图网上已经有了,但只是大致图形,没有详细、深入解析。所以自己就专门画了图,添加一些东西。
此外,还专门测试了一下u-boot下全局变量、未初始化变量等等的地址分布,也画了一张图。不过好像跟linux下进程的内存分布不太一致,估计是u-boot自己管理内存的——很明显,此时linux还不知道在哪里呢。但是,这些都不妨碍我们学习一些底层的东西。
这个测试就是自己编写一个自定义的命令,添加自定义命令其实很简单的,在u-boot移植随笔:自定义u-boot命令点灯中已经简单写了一下了。本着“够用即可”的原则,还没有深入追踪u-boot到底如何实现shell命令的——有些时候难得糊涂是很有必要的,凡事看开些总归有好处。
先上第一张图:
再上第二张图:
测试代码如下:
1 | #include <common.h> |
启动信息如下(有删改)
1 | U-Boot 2010.09-svn9 (Nov 30 2010 - 09:36:08) |
其中的“U-Boot 2010.09-svn9 ”表示在svn控制下的第9个版本(看来提交服务器不勤快啊!)
注:本文出现的地址肯定会根据实际情况而改变(因为u-boot映像文件大小会改变的)!但也肯定不会影响其本质!这一点,山人可以作保证。如果有心情,可以使用md来查看你想查看的内存地址的内容,对比代码,这样可以认识更深入一些。
比如,某一些查看内存是这样的:
1 | LATE2440> md.b 33f9b62c (这个地址是hello那个地址,注意,这个地址改变了) |
本文有图有真相,不作太多解释,以免显露自己的无知及不足。