從0移植uboot (四) _點亮調試LED


這一節主要討論1個問題:點燈。點燈是實際開發中,特別是裸板開發中常見的調試手段,相當於主機開發中漫天飛舞的printf/printk。為了追蹤程序的現場執行情況,很多時候我們都使用點一個燈的方法來進行初步的判斷。如果你把剛才編譯的程序燒錄到SoC,你又怎么知道這個Uboot有沒有工作呢?所以,我們在這里就要完成這樣一個程序的改造。
雖說只是點一個燈, 但麻雀雖小五臟俱全, 也算是對uboot源碼進行修改, 我總結了一點改造uboot的流程, 這一篇就按下面的改造流程來組織:

  1. 找運行邏輯,即插入代碼的位置。
  2. 根據運行邏輯編寫功能代碼。
  3. 找配置邏輯,即修改哪些文件使配置生效。
  4. 根據配置邏輯修改配置使功能代碼生效。
  5. 重新編譯燒寫uboot。

1. 找運行邏輯

我們希望板子在uboot的運行的時候就點燈示意, 所以應該在啟動過程中盡可能考前的位置編寫點燈代碼, 根據上一篇對啟動流程的敘述, 顯然我們需要修改的文件就是"arch/arm/cpu/armv7/start.S ", 我們在啟動代碼之后添加我們的代碼, 即"134行"

2. 編寫功能代碼

根據我的電路板。我的LED最終接在了GPF3_5接口,所以我配置相應的寄存器,點亮一個燈,並將這部分代碼添加到"arch/arm/cpu/armv7/start.S +134"

135         msr     cpsr,r0
136     
137 #if 1
138         ldr r0, =0x114001E0             @load GPF3CON address to register
139         ldr r1, [r0]                    @load data in GPF3_5CON 
140         bic r1, r1,#0xff0000            @output 0x110000
141         orr r1, r1,#0x110000
142         str r1, [r0]
143 
144         ldr r0, =0x114001E4             @load GPF3_5DAT address to register
145         mov r1, #0x20                   @10 0000
146         str r1, [r0]
147 #endif
148 /*

3. 找配置邏輯。

這段代碼不需要額外的配置即可工作

4. 修改配置

5. 重新編譯燒寫

改寫完程序,重新編譯uboot(強烈建議寫腳本,我這里就不貼了),如果沒有問題,我們的燈就可以亮了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM