新闻  |   论坛  |   博客  |   在线研讨会
armlinux演艺---第二回
tongxin | 2009-04-13 17:48:30    阅读:916   发布文章

上回书说到flashloader把bootloader load到0x0AFE0100, 然回跳了过去,
%A 其实0x0AFE0100 就是烧在flash 0x0C000100中的真正的bootloader:
%A
%A bootloader 有几个文件组成,先是START.s,也是唯一的一个汇编程序,其余的都是C写成的,START.s主要初始化堆栈:
%A
%A _start:
%A ldr r1,=StackInit
%A ldr sp,[r1]
%A b main
%A //此处我们跳到了C代码的main函数,当C代码执行完后,还要调用
%A //下面的JumpToKernel0x跳到LINXU kernel运行
%A
%A .equ StackInitValue, __end_data+0x1000 // 4K __end_data在连结脚本中指定
%A
%A StackInit:
%A .long StackInitValue
%A
%A .global JumpToKernel
%A
%A JumpToKernel:
%A // jump to the copy code (get the arguments right)
%A mov pc, r0
%A
%A .global JumpToKernel0x
%A // r0 = jump address
%A // r1-r4 = arguments to use (these get shifted)
%A JumpToKernel0x:
%A // jump to the copy code (get the arguments right)
%A mov r8, r0
%A mov r0, r1
%A mov r1, r2
%A mov r2, r3
%A mov r3, r4
%A mov pc, r8
%A .section ".data.boot"
%A .section ".bss.boot"
%A
%A 欲知bootloader中的c代码如何运行,请看下集
%A%A
%A

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
寂寞如雪
2009-05-19 19:01:18
夜色花
2009-05-19 18:56:22
没有爱可以重来
2009-05-19 18:54:59
推荐文章
最近访客