在Linux的Linux启动中使用地址ZTEXTADDR

时间:2013-12-01 09:30:28

标签: linux-kernel arm bootloader

ZTEXTADDR 在Linux内核中的作用是什么?

lxr.linux.no开始,它是RAM中的一个地址,它将zImage的地址保存为下面的序列?

:一种。

uImage (DataFlash/NAND) ---load_to_RAM---> 
 uImage (@ boot_addr) ---decompress_uImage--> 
  zImage (@ ZTEXTADDR) --- decompress_zImage---> 
   uncompressed image (@ ZRELADDR).

或只是:

uImage (DataFlash/NAND) ---load_to_RAM---> 
 uImage (@ boot_addr) ---decompress_uImage--> 
  uncompressed image (@ ZRELADDR)

在新内核版本中没有使用ZTEXTADDR进行启动过程吗?

1 个答案:

答案 0 :(得分:2)

Linux ARM解压缩引导加载程序能够在从RAM运行时重新定位自身。重定位部分是PC相关的,因此可以在任何地址加载。但是,如果您的主图像从FLASH / ROM开始,则代码无法重新定位;在RAM中移动图像是一个简单的memmove(),它更多地涉及到NOR闪存,而且对于ROM来说是不可能的。

this case中,compressed boot linker script ZTEXTADDR 一起用作解压缩代码的位置。在您的图表中,您有一个 u-boot ,它将加载 uImage 。没有理由直接从Flash / ROM执行此操作。 u-boot 可以将图像复制到RAM中,不需要 ZTEXTADDR 值,它应该保留为零。

如果您的图像直接从Flash / ROM引导,没有引导加载程序,则 ZTEXTADDR 非常有用,

 zImage (in flash) --> decompress vmlinux.bin to RAM --> run kernel

zImage 可能需要通过一些芯片设置进行注释才能实现,并且需要 ATAGS 或设备树链接。出于这个原因,boot/compressed中有许多机器变体;这是不可维护的,不鼓励这些类型的文件。通常,另一个引导加载程序将映像加载到RAM, zImage 可以将自身移动到所需的任何目的地;我认为这是你的情况,你应该将 ZTEXTADDR 设置为零并忘记它。