移植uboot之修改代码支持NorFlash记录续集二
先說一個事:我會在最后把移植好的uboot,內核,分別做一個補丁文件,以后如果用到相同的uboot以及內核都可以直接下載我這個補丁進行打補丁操作就可以直接用~
上一個移植uboot續集,我們解決了無法寫flash的問題,現在該去測試norflash寫功能的完整性!
在串口中依次輸入:
md.b 30000000
md.b 80000
mw.b 30000000 12345678
erase 80000 8ffff
cp.b 30000000 80000 10000
md.b 80000
md.b 30000000
cmp.b 30000000 80000 10000 (比較內容是否一樣)顯示如下:
內存和flash里的內容不一樣,這是怎么回事呢?再試驗一下把內存另一個地址的內容拷貝到flash(80000~90000地址之間)中:
erase 80000 8ffff
cp.b 32000000 80000 10000
cmp.b 32000000 80000 10000 顯示如下:
很奇怪,這里又顯示兩個地方的內容是一樣的!!!
經過分析內存的分布以及啟動的流程,發現是在uboot啟動過程調用第二階段代碼沒有重新設置棧(具體過程就不分析,需要了解uboot的啟動流程,以后講解),下面直接給出解決辦法:
在start.s中需要重新設置棧:
在調用第二階段代碼之前重新設置棧,加上這一句:ldr sp, base_sp /* 重新設置棧lyy */如下:
在上面與下面代碼類似的地方加上下面的代碼:
/*lyy*/.globl base_sp base_sp:.long 0在board.c中的board_init_f函數里最后加上:
base_sp = addr_sp; /*lyy*/在board_init_f函數里最前面加上
extern ulong base_sp; /*lyy*/然后重新燒寫編譯啟動測試:
成功了,完美!!!
哈哈哈!!!終于搞定了這個BUG。開心~
想獲得各種學習資源以及交流學習的加我:
qq:1126137994
微信:liu1126137994
可以共同交流關于嵌入式,操作系統,C++語言,C語言,數據結構等技術問題
總結
以上是生活随笔為你收集整理的移植uboot之修改代码支持NorFlash记录续集二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据相加(转载)
- 下一篇: C++ 类中特殊的成员变量(常变量、引用