色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于AM335x的U-Boot/SPL 的CCS 調試

          基于AM335x的U-Boot/SPL 的CCS 調試

          作者: 時間:2016-09-12 來源:網絡 收藏
          Load

          最后點擊Finish,SPL就會被load到片上RAM中了。如果在console窗口中有錯誤信息,需要把SPL image重新加載 一遍。

          B. 加載 symbol。

          在上一步里,只是加載了RAW image,還沒有加載調試所需要的帶有調試信息的symbol。

          可以通過Run -》 Load -》 LoadSymbols 加載symbol信息,界面如下:

          111

          這里選擇的是帶有symbol信息的U-Boot-.

          C. 設置Cortex-A8 core到ARM狀態(tài)。

          ARM core 啟動后,默認在Thumb(16bit)模式下,如前面所說,需要將其切換到ARM(32bit)下。具體做法是,View-》Registers, 展開CPSR寄存器,把T位設置為0。界面如下:

          D. SPL的單步調試。

          a. 從SPL編譯的memory map可知,SPL從0x402f0400開始執(zhí)行,所以首先就要把寄存器PC的值設為0x402f0400??梢酝ㄟ^ View-》Registers中設置PC指針的值即可, 界面如下,將紅色框里面的改為0x402f0400即可。

          009

          b. 點擊Debug窗口(view-》debug)上tool bar中的匯編單步按鈕,如下圖所示,就開始調試了。

          Debug

          這時,在反匯編窗口(view-》disassembly)中,如下圖所示,看到的是匯編代碼,而且在編輯窗口這邊看不到源碼。這是由于開始執(zhí)行的代碼在/arch/arm/cpu/armv7/start.s 中,反匯編和匯編一樣,所以沒有顯示源碼。

          00

          同時,可以看到PC指針運行到0x402f0458處。這里只是單步執(zhí)行了一條指令,為什么跳過了這么大塊地址?這里的單步運行,指令地址空間跳轉了n指令,而不是一條指令,這是因為0x402f0400處存放的是異常中斷向量表,通過默認啟動的入口跳到reset symbol對應的地址了,也就是在0x402f0400處跳轉到0x402f0458了,具體代碼(arch/arm/cpu/armv7 /start.S)如下:

          _start: b reset

          reset:

          bl save_boot_params

          接下來,可以在C代碼中設置斷點,進行調試了。有兩點值得注意:

          i. 如果編譯的時候,交叉編譯器的性能優(yōu)化選項是開著的,那么優(yōu)化后編譯生成的代碼,其執(zhí)行循序和C源碼有差別,這時設置斷點時,其實際的位置不會很準。所以,這里可以根據(jù)需要,決定是否關閉-O2選項。

          ii. 在中,把core停下來時,會根據(jù)image中調試信息所包含的源碼路徑,找到對應的源碼和symbol。由于U-Boot/SPL是在 Linux中編譯,所以其路徑都是Linux下的路徑,所以Linux版本的可以直接找到對應的源碼,而對于Windows版本的CCS不能直接找到,需要通過手動找到源碼,但是找到一個文件的源碼后,CCS會根據(jù)相對路徑找到其他文件。除了這點外,Linux和Windows的CCS配置使用是一樣的。

          3.4 U-Boot的調試

          總體來說, U-Boot的調試過程和SPL調試過程是類似的,這里主要說明不同的幾點:

          A. 從的啟動過程可知,U-Boot是運行在DDR中的,而DDR是由SPL來初始化的,所以,加載U-Boot前,先加載并運行SPL。

          B. 加載U-Boot 的image是 U-Boot。 這里U-Boot 是ELF格式的, 其包含了加載地址, symbol等信息,所以使用CCS 菜單 Run-》 Load-》 LoadProgram, 加載U-Boot 即可。加載成功后, 如下圖所示:

          U-Boot

          如圖所示, PC直接指到0x80100000地址了,也就是U-Boot的起始地址(入口)了,該地址是CCS從頭ELF頭里面得到的,其定義在CONFIG_SYS_TEXT_BASE(include/configs/am335x_evm.h)中。

          C. 相對 SPL 的調試, U-Boot有個地方不同,即有代碼的重載(code relocation), 重載后代碼的在SOC上的memory map和編譯出的memory map會有個偏移。這個過程是在函數(shù)relocate_code()中完成的。 relocate_code()函數(shù)是在board_init_f()中調用的,如果需要調試從調用該函數(shù)開始后面的代碼,則加上偏移重載symbol。

          在CCS的菜單, Run-》 Load -》 Add Symbols, 加載的image還是前面的U-Boot, data/code offset 都是0x9FF88000。 這里的offset是從gd-》relocaddr(arch/arm arch/arm/lib/board.c)得到的。設置界面如下:

          ADD

          注意到上述幾點,然后就可以按照SPL的調試過程對U-Boot進行調試了。

          4. 總結

          關于用CCS+emulator對的U-Boot/SPL的調試就介紹完了。這里介紹的方法,包含了CCS+emulator調試的基本原則,不僅僅可以運用于U-Boot/SPL調試,也可以運用于Starterware,Kernel等調試。


          上一頁 1 2 3 下一頁

          關鍵詞: AM335x spl u-boot CCS

          評論


          相關推薦

          技術專區(qū)

          關閉