《linux是這樣“被”移植的》新書試讀之U-Boot啓動代碼分析

華清遠見非著名講師  O(_)O  牛牛猛

點擊鏈接加我好友!

http://student.csdn.net/invite.php?u=111047&c=758a60d66d3a92d1

歡迎大家去我CSDN博客上踩踩

http://blog.csdn.net/mistyeyed

 

 

 

 

 

 

 

 前幾天寫了關於CE的驅動分析,好像難了點,今天發個稍微簡單的點的,就是傳說中嵌入式Linux中常用的U-boot啓動代碼分析,這是我平時我講課時的講義,將要整理成書,這裏先和大家分享一下,也許您的意見會體現在我的新書裏哦!

分析cpu/arm920t/start.s文件

 

打開cpu/arm920t/start.s文件

 

s3c2440復位之後,pc指針會指向0x0地址。在u-boot代碼中,該0x0地址是一個向量表,第一條指令跳轉branch到復位代碼start_code 位於cpu/arm920t/start.S彙編語言文件最開始的地方:

 

 

.globl     _start  /*定義一個全局變量,_start,也就是程序的入口點*/

_start:  b    start_code  /*程序入口點是一條跳轉指令,跳轉到start_code 入口執行*/

 

 

 

 

 

 

 

/*定義中斷向量表*/

           ldr pc, _undefined_instruction

           ldr pc, _software_interrupt

           ldr pc, _prefetch_abort

           ldr pc, _data_abort

           ldr pc, _not_used

           ldr pc, _irq

           ldr pc, _fiq

 

按照上面定義的異常模式,當發生異常時,執行cpu/arm920t/interrupts.c中定義的中斷處理函數。

 

復位指令跳轉之後標號爲start_code處開始執行,開始執行arm920t處理器的基本初始化。首先修改當前程序狀態寄存器CPSR,使處理器進入Supervisor|32 bit ARM模式,

並關閉ARM9TDMI中斷和快速中斷,這是通過設置CPSR相應掩碼實現的:

 

start_code:     /*      * set the cpu to SVC32 mode      */

      mrs r0,cpsr

         bic r0,r0,#0x1f

         orr r0,r0,#0xd3

         msr cpsr,r0 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

緊接着,將S3C2410特有的WTCON寄存器清零,此舉僅爲關閉看門狗,因爲系統啓動時一般不需要看門狗的支持。

 

  ldr r0, =pWTCON

 mov r1, #0x0

 str r1, [r0]

 

然後將S3C2410中斷控制器INTMSK寄存器置爲全1INTSUBMSK置爲0x7ff,禁止全部中斷源。S3C2410手冊中對此有詳細描述:

mov r1, #0xffffffff

       ldr r0, =INTMSK

       str r1, [r0]

 

       # if defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) || defined(CONFIG_S3C2442) || /    defined(CONFIG_S3C2443)

 

       ldr r1, =INTSUBMSK_val

       ldr r0, =INTSUBMSK

       str r1, [r0]

       # endif

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

接下來,訪問arm920t控制寄存器CP15,並置位最高兩位[31,30]。此兩位置爲0b11後,處理器時鐘被設置爲異步模式,允許處理器異步訪問總線:

 

 

 

   mrc p15, 0, r1, c1, c0, 0

       orr r1, r1, #0xc0000000

       mcr p15, 0, r1, c1, c0, 0

 

 

 

 至此arm920t相關的配置完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章