;-----------------------------------------------
;         MMU Enabled and Virtual Address is Valid from here
;-----------------------------------------------

VirtualStart

;--------------------------------------------------
;         Initialize Stack
;         Stack size and location information is in "p_w_picpath_cfg.inc"
;--------------------------------------------------

                mrs                    r0, cpsr

                bic                    r0, r0, #Mode_MASK
                orr                    r1, r0, #Mode_IRQ | NOINT
                msr                    cpsr_cxsf, r1                                        ; IRQMode
                ldr                    sp, =IRQStack_VA                             ; IRQStack
    跳转到 VirtualStart 标号处后,先初始化堆栈。第一条语句 mrs 获取 CPSR 状态寄存器的值,并存储到 R0 中。 Mode_MASK Mode_IRQ NOINT 都在文件 PLATFORM\COMMON\SRC\SOC\S3C6410_SEC_V1\OAL\INC\s3c6410.inc 中定义。第二条语句用来清空表示处理器模式的低 5 位,第三条语句设置处理器模式为 IRQ 模式,同时禁止 IRQ FRQ 中断。第四条语句执行前面的设置。 IRQStack_VA 在文件 p_w_picpath_cfg.inc 中定义,第五条语句将 IRQ 堆栈的虚拟地址保存在 SP
                bic                    r0, r0, #Mode_MASK | NOINT
                orr                    r1, r0, #Mode_SVC
                msr                    cpsr_cxsf, r1                                        ; SVCMode
                ldr                    sp, =SVCStack_VA                             ; SVCStack
    第一条语句,清除模式位,同时使能 IRQ FRQ 中断,第二条语句设置处理器模式为特权模式,第三条语句执行前面的设置,最后一条语句保存特权模式下堆栈虚拟地址到 SP
;------------------------------------
;         Jump to Main() "C" Routine
;------------------------------------

                b                    main
                b                    .                    ; Should no be here...

        ENTRY_END

;------------------------------------------------------------------------------
;         End of StartUp
;------------------------------------------------------------------------------
    到这里基本上StartUP段代码就基本结束,最后一步用来跳转到C语言写的main函数处,“b  .“表示不断本地跳转,相当于while1),最后ENTRY_END呼应开始的LEAF_ENTRY宏,表明StartUP代码段的结束。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

         好了,终于写完了,在 startup.s 文件中还包含了启动内核的 Launch 函数,这部分也是汇编书写的,但逻辑上属于 main 函数里面的,所以这里不做分析,到 main 函数中进行分析。