DECLARE_GLOBAL_DATA_PTR宏定义问题

  最近闲着顺便看了看6410的uboot代码,因为友善的boot对nand部分代码做了隐藏,所以干脆找了光盘里面三星原厂的uboot代码来看,因为友善的boot代码肯定也是基于厂商的代码改的,肯定可以的。

  安全起见,直接编译了三星的uboot代码,放到友善的板子上跑了一下,结果果然可以跑,但是发现起来之后,打印出来的dram size是0。

  今天查了一下,发现是DECLARE_GLOBAL_DATA_PTR这个定义的问题,友善的代码里面加了注释,说gcc4.5.1+版本对这个宏定义的定义已经不支持了!

  

  uboot中原始定义如下:

  #define DECLARE_GLOBAL_DATA_PTR     register volatile gd_t *gd asm ("r8")

  友善给改成了:

  #define DECLARE_GLOBAL_DATA_PTR extern gd_t *gd;

  就是定义了全局变量!

  改了之后,Dram的size就正常了。

  

  查了查8127的uboot代码,发现仍然使用的uboot原始定义,等周一去公司看一下8127的uboot编译器的版本,目前暂时无法验证了。

  继续,在公司验证了8127的uboot代码编译器的确是4.3.3版本的,接下来准备有时间看一下两个编译器编译出来的代码的差别。

原文地址:https://www.cnblogs.com/masky/p/4320811.html