加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

uboot学习手记5——分区

(2016-03-29 17:20:11)
分类: uboot
uboot阶段的Flash分区
(1)所谓分区,就是对Flash进行分块管理
(2)在uboot中是没有操作系统的,因此对Flash的管理必须事先使用分区界定(实际上在uboot中和kernel中都有个分区表,分区表就是我们在做系统移植时对Flash的整体管理分配方法)。有了这个界定后,在部署系统时按照分区界定方法来部署,uboot和kernel的软件中也是按照这个分区界定来工作,就不会错。
(3)分区方法不是一定的,是可以变动的。但是在一个移植中必须事先设计好定死,一般在设计系统移植时就会定好,定的标准是:
uboot:uboot必须从Flash起始地址开始存放(也许是扇区0,也许是扇区1,也许是其他,取决于SoC的启动设计),uboot分区的大小必须保证uboot肯定能放下,一般设计为512KB或者1MB(因为一般uboot肯定不足512KB,给再大其实也可以工作,但是浪费);
环境变量:环境变量分区一般紧贴着uboot来存放,大小为32KB或者更多一点;
kernel:kernel可以紧贴环境变量存放,大小一般为3MB或5MB或其他;
rootfs:
剩下的就是自由分区,一般kernel启动后将自有分区挂载到rootfs下使用

总结:一般规律如下:
(1)各分区彼此相连,前面一个分区的结尾就是后一个分区的开头;
(2)整个Flash充分利用,从开头到结尾;
(3)uboot必须在Flash开头,其他分区相对位置是可变的哦;
(4)各分区的大小有系统移植工程师自己来定,一般定为合适大小(太小容易溢出,太大浪费空间)
(5)分区在系统移植前确定好,在uboot中和kernel中使用同一个分区表。将来在系统部署时和系统代码中的分区方法也必须一样;

DDR分区
(1)DDR的分区和Flash的分区不同,主要是因为Flash是掉电存在的,而DDR是掉电消失,因此可以说DDR是每次系统运行时才开始部署使用的;
(2)内存的分区主要是在linux内核启动起来之前,linux内核启动后内核的内存管理模块会接管整个内存空间,那时候就不用我们来管了。
(3)注意内存分区关键就在于内存中哪一块用来干什么必须分配好,以避免各个不同功能使用了同一块内存造成的互相踩踏。譬如说我们tftp 0x23E00000 zImage去下载zImage到内存的0x23E00000处就会出错,因为这个内存处实际是uboot的镜像所在。这样下载会导致下载的zImage把内存中的uboot给冲掉。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有