板極調試,啓動加載和工具掃盲

掃自己的盲,給別人看。  依然源自《主流ARM嵌入式系統設計技術與實例精解》

 

*******************************************************************************
關於開發工具和調試
*******************************************************************************
關於硬件調試
    工具箱:萬用表,示波器,電烙鐵等
    調試方法,注意模塊化
        1) 一般從電源供電部分開始,最好單獨調試這一塊,比如有可能的話切斷對後
    端負載的供電,保證各路供電電壓正常,然後用示波器測試各路供電電壓的紋
    波,一般在50mV以內都算正常。
    2) 然後接上負載,測量各處晶振的工作情況。無源晶振一般波形近於正弦波,
    有源晶振多近於方波。
    3) 調試最小系統,確保JTAG部分的連接正確,測量Flash和SDRAM上的時鐘信號,
    執行Reset操作測量CPU的Reset信號。如果工作正確,使用適當軟件可以燒寫Boot
    Loader了。Boot Loader啓動以後就可以通過某個特定外設來燒寫文件系統和內
    核了。
    4) 根據具體應用對各外圍子系統分別進行調試。
    5) 整體調試
    這是學究式的教條式做法,具體實踐中可以靈活變通,實用爲王。

工具箱
    開發板(通常必須)
    硬件仿真器(可選)
    下載調試工具(JTAG)(必須)
    開發編譯環境(必須)
        編譯器arm-linux-gcc
    彙編器arm-linux-as
    鏈接器arm-linux-ld
    庫管理arm-linux-ar
    版本管理 CVS, SVN, GIT等

LDS鏈接腳本,Makefile等(略)


*******************************************************************************
關於啓動
*******************************************************************************
Boot過程,一般包括
    大小端配置,ARM一般默認爲小端格式,但是可以配置爲大端格式。一般在上電時確定
    外圍內存接口配置,通常對Flash的初始化代碼一般都位於bootloader裏
    啓動模式選擇,一般是通過硬件連線來確定的,比如從哪個位置以16位還是32位啓動
    內存地址重映射,主要是由於異常向量入口需要重映射。
關於內存重映射
    CPU設計人員爲了簡化芯片設計,一般將所有異常入口集中放置在非易失性存儲器中,
    並在系統上電時將其映射到一個固定的連續地址空間上。由於讀取非易失性存儲器的
    速度限制以及可能的位寬不匹配問題引入的性能問題,所以引入了重映射技術。就是
    對已經確立的存儲器映射再次修改,即重新分配地址資源。MAP發生在系統上電的時
    候,REMAP則在系統上電穩定後發生,並且REMAP並不是必須的。
    REMAP一般開始於系統的Boot Loader,一般是Boot Loader將非易失性存儲器中的異常
    向量複製到主存中,然後執行REMAP命令,將位於主存的異常向量塊映射到以稱向量表
    地址空間上。這樣以後系統產生的異常處理將從主存中開始執行。


*******************************************************************************
關於Boot Loader
*******************************************************************************
一般基於ARM處理器的Linux嵌入式開發,基本都是硬件板卡設計和軟件系統設計同步進行。
硬件準備好之後,首先要將Boot Loader,內核,文件系統等移植到硬件系統上。最先一步
就是要移植Boot Loader先啓動系統。

Boot Loader的主要工作:初始化板上硬件,收集硬件資源信息以提供給操作系統,引導、
加載操作系統。

常用Boot Loader,可以參見wikipedia上關於它的介紹,要選擇適用於嵌入式系統的。
http://en.wikipedia.org/wiki/Comparison_of_boot_loaders
這裏只介紹U-Boot,目前該項目位於:
http://www.denx.de/wiki/U-Boot/

關於U-Boot
Universal Boot Loader,歷史淵源可以去看它的網站上的介紹。最大特點在於對衆多處理
器架構的支持。
U-Boot提供兩種模式,啓動加載模式(boot loading)和下載模式(downloading)。
U-Boot提供了大量功能,包括以太網支持,BOOTP/TFTP,在線讀寫FLASH等外設,串口支
持,識別多種二進制格式(ELF32,pImage等),腳本支持,監控等。

U-Boot常用命令
    1) 打印環境變量, printenv
    2) 設置環境變量, setenv
    3) 保存環境變量, saveenv
    4) 通過串口下載, loadb
    5) tftp網絡下載,一般要先設置網絡環境,然後通過網絡下載映像文件到特定位置
            U-boot> setenv ethaddr xx:xx:xx:xx:xx:xx
        U-boot> setenv ipaddr xx.xx.xx.xx
        U-boot> setenv serverip xx.xx.xx.xx (tftp server address)
        U-boot> tftp xxxxxxxx kernel.bin
    6) 內存操作命令:md, mm, nm, mw, cp, cmp, mtest
    7) 閃存操作命令:protect, erase, flinfo
    8) 文件系統命令:fatls, fatload, nfs
    9) 腳本: run, bootcmd
    a) CPU控制命令:go, bootm, bootp, kgo
    b) 其他命令:usb, help, ?, ping

一般Boot loader的工作流程
    1) 系統復位
    2) 從復位向量地址開始執行,通常是某cpu下面的Start.S彙編代碼。這裏完成定義
    異常向量表(需要關中斷),初始化SDRAM,配置CPU模式,初始化工作時鐘等
    3) 把啓動代碼複製到RAM中,然後進行地址重映射,然後開始執行啓動例程(一般用
    C編寫),這裏初始化各種將要用到板上外設。

移植U-Boot主要是針對特定板子的移植,包括閃存、內存配置,串口配置等。如果有需要
在boot階段需要啓動的特殊硬件模塊,那麼需要自行添加對應的驅動支持。具體來說一般
需要移植如下幾塊:
    CPU初始化部分,包括工作頻率,時鐘模塊,大小端配置,Cache初始化
    內存(SDRAM和FLASH)初始化,對應的接口寄存器設置各個參數,Flash初始化
    常用必備外設接口初始化:串口、網卡接口、GPIO接口等
    啓動參數修改
    鏈接編譯的地址分配,主要在.lds文件中
    編譯參數的修改,主要修改Makefile文件

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