Uboot引导加载程序Bootloader源代码分析与移植Word文档格式.docx
- 文档编号:15138274
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:95
- 大小:1.59MB
Uboot引导加载程序Bootloader源代码分析与移植Word文档格式.docx
《Uboot引导加载程序Bootloader源代码分析与移植Word文档格式.docx》由会员分享,可在线阅读,更多相关《Uboot引导加载程序Bootloader源代码分析与移植Word文档格式.docx(95页珍藏版)》请在冰豆网上搜索。
②支持多种嵌入式操作系统内核,如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\<
cputype>
\start.s中,完成的工作主要有:
●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
.globlFIQ_STACK_START
FIQ_STACK_START:
#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
如果需要,对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不使用中断
subr0,r0,#(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
分配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 源代码 分析 移植