本人想寫一個簡單的Bootloader,以前在2410上寫過一個。因此現在想在6410上也寫一個,方便理解啟動過程。但是發現剛一起步就遇到了困惑。
以前玩ARM7、ARM9、PowerPC板子時,都有燒寫器或下載器可以將一段彙編代碼放到nor flash中運行。
但現在發現目前市面上很多6410的開發板不太容易這麼做,很多都是沒有nor flash,要通過u-boot將程式下載到Nand flash中,然後利用u-boot命令來運行nand flash裡面的組譯工具。
既然是裸機程式,那麼就不想板子上同時有其他程式在運行。
這給獨立寫一個Bootloader並放到nand flash上運行程式帶來了不便。
本人買了一塊飛淩科技的OK6410開發板,準備在上面完成這個Bootloader的工作。
第一件事情就是如何將一個裸機程式單獨的在板子上運行。從網上找了很多資料,這篇文章http://bbs.witech.com.cn/thread-6921-1-3.html 介紹了具體方法。
我是用的是方法一:使用WinHex_14.0_SR-1_SC.exe來作為輔助軟體。使程式燒寫到SD卡中,從SD卡中啟動裸奔程式。
也就是說板子啟動從SD卡啟動,這樣也算是真正的裸機程式了。實驗成功。
我是用的代碼如下,可以控制OK6410的LED燈。
把以下代碼編譯後。放到SD卡中,然後用SD卡啟動。
(從網上找的參考代碼,以後有時間再分析吧):
AREA Test, CODE, READONLY ; name this block of code ENTRY ; mark first instruction ; to executestart B reset reset B main NOP main ldr r0,=0x7f008820 ldr r1,=0x1111 str r1,[r0] ldr r0,=0x7f008824 ldr r1,[r0] ldr r2,=0x1 mov r3,#0 ; bic r2,r1,#3 ; orr r2,r2,#0xc ; bic r3,r1,#0xc ; orr r3,r3,#3 nn lsl r2,#1 add r3,r3,#1 cmp r3,#4 moveq r2,#1 moveq r3,#0 str r2,[r0] ldr r4,=5000000 delay1 sub r4,r4,#1 cmp r4,#0 bne delay1 ; str r3,[r0] ; ldr r4,=5000000 ;delay2 ; sub r4,r4,#1 ; cmp r4,#0 ; bne delay2 b nn END
作者:滄海獵人 出處:http://blog.csdn.net/embedded_hunter 轉載請註明出處 嵌入式技術交流QQ群:179012822