使用AXD調試S3C6410 u-boot .

    

S3C6410開發時使用:前端軟件(ADS)+仿真器(JLink)的方式。

JLink與前端軟件(AXD)相連時,需要使用調試代理,所有PC機需要安裝Jlink驅動。

S3C6410的前端軟件採用ADS,ADS中含有AXD調試工具。

調試方法:

1、JLink V8連接S3C6410之後,一開始出現不能識別的core,等待一會兒之後,能識別到ARM11。

爲什麼能用Jlink調試CPU,這是CPU內部集成的調試接口所具有的特性,這樣用戶只要使用簡單的仿真器,就能實現對CPU的調試,爲用戶節省了很多的經費。JLink調試CPU時,與前端軟件AXD相連時,需要調試代理,這個需要了解,雖然這個不需要開發人員自己設計,由JLink驅動幫助你完成好了。

2、用AXD調試CPU時,需要對CPU進行初始化,具體初始化的工作包括:關看門狗、初始化中斷、初始化Flash、初始化SDRAM等。經過這些操作之後,AXD才能加載程序到內存,才能正常對CPU調試。

3、爲了簡化操作,我們可以使用S3C6410的Nand中的u-boot來實現對CPU的初始化,具體使用方法:開發板的撥碼開關開到非S2的一側,打開JLink GDB軟件,給S3C6410上電,在串口阻止系統啓動Linux,只停留在uboot階段,打開AXD,打開File->Load Image,加載裸驅的.axf文件,設置斷點在main函數處,開始運行。

4、其實用uboot完成初始化只是爲了省事,專業的用AXD調試uboot方法如下:

一、打開JLink GDB等待,直到識別到ARM11;

二、打開AXD,打開System Views->Command Line Interface窗口,在Debug命令窗口輸入如下命令:

Debug->ob c:/init.txt

Debug->lb c:/u-boot.bin 0x50001000

Debug->setpc 0x50001000

Debug->run

其中init.txt內容如下,需去除註釋:

fillmem 0x7e004000  0x7e004000  0x00000000 32 /*關看門狗*/

fillmem 0x71200014  0x71200014  0x00000000 32 /*若以前設置了阻止某個中斷,現在全部清除*/
fillmem 0x71300014  0x71300014  0x00000000 32 /**/
fillmem 0x7120000C  0x7120000C  0x00000000 32 /*選擇所有的中斷爲IRQ中斷*/
fillmem 0x7130000C  0x7130000C  0x00000000 32
fillmem 0x71200F00  0x71200F00  0x00000000 32 /*該寄存器包含當前中斷服務程序的地址ISR,默認爲0。讀取該寄存器返回一個ISR並設置當前中斷已經被服務了,讀取必須在有真的中斷來臨的時候才能讀取。寫該寄存器會清除當前中斷,所以寫該寄存器必須在中斷服務例程結束時才能寫。*/
fillmem 0x71300F00  0x71300F00  0x00000000 32

fillmem 0x7e00f900  0x7e00f900  0x0000801e 32 /*others control register設置爲默認值*/
fillmem 0x7e00f000  0x7e00f000  0x0000ffff 32
fillmem 0x7e00f004  0x7e00f004  0x0000ffff 32 /*MPLL設置爲要求週期產生靜態時鐘輸出*/
fillmem 0x7e00f020  0x7e00f020  0x01043310 32 /*選擇時鐘分頻值CLK_DIV0CLK_DIV0控制系統時鐘和多媒體IPs的特殊時鐘*/
fillmem 0x7e00f00C  0x7e00f00C  0xc2150601 32 /*控制APLL輸出頻率*/
fillmem 0x7e00f010  0x7e00f010  0xc2150601 32 /*控制MPLL輸出頻率*/
fillmem 0x7e00f024  0x7e00f024  0x00000003 32 /*選擇時鐘分頻值CLK_DIV0*/
fillmem 0x7e00f014  0x7e00f014  0x00200102 32 /*控制EPLL輸出頻率*/
fillmem 0x7e00f018  0x7e00f018  0x00000000 32 /*控制EPLL輸出頻率*/
fillmem 0x7e00f01C  0x7e00f01C  0x14000007 32 /*選擇時鐘源*/

fillmem 0x7e00f120  0x7e00f120  0x00000008 32 /*NAND系統配置寄存器*/

