欢迎来到天天文库
浏览记录
ID:30226780
大小:221.00 KB
页数:41页
时间:2018-12-28
《vivi地实现分析报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案vivibootloader的实现参考资料:1.嵌入式系统BootLoader技术内幕,詹荣开(zhanrk@sohu.com)2.GettingstartedwithVIVI,JanhoonLyu,nandy@mizi.com3.嵌入式设备上的Linux系统开发,A.Santhanametc.4.Linuxsystemdevelopmentonanembeddeddevice,A.Santhanam5.vivi有关资料http://www.mizi.com/developer/s3c2410x/index.html6.smdk2410的硬
2、件和软件/linux相关资料http://www.samsung.comsearch2410说明:本文文字结构照抄”嵌入式系统BootLoader技术内幕,詹荣开(zhanrk@sohu.com)”一文,以vivi中head.S作为stage1,main()作为stage2,解释了VIVIforSMDK2410(basedonS3C2410)开发系统的bootloader的实现。将原文放在这里是为了方便读者。注意,VIVI的实现并非完全跟原文一致。多谢原文作者詹大侠的详细解释。附录有一节__SETUP在kernel的作用来自jeppeter(membe
3、r)fromhttp://linuxforum.net文中对MTDsubsystemlinux没作解释。Google“MTDlinuxsubsystem文件系统JFSS2”可以获得足够的解释。如有错误,烦请emailjonesxu@gmail.com告知。多些Ver.0.95JonesSZXujonesxu@gmail.com2004-09-29Chapter1Bootloader基本结构由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分。依赖于CPU体系结构的代码,比如设备初始
4、化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。BootLoader的stage1通常包括以下步骤(以执行的先后顺序):硬件设备初始化。为加载BootLoader的stage2准备RAM空间。拷贝BootLoader的stage2到RAM空间中。设置好堆栈。跳转到stage2的C入口点。BootLoader的stage2通常包括以下步骤(以执行的先后顺序):精彩文档实用标准文案初始化本阶段要使用到的硬件设备。检测系统
5、内存映射(memorymap)。将kernel映像和根文件系统映像从flash上读到RAM空间中。为内核设置启动参数。调用内核。1.1BootLoader的stage11.1.1基本的硬件初始化这是BootLoader一开始就执行的操作,其目的是为stage2的执行以及随后的kernel的执行准备好一些基本的硬件环境。它通常包括以下步骤(以执行的先后顺序):1.屏蔽所有的中断。为中断提供服务通常是OS设备驱动程序的责任,因此在BootLoader的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写CPU的中断屏蔽寄存器或状态寄存器(比如ARM的CPS
6、R寄存器)来完成。2.设置CPU的速度和时钟频率。3.RAM初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存库控制寄存器等。4.初始化LED。典型地,通过GPIO来驱动LED,其目的是表明系统的状态是OK还是Error。如果板子上没有LED,那么也可以通过初始化UART向串口打印BootLoader的Logo字符信息来完成这一点。5.关闭CPU内部指令/数据cache。VIVI在第一阶段完成以下任务Disablewatchdogtimer;disableallinterrupts;initialisesystemclocks;initial
7、isethestaticmemoryAllLEDonsetGPIOforUARTInitializeUART0;copy_myselftoram;jumptoramgetreadtocallCfunctionssetupstackpointercallmain1.1.2为加载stage2准备RAM空间为了获得更快的执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载BootLoader的stage2准备好一段可用的RAM空间范围。由于stage2通常是C语言执行代码,因此在考虑空间大小时,除了stage2可执行映象的大小外,还必须把堆栈
8、空间也考虑进来。此外,空间大小最好是memorypage大小(通常是4KB)的倍数。一般而言,
此文档下载收益归作者所有