armv7 u-boot是否使用MMU?

时间:2014-08-05 14:21:20

标签: u-boot

我们正在使用Beaglebone黑色定制板。我编辑了一个链接描述文件来添加内存部分,以便在那里记录一些信息:

. = ALIGN(4);
.logging :
{
        _log_begin = .;
        _log_end = . + 0x2000;
}

我在C文件中定义了数组,如下所示:

char log_arr[0x2000] __attribute__ ((section(".logging")));

现在,如果我打印log_arr地址,则输出0x8ffa2774,但当我检查u-boot.map文件时,我看到log_arr位于地址0x8084b774

使用MMU进行u-boot吗?据我所知,它已在程序集编写的启动代码中关闭。当我尝试在代码中使用_log_begin时将其定义为extern,u-boot代码编译会中断并抛出错误:

  

make 1 * [checkarmreloc]错误1

当我搜索此错误时,我会得到一些patch,其中表示"确保u-boot仅使用相对重定位"。这是什么意思?

1 个答案:

答案 0 :(得分:4)

  

使用MMU进行u-boot吗?

没有。
来自U-Boot 2014-07的README文件:

U-Boot runs in system state and uses physical addresses, i.e. the
MMU is not used either for address mapping nor for memory protection.

链接器映射的地址值与运行时值的差异可能是由于U-Boot重定位自身(内存越高,越靠近顶部)。 再次来自U-Boot 2014-07的README文件:

After booting and sizing and initializing DRAM, the code relocates itself
to the upper end of DRAM. 
  

...表示"确保u-boot仅使用相对重定位"。这是什么意思?

您的代码可以尝试使用绝对(不可重定位)的内存位置,或者允许C分配和重定位数组(即删除节指定符)。