fillmem 0x7e001004  0x7e001004  0x00000004 32 /*32bit DRAM:命令爲配置*/
fillmem 0x7e001010  0x7e001010  0x0000040f 32 /*32bit DRAM:刷新週期reg*/
fillmem 0x7e001014  0x7e001014  0x00000006 32 /*32bit DRAM:CAS延時reg*/
fillmem 0x7e001018  0x7e001018  0x00000001 32 /*32bit DRAM:t_DQSS*/
fillmem 0x7e00101c  0x7e00101c  0x00000002 32 /*32bit DRAM:t_MRD*/
fillmem 0x7e001020  0x7e001020  0x00000006 32 /*32bit DRAM:t_RAS*/
fillmem 0x7e001024  0x7e001024  0x0000000a 32 /*32bit DRAM:t_RC*/
fillmem 0x7e001028  0x7e001028  0x0000000c 32 /*32bit DRAM:t_RCD*/
fillmem 0x7e00102c  0x7e00102c  0x0000018f 32 /*32bit DRAM:t_RFC*/
fillmem 0x7e001030  0x7e001030  0x0000000c 32 /*32bit DRAM:t_RP*/
fillmem 0x7e001034  0x7e001034  0x00000002 32 /*32bit DRAM:t_RRD*/
fillmem 0x7e001038  0x7e001038  0x00000002 32 /*32bit DRAM:t_WR*/
fillmem 0x7e00103c  0x7e00103c  0x00000002 32 /*32bit DRAM:t_WTR*/
fillmem 0x7e001040  0x7e001040  0x00000002 32 /*32bit DRAM:t_XP*/
fillmem 0x7e001044  0x7e001044  0x00000013 32 /*32bit DRAM:t_XSR*/
fillmem 0x7e001048  0x7e001048  0x00000013 32 /*32bit DRAM:t_ESR*/
fillmem 0x7e00100C  0x7e00100C  0x0001001a 32 /*內存配置reg*/
fillmem 0x7e00104C  0x7e00104C  0x00000b45 32 /*DRAM控制口配置*/
fillmem 0x7e001200  0x7e001200  0x000150f0 32 /*chip-<n>-cfg reg*/
fillmem 0x7e001304  0x7e001304  0x00000000 32 /*user_cfg reg*/

fillmem 0x7e001008  0x7e001008  0x000c0000 32 /*direct command reg*/
fillmem 0x7e001008  0x7e001008  0x00000000 32
fillmem 0x7e001008  0x7e001008  0x00040000 32
fillmem 0x7e001008  0x7e001008  0x00040000 32
fillmem 0x7e001008  0x7e001008  0x000a0000 32
fillmem 0x7e001008  0x7e001008  0x00080032 32
fillmem 0x7e001004  0x7e001004  0x00000000 32

 

去除註釋之後的文件如下: 

fillmem 0x7e004000  0x7e004000  0x00000000 32

 

fillmem 0x71200014  0x71200014  0x00000000 32
fillmem 0x71300014  0x71300014  0x00000000 32
fillmem 0x7120000C  0x7120000C  0x00000000 32
fillmem 0x7130000C  0x7130000C  0x00000000 32
fillmem 0x71200F00  0x71200F00  0x00000000 32
fillmem 0x71300F00  0x71300F00  0x00000000 32

 

fillmem 0x7e00f900  0x7e00f900  0x0000801e 32
fillmem 0x7e00f000  0x7e00f000  0x0000ffff 32
fillmem 0x7e00f004  0x7e00f004  0x0000ffff 32
fillmem 0x7e00f020  0x7e00f020  0x01043310 32
fillmem 0x7e00f00C  0x7e00f00C  0xc2150601 32
fillmem 0x7e00f010  0x7e00f010  0xc2150601 32
fillmem 0x7e00f024  0x7e00f024  0x00000003 32
fillmem 0x7e00f014  0x7e00f014  0x00200102 32
fillmem 0x7e00f018  0x7e00f018  0x00000000 32
fillmem 0x7e00f01C  0x7e00f01C  0x14000007 32

 

fillmem 0x7e00f120  0x7e00f120  0x00000008 32

 

