bootloader第一天
来源:互联网 发布:淘宝代购被投诉 编辑:程序博客网 时间:2024/06/16 01:40
bootloader
目标:启动内核(内核又在那里 ?flash上)
1.从flash上把内核读入到内存(a能读flash b.能初始化内存,如关闭看门狗、时钟等。。)
2 启动(1设置参数2跳转执行)
最简单的bootloader编写步骤
1. 初始化硬件 如:关闭看门狗 、设置时钟 、设置SDRAM FLASH
2. 把内核从NAND FLASH 读到SDRAM(如果bootloader比较大则要重定位到SDRAM)
3. 设置“要传递的参数”
4. 跳转执行内核
start.s
/*1.关闭看门狗*/
/*2.设置时钟*/
/*3.初始化SDRAM*/
/*4.重定位*/
/*5.执行main*/
.test
.global _start
_start
/*1.关闭看门狗*/
ldr r0 ,=0x53000000 |
mov r1,#0|==>>r0 = 0
str r1 ,[r0] |
/*2.设置时钟*/
/*3.初始化SDRAM*/
//用c先设置栈
ldr r0 , MEM_CTL_BASE
adr r1 , sdram_config//得到当前的sdram_config
add r3, r0, #(13*4)
1:ldr r2 ,[r1] , #4//从r1所指的地方取一个值给r2,然后让r1+4
str r2 , [r0], #4//把r2的值存到r0的地方,让r0+4
cmp r0,r3
bne1b//比较r0 r3的值不相等跳回去
/*4.重定位*/::把bootloader本身的代码从flash复制到他的链接地址去
ldr sp ,= 0x34000000//设置栈:sp指向一块内存64M基地址是0x340000
b1 copy_code_to_sdram
/*5.执行main*/
ldr 1r , =halt
ldr pc, =main
halt:如果main有返回值则死循环
b halt
}
- bootloader第一天
- 第一天
- 第一天
- 第一天~
- 第一天
- 第一天
- 第一天
- 第一天
- 第一天
- #第一天
- 第一天
- 第一天
- 第一天
- 第一天
- 第一天
- 第一天
- 第一天
- 第一天
- autotools useful example
- 查找和排序
- 约瑟夫问题:有n个人围成一圈,顺序报数(1~3),报到3退出
- 我的NBA之韦德
- 在学习LINUX API的时候发现的好博客
- bootloader第一天
- 异常类型 && spring事务回滚
- QCustomPlot的基本使用
- 【Cocos2d-x 游戏开发】 1 --- Hello World
- Objective-C 中便利初始化方法和指定初始化方法
- Tiny4412开发板Mplayer 移植
- leetcode-21 Merge Two Sorted Lists
- POP3、SMTP和IMAP之间的区别和联系?
- 20150625_OC之XML格式解析