在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

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

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

            B. 加載 symbol。

            在上一步里,只是加載了RAW image,還沒有加載調(diào)試所需要的帶有調(diào)試信息的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的單步調(diào)試。

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

            009

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

            Debug

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

            00

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

            _start: b reset

            reset:

            bl save_boot_params

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

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

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

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

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

            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 的調(diào)試, U-Boot有個地方不同,即有代碼的重載(code relocation), 重載后代碼的在SOC上的memory map和編譯出的memory map會有個偏移。這個過程是在函數(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)得到的。設置界面如下:

            ADD

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

            4. 總結(jié)

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


            上一頁 1 2 3 下一頁

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

            評論


            相關(guān)推薦

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

            關(guān)閉