fillmem 0x7e001004  0x7e001004  0x00000004 32
fillmem 0x7e001010  0x7e001010  0x0000040f 32
fillmem 0x7e001014  0x7e001014  0x00000006 32
fillmem 0x7e001018  0x7e001018  0x00000001 32
fillmem 0x7e00101c  0x7e00101c  0x00000002 32
fillmem 0x7e001020  0x7e001020  0x00000006 32
fillmem 0x7e001024  0x7e001024  0x0000000a 32
fillmem 0x7e001028  0x7e001028  0x0000000c 32
fillmem 0x7e00102c  0x7e00102c  0x0000018f 32
fillmem 0x7e001030  0x7e001030  0x0000000c 32
fillmem 0x7e001034  0x7e001034  0x00000002 32
fillmem 0x7e001038  0x7e001038  0x00000002 32
fillmem 0x7e00103c  0x7e00103c  0x00000002 32
fillmem 0x7e001040  0x7e001040  0x00000002 32
fillmem 0x7e001044  0x7e001044  0x00000013 32
fillmem 0x7e001048  0x7e001048  0x00000013 32
fillmem 0x7e00100C  0x7e00100C  0x0001001a 32
fillmem 0x7e00104C  0x7e00104C  0x00000b45 32
fillmem 0x7e001200  0x7e001200  0x000150f0 32
fillmem 0x7e001304  0x7e001304  0x00000000 32

 

fillmem 0x7e001008  0x7e001008  0x000c0000 32
fillmem 0x7e001008  0x7e001008  0x00000000 32
fillmem 0x7e001008  0x7e001008  0x00040000 32
fillmem 0x7e001008  0x7e001008  0x00040000 32
fillmem 0x7e001008  0x7e001008  0x000a0000 32
fillmem 0x7e001008  0x7e001008  0x00080032 32
fillmem 0x7e001004  0x7e001004  0x00000000 32

 

 

5、AXD命令使用方法如下

打開AXD,按下 Alt + L ;或者點System Views下Command Line Interface,就可以打開一個命令行:

輸入help查看幫助文件。

比較有用的命令如:
loadbinary : 將一個文件導入RAM  ,簡寫爲lb
loadsymbols : 導入符號表               
setpc : 設置PC指針                      
run : 開始運行
ob + 文件名 : 按照批處理文件運行

批處理文件所有的命令在GUI裏面也是有的,可以利用批處理文件(ob命令)來免去敲命令和點菜單的麻煩,以調試u-boot爲例,寫一個批處理文件放在c盤,文件名爲init.txt,內容如下:

ob c:/init.txt

lb c:/u-boot.bin 0x50001000

setpc 0x50001000

run

axf文件的獲取:
在linux下編譯u-boot後,有一個u-boot文件,把它改名爲u-boot.axf即可!

loadbinary簡寫lb,只能將二進制文件加載到ram中,不能將地址指定到flash中

在loadsymbols之後,等待進度條顯示加載完成,將setpc (pc)指到u-boot.bin的加載位置,即可單步調試。

這時ads會提示尋找u-boot的入口文件start.s地址,此時需要手動指定start.s的位置,通常這時可以在linux下建立smaba服務共享,將整個u-boot的文件夾映射成windows下一個盤符,這樣就可以指定目錄地址了。

在進入c語言代碼中後,ads還可能出現提示指定board.c、string.c等其他文件的地址,這都需要手動做。

此後就可以用ads進行c語言級的u-boot源碼調試了!

 

 

用ADS 1.2的AXD Debugger調試在Linux下面編譯出來的Uboot

給板子上電,如果Nand Flash裏面沒有程序,那麼板子沒跑起來,真是我們要的。如果Flash裏面有uboot,uImage,rootfs,而板子已經運行了。那麼就要弄個可以有delay的uboot,這樣可以按s,使得uboot停止去load Linux的kernel

1.將硬件JTAG與板子連接好。

2.給板子上電,按s停止uboot的運行

3.啓動AXD Debugger

4.打開 File -> Load Memory From File
裝載u-boot.bin 到地址0x0處.如果不行,可以嘗試先裝載u-boot,然後再裝載u-boot.bin.
5.裝載完成後,右鍵點擊彙編代碼的那個窗口,選擇SetPC,設置PC爲0

6.點擊運行,即可運行uboot了。

  
發佈了20 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章