armlinux演艺---第二回
上回书说到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
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。