close

1.根據TI的databook描述,可以選擇從AEMIF(NOR Flash)開機,就可以直接跳到0x02000000去執行放在NOR flash中的u-boot,但旺陽電的VanHelsing並沒有實作NOR flash到EVM board上。
2.因為有NFS/TFTP server,RD在開發期間似乎不需要額外的updater,不管是kernel image/device driver或gui application都可以在u-boot執行期間透過NFS或TFTP server將update file載入target,下command或使用script file都可以輕鬆完成update的動作。
3.u-boot本身兼具bootloader與monitor的功能,將monitor予以disable之後就成為正常的bootloader,如果安排short-cut key讓系統在boot期間(甚至OS在跑的期間也可以跳)跳到它的command handle routine,它就成為一個簡單的on-line debug tool,可以read/write flash、update image、update file system,如果可以加上dump CPU register、dump OS information等功能,或許透過serial port的console就可以滿足大多數的debug需求(它本身有一個exception handler可以做這些事,不過做完就當機,很麻煩)。

Tool Chain

Tool Path Description
GCC /opt/mv_pro_4.0/monstavista/ compiler and linker.
GDB pro/devkit/arm/v5t_le/bin/ software debug tool.
bmp_logo /u-boot/tools/ u-boot logo maker.
envsrc /u-boot/tools/ verify environment for u-boot.
gen_eth_addr /u-boot/tools/ generate ethernet MAC address.
img2srec /u-boot/tools/ make u-boot format image.
mkimage /u-boot/tools/ convert u-boot format image to SREC format.
updater /u-boot/tools/ u-boot auto updater.

U-Boot Command

1.bootp [loadAddress] [bootfilename]
要求DHCP server分配IP給target,然後透過TFTP下載指定的image到memory中。
第1個參數是destination address。
第2個參數是file name,這個file必須已經存在host的tftpboot/底下。
要注意serverip必須已經設定好。
2.tftpboot [loadAddress] [bootfilename]
使用tftp以binary file格式下載file到target。
第1個參數是destination address。
第2個參數是file name,這個file必須已經存在host的tftpboot/底下。
要注意serverip與ipaddr必須已經設定好,file必須已經存在host的tftpboot/底下。
3.nfs [loadAddress] [host ip addr:bootfilename]
使用nfs下載file到target上指定的位址,若未指定host ip, path以及target的address的話,會使用預設值下載kernel image。
第1個參數是destination address。
第2個參數是host端的path與file name。
要注意serverip與ipaddr必須已經設定好,host端的path與file必須已經export。
4.bootm [addr [arg ...]]
從RAM或Flash開機,uImage必須已經load好,rootfs的mount pointer也都指定好。
第1個參數是image address,image必須是u-boot格式。
第2個參數是要pass給kernel的argument,也可以做為RAMDISK address。
5.erase all
erase [start add.] [end add.]
erase bank N
可以設定erase整個nor flash,或指定的區域,或某個bank。
6.nand
nand info - 顯示所有可用的nand flash.
nand read[.jffs2[s]] addr off size - 從」off」讀」size」大小的資料到」addr」,addr指的是memory,off指的是flash。
nand write[.jffs2] addr off size - 從」addr」寫」size」大小的資料到」off」。
nand erase [clean] [off size] - 從」off」開始,清除」size」大小的資料。
nand bad - 顯示壞掉的block。
7.flinfo
flinfo N
可以列出flash所有bank的infomation或只列印指定的bank。
8.iminfo addr [addr ...]
可以列出指定address的data的header。
9.loadb [offset] [baudrate]
透過serial port下載binary data。
10.loads [offset]
透過serial port下載S-Record的data。
11.printenv [name]
印出environment variable的value,若未指定variable則印出全部。
12.setenv name [value]
設定environment variable。
13.md address [address]
印出指定位址(區域)的hex data。

U-Boot Souce Code Architecture

Dirctory Explain
board board dependent files and u-boot.lds.
cpu CPU specific files
lib_arm
common misc architecture independent functions
disk source code for disk driver.
doc simple document for u-boot.
drivers commonly used device drivers
dtt Digital Thermometer and Thermostat drivers
fs source cdoe for file system support
include header Files
lib_generic files generic to all architectures
net networking code
post Power On Self Test
rtc Real Time Clock drivers
tools Tools to build S-Record or U-Boot images, etc.
examples Example code for standalone applications, etc.

Booting Code Trace

由於使用JTAG的reset pin開機會因為RBL所做的hardware check而導致系統停在RBL不出來,所以RBL、UBL與部份的u-boot可能都沒辦法逐行trace,不過可以在u-boot進入main_loop之後再connect CCStudio,至少可以監看network behavior、load/Uncompressing image的動作,也可以監看到kernel開始run的過程。

UBL Source Code Trace

Function Description
selfcopy()
1)Enable ITCM與DTCM。
2)將__selfcopysrc中的資料搬到__selfcopydest中。
3)呼叫boot()。
boot()
1)設定為supervisor mode,disable FIQ & IRQ。
2)將Interrupt Vector Table放到ARM RAM1(0x2000)的位置。
3)設定Stack Pointer。
4)執行main()。
5)執行main()從flash或uart端搬進DDR2的application。
main()
1)執行PSCInit(),初始化Power & Sleep Control的feature。
2)檢查BOOTCFG的第6~7個bit,若為0則表示從NAND開機,若為1則表示從NOR開機,若都不
是則進入無窮迴圈等待RBL對UART的存取結束。
3)呼叫DM644xInit(),對UARTs/PLL1/PLL2/DDR2/IVT做initial。
4)將current_mem_loc設為0,也就是RAM0開始的位置(0x0000)。
5)分別呼叫NAND_Copy()與NOR_Copy(),到flash中去尋找符合的application,並且將它搬
到DDR2中。
6)若flash中沒有符合的applcation,則使用UART下載。
7)application放進DDR2之後,return回boot(),執行application。
PSCInit()
1) PSC是Power and Sleep Control的意思。
2)Reset DSP core,Power on internal component。
3)設定EMURSTIE。
4)設定」Always on」與」DSP」兩部份的power domain。
5)清除EMURSTIE。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ryan0988 的頭像
    ryan0988

    尋找最初的初衷

    ryan0988 發表在 痞客邦 留言(0) 人氣()