u-boot 学习记录 (三) 源码分析(start.S)
来源:互联网 发布:c foreach遍历数组 编辑:程序博客网 时间:2024/05/21 14:44
u-boot启动时开始运行的函数接口:
//u-boot.lds:OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{. = 0x00000000;. = ALIGN(4);.text :{cpu/arm920t/start.o(.text)*(.text)} ...}从u-boot.lds内容可以知道u-boot第一个运行的代码处为 start.S中_start处:
1. _start
//start.S.globl _start_start:bstart_codeldrpc, _undefined_instructionldrpc, _software_interruptldrpc, _prefetch_abortldrpc, _data_abortldrpc, _not_usedldrpc, _irqldrpc, _fiq其紧接着跳转到start_code执行:
2. start_code:
// start.S/* * the actual start code */start_code:/* * set the cpu to SVC32 mode */mrsr0, cpsrbicr0, r0, #0x1forrr0, r0, #0xd3msrcpsr, r0blcoloured_LED_initblred_LED_on ...#if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410)/* turn off the watchdog */#if defined(CONFIG_S3C2400)#define pWTCON0x15300000#define INTMSK0x14400008/* Interupt-Controller base addresses */#define CLKDIVN0x14800014/* clock divisor register */#else#define pWTCON0x53000000#define INTMSK0x4A000008/* Interupt-Controller base addresses */#define INTSUBMSK0x4A00001C#define CLKDIVN0x4C000014/* clock divisor register */#endifldrr0, =pWTCONmovr1, #0x0strr1, [r0]/* * mask all IRQs by setting all bits in the INTMR - default */movr1, #0xffffffffldrr0, =INTMSKstrr1, [r0]#if defined(CONFIG_S3C2410)ldrr1, =0x3ffldrr0, =INTSUBMSKstrr1, [r0]#endif/* FCLK:HCLK:PCLK = 1:2:4 *//* default FCLK is 120 MHz ! */ldrr0, =CLKDIVNmovr1, #3strr1, [r0]#endif/* CONFIG_S3C2400 || CONFIG_S3C2410 *//* * we do sys-critical inits only at reboot, * not when booting from ram! */#ifndef CONFIG_SKIP_LOWLEVEL_INITblcpu_init_crit#endif#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate:/* relocate U-Boot to RAM */adrr0, _start/* r0 <- current position of code */ldr r1, _TEXT_BASE/* test if we run from flash or RAM */cmpr0, r1/* don't reloc during debug */beqstack_setupldrr2, _armboot_startldrr3, _bss_startsubr2, r3, r2/* r2 <- size of armboot */addr2, r0, r2/* r2 <- source end address */copy_loop:ldmiar0!, {r3-r10}/* copy from source address [r0] */stmiar1!, {r3-r10}/* copy to target address [r1] */cmpr0, r2/* until source end addreee [r2] */blecopy_loop#endif/* CONFIG_SKIP_RELOCATE_UBOOT *//* Set up the stack */stack_setup:ldrr0, _TEXT_BASE/* upper 128 KiB: relocated uboot */subr0, r0, #CONFIG_SYS_MALLOC_LEN/* malloc area */subr0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo */#ifdef CONFIG_USE_IRQsubr0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)#endifsubsp, r0, #12/* leave 3 words for abort-stack */clear_bss:ldrr0, _bss_start/* find start of bss segment */ldrr1, _bss_end/* stop here */movr2, #0x00000000/* clear */clbss_l:strr2, [r0]/* clear loop... */addr0, r0, #4cmpr0, r1bleclbss_lldrpc, _start_armboot_start_armboot:.word start_armboot
有关闭看门狗,屏蔽中断,设置FCLK:HCLK:PCLK,重定位代码,最后跳转到start_armboot中去执行。
0 0
- u-boot 学习记录 (三) 源码分析(start.S)
- s3c2410 u-boot源码分析start.S
- s3c2410 u-boot源码分析start.S
- s3c2410 u-boot start.s源码分析
- U-boot源码分析之start.s
- s3c2410 u-boot源码分析start.S
- s3c2410 u-boot源码分析start.S
- s3c2410 u-boot源码分析start.S
- s3c2410 u-boot源码分析start.S
- u-boot源码之start.S分析
- U-BOOT源码中start.S分析
- U-BOOT start.S分析
- u-boot分析--start.s
- u-boot start.s 分析
- U-BOOT start.S分析
- u-boot源码分析第一阶段之Start.S
- u-boot学习(三):u-boot源码分析
- 认识u-boot七、U-boot源码start.S详细分析
- 【扣丁学堂】初级程序员更需要提高自己
- Single Number
- Hadoop2.2内存调优
- 广发多空杠杆浮动杠杆率计算
- 手动导入mysql
- u-boot 学习记录 (三) 源码分析(start.S)
- Intersection of Two Linked Lists
- EJB 的事物超时的处理
- Matlab矩阵函数
- 【姿态估计】外参Pose estimation algorithm 之 Robust Planar Pose (RPP)algorithm
- 读《认知与设计:理解UI设计准则》第四章
- 头疼,微信浏览器的控制
- NSDictionary使用小结
- 从 NSURLConnection 到 NSURLSession