Uboot引导加载程序Bootloader源代码分析与移植.docx
- 文档编号:2220527
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:95
- 大小:1.59MB
Uboot引导加载程序Bootloader源代码分析与移植.docx
《Uboot引导加载程序Bootloader源代码分析与移植.docx》由会员分享,可在线阅读,更多相关《Uboot引导加载程序Bootloader源代码分析与移植.docx(95页珍藏版)》请在冰豆网上搜索。
Uboot引导加载程序Bootloader源代码分析与移植
U-boot引导加载程序(Bootloader)源代码分析与移植
第一章绪论
1.1U-boot简介
U-Boot,全称UniversalBootLoader,是遵循GPL条款的开放源码项目。
从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。
其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。
但是U-Boot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。
其目前要支持的目标操作系统是OpenBSD,NetBSD,FreeBSD,4.4BSD,Linux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS。
这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。
这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。
就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最完善。
其它系列的处理器和操作系统基本是在2002年11月PPCBOOT改名为U-Boot后逐步扩充的。
从PPCBOOT向U-Boot的顺利过渡,很大程度上归功于U-Boot的维护人德国DENX软件工程中心WolfgangDenk[以下简称W.D]本人精湛专业水平和持着不懈的努力。
当前,U-Boot项目正在他的领军之下,众多有志于开放源码BOOTLOADER移植工作的嵌入式开发人员正如火如荼地将各个不同系列嵌入式处理器的移植工作不断展开和深入,以支持更多的嵌入式操作系统的装载与引导。
U-Boot的优点:
①开放源码;
②支持多种嵌入式操作系统内核,如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS;
③支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;
④较高的可靠性和稳定性;
⑤高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
⑥丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦较为丰富的开发调试文档与强大的网络技术支持;
1.2U-boot源码树
从根目录树中可以看出,U-boot源代码主要包含以下几个部分
∙board目标板相关文件,主要包含SDRAM、FLASH驱动;
∙common独立于处理器体系结构的通用代码,如内存大小探测与故障检测;
∙cpu与处理器相关的文件。
如mpc8xx子目录下含串口、网口、LCD驱动及中断初始化等文件;
∙driver通用设备驱动,如CFIFLASH驱动(目前对INTELFLASH支持较好)
∙docU-Boot的说明文档;
∙examples可在U-Boot下运行的示例程序;如hello_world.c,timer.c;
∙includeU-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
∙lib_xxx处理器体系相关的文件,如lib_ppc,lib_arm目录分别包含与PowerPC、ARM体系结构相关的文件;
∙net与网络功能相关的文件目录,如bootp,nfs,tftp;
∙post上电自检文件目录。
尚有待于进一步完善;
∙rtcRTC驱动程序;
∙tools用于创建U-BootS-RECORD和BIN镜像文件的工具;
U-boot的这些目录结构可以大致的划分成如下层次:
1.3U-boot支持的主要功能
U-Boot可支持的主要功能列表
∙系统引导支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统
∙支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
∙基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤Linux支持最为强劲;
∙支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
∙CRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好;
∙设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
∙上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;
∙特殊功能XIP内核引导;
第二章U-boot源代码详细分析
2.1U-boot的启动流程
U-boot的启动流程包括两个阶段,第一阶段进行一些基本的初始化动作,为启动第二阶段的主体做准备,此阶段代码由汇编代码写成。
第二阶段是进行系统的初始化工作,并准备引导操作系统。
下面我们对这两个阶段进行详细的分析。
2.1.1第一阶段(Stage1)
第一阶段的启动代码在cpu\
●CPU自身初始化:
包括MMU,Cache,时钟系统,SDRAM控制器等的初始化
●重定位:
把自己从非易失性存储器搬移到RAM中
●分配堆栈空间,设置堆栈指针
●清零BSS数据段
●跳转到第二阶段入口函数start_armboot()
AT91SAM9260EK的启动代码在cpu\arm926ejs\start.s中,精简后的代码如下:
[cpu\arm926ejs\start.s]
;ARM的向量表
.globl_start
_start:
breset
ldrpc,_undefined_instruction
ldrpc,_software_interrupt
ldrpc,_prefetch_abort
ldrpc,_data_abort
ldrpc,_not_used
ldrpc,_irq
ldrpc,_fiq
_undefined_instruction:
.wordundefined_instruction
_software_interrupt:
.wordsoftware_interrupt
_prefetch_abort:
.wordprefetch_abort
_data_abort:
.worddata_abort
_not_used:
.wordnot_used
_irq:
.wordirq
_fiq:
.wordfiq
;全局符号定义
_TEXT_BASE:
.wordTEXT_BASE
.globl_armboot_start
_armboot_start:
.word_start
/*
*Thesearedefinedintheboard-specificlinkerscript.
*/
.globl_bss_start
_bss_start:
.word__bss_start
.globl_bss_end
_bss_end:
.word_end
#ifdefCONFIG_USE_IRQ
/*IRQstackmemory(calculatedatrun-time)*/
.globlIRQ_STACK_START
IRQ_STACK_START:
.word0x0badc0de
/*IRQstackmemory(calculatedatrun-time)*/
.globlFIQ_STACK_START
FIQ_STACK_START:
.word0x0badc0de
#endif
;复位入口
reset:
;CPU设为SVC32模式
mrsr0,cpsr
bicr0,r0,#0x1f
orrr0,r0,#0xd3
msrcpsr,r0
;如果需要,调用cpu_init_crit进行CPU关键初始化
;在AT91SAM9260EK板上没有使用。
这部分工作在Bootstrap中完成。
#ifndefCONFIG_SKIP_LOWLEVEL_INIT
blcpu_init_crit
#endif
;如果需要,对U-boot进行重定位(从Flash搬移到SDRAM中)
;在AT91SAM9260EK板上没有使用。
U-boot在运行之前已经被Bootstrap加载到了SDRAM
中。
#ifndefCONFIG_SKIP_RELOCATE_UBOOT
relocate:
/*relocateU-BoottoRAM*/
adrr0,_start/*r0<-currentpositionofcode*/
ldrr1,_TEXT_BASE/*testifwerunfromflashorRAM*/
cmpr0,r1/*don'trelocduringdebug*/
beqstack_setup
ldrr2,_armboot_start
ldrr3,_bss_start
subr2,r3,r2/*r2<-sizeofarmboot*/
addr2,r0,r2/*r2<-sourceendaddress*/
copy_loop:
ldmiar0!
{r3-r10}/*copyfromsourceaddress[r0]*/
stmiar1!
{r3-r10}/*copytotargetaddress[r1]*/
cmpr0,r2/*untilsourceendaddreee[r2]*/
blecopy_loop
#endif/*CONFIG_SKIP_RELOCATE_UBOOT*/
;为irq,fiq,abt模式分配堆栈
stack_setup:
ldrr0,_TEXT_BASE;指向U-boot起始点
subr0,r0,#CFG_MALLOC_LEN;留出malloc内存空间
subr0,r0,#CFG_GBL_DATA_SIZE;留出u-boot私有数据的空间
;如果使用中断机制,分配irq,fiq模式的堆栈
;AT91SAM9260EK不使用中断
#ifdefCONFIG_USE_IRQ
subr0,r0,#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
;分配abt模式堆栈空间(12bytes),设置svc模式SP
subsp,r0,#12/*leave3wordsforabort-stack*/
;清零BSS数据段
clear_bss:
ldrr0,_bss_start/*findstartofbsssegment*/
ldrr1,_bss_end/*stophere*/
mo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Uboot 引导 加载 程序 Bootloader 源代码 分析 移植