uboot的简介——uboot对Flash与DDR的管理

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

1、uboot阶段对Flash的分区

所谓分区,即对存储设备进行分块管理。

PC机等产品中,整个硬盘由操作系统统一管理,其使用文件系统帮我们管理硬盘空间,从而管理保证了文件之间不会互相堆叠,使用者不用太过在意分区问题。

uboot中没有操作系统,因此必须事先规定Flash(相当于硬盘)的分区表。实际上在uboot中和kernel中都有一个分区表,它对Flash进行管理与分配。有了这个分区表后,我们在部署系统时按照分区表来部署,uboot和kernel的软件中也按照这个分区表来工作,就不会出错。

分区方法不是固定的,可以变动。但是在移植中必须事先设计好定死,定好的标准如下。

  • uboot必须从Flash的起始地址开始存放,位置取决于SoC的启动设计。
  • uboot分区的大小必须保证uboot肯定能放下,一般设计为512KB或者1MB(因为一般的uboot大小不足512KB)。
  • 环境变量分区一般紧贴着uboot分区,大小为32KB或者更多一点。
  • kernel分区可以紧贴环境变量分区存放,大小一般为3MB或5MB或其他。
  • rootfs分区一般也紧贴着kernel分区存放的。
  • 剩下的就是自由分区,一般kernel启动后将自由分区挂载到rootfs下使用。

也就是说各分区彼此相连,前面一个分区的结尾就是后一个分区的开头。除了uboot必须在Flash开头,其他分区相对位置是可变的。而且各分区的大小由系统移植工程师来定,太小了容易溢出,太大了浪费空间。另外,uboot和kernel必须使用相同的分区表,系统部署时也必须遵守这个分区表。

2、uboot阶段对DDR的分配

内存的内容是掉电消失的,因此可以说DDR是每次系统运行时才开始部署使用的。

内存的分配,关键在于明确内存中某块空间的作用,以避免各个不同功能使用了同一块内存造成的互相踩踏。我们使用指令“tftp 0x23E00000 zImage”,将zImage下载到内存的0x23E00000处就会出现错误,因为这个内存处实际是uboot的镜像所在,这样下载会将内存中的uboot给覆盖掉。

内存的分配使用主要是在linux内核启动起来之前,linux内核启动后内核的内存管理模块会接管整个内存空间,那时候就不用我们来管了。

你可能感兴趣的:(Uboot移植,驱动开发)