uboot中对flash和DDR的管理
1、uboot阶段flash的分区(分块管理)
(1)uboot阶段对flash的分区(分块管理):uboot、uboot_varenv、kernel、rootfs、自由空间,一共4G的空间。
(2)在uboot中没有操作系统,因此我们对flash的管理必须实现使用分区界定(实际上在uboot中和kernel中都有分区表,分区表就是我们在作系统移植时对flash的整体管理分配方法),有了这个界定后我们在部署系统时就按照分区界定方法来部署,uboot和kernel的软件中也按照这个分区界定来工作就不会错。
(3)分区方法不是固定的,是可以变动的,但是在一个移植中必须事先设计好定死,设计的一般标准:
uboot必须从flash起始地址开始存放(s5pv210这个SOC是存放在扇区1的);
uboot分区必须保证uboot肯定能放的下,512kb或者1m
环境变量分区紧贴着uboot来存放,大小为32kb或者更多些
kernel:可以紧贴环境变量存放,大小为3MB或者5MB
rootfs:紧贴kernel分区来放
剩下的就是自由分区,一般kernel启动后将自由分区挂载到rootfs下使用
(4)一般规律:
各分区彼此相连;uboot必须在flash开头,其他分区相对位置可变,大小自定;整个flash从头到尾充分利用;分区在系统移植前确定好,在uboot中和kernel中使用同一个分区表。将来在系统部署时和系统代码中的分区方法也必须一样。
2、uboot阶段DDR的分区
(1)flash是掉电存在的,DDR是掉电消失的,因此DDR是每次系统运行时才开始部署使用的
(2)内存的分区主要是在linux内核启动起来之前,linux内核启动后内核的内存管理模块会接管整个内存空间,那时候就不用我们来管了。
(3)内存分区的关键在于内存中那一块用来干什么必须分配好,以避免各个不同功能使用通一块内存造成互相踩踏。比如说我们tftp 0x23E00000 zImage去下载zImage到内存的 0x23E00000处就会出错,因为这个内存处实际是uboot的镜像所在。这样下载会导致下载的zImage把内存中的uboot给冲掉。