国产肉体XXXX裸体137大胆,国产成人久久精品流白浆,国产乱子伦视频在线观看,无码中文字幕免费一区二区三区 国产成人手机在线-午夜国产精品无套-swag国产精品-国产毛片久久国产

新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于AM335x的U-Boot/SPL 的CCS 調(diào)試

基于AM335x的U-Boot/SPL 的CCS 調(diào)試

作者: 時(shí)間:2016-09-12 來源:網(wǎng)絡(luò) 收藏
Load

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

B. 加載 symbol。

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

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

111

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

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

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

D. SPL的單步調(diào)試。

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

009

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

Debug

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

00

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

_start: b reset

reset:

bl save_boot_params

接下來,可以在C代碼中設(shè)置斷點(diǎn),進(jìn)行調(diào)試了。有兩點(diǎn)值得注意:

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

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

3.4 U-Boot的調(diào)試

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

A. 從的啟動(dòng)過程可知,U-Boot是運(yùn)行在DDR中的,而DDR是由SPL來初始化的,所以,加載U-Boot前,先加載并運(yùn)行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. 相對(duì) SPL 的調(diào)試, U-Boot有個(gè)地方不同,即有代碼的重載(code relocation), 重載后代碼的在SOC上的memory map和編譯出的memory map會(huì)有個(gè)偏移。這個(gè)過程是在函數(shù)relocate_code()中完成的。 relocate_code()函數(shù)是在board_init_f()中調(diào)用的,如果需要調(diào)試從調(diào)用該函數(shù)開始后面的代碼,則加上偏移重載symbol。

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

ADD

注意到上述幾點(diǎn),然后就可以按照SPL的調(diào)試過程對(duì)U-Boot進(jìn)行調(diào)試了。

4. 總結(jié)

關(guān)于用CCS+emulator對(duì)的U-Boot/SPL的調(diào)試就介紹完了。這里介紹的方法,包含了CCS+emulator調(diào)試的基本原則,不僅僅可以運(yùn)用于U-Boot/SPL調(diào)試,也可以運(yùn)用于Starterware,Kernel等調(diào)試。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: AM335x spl u-boot CCS

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