本來是想先在BBK上先搞個裸機程序練練的,但是BBK和beaglebone不同,沒有標配USB Jtag,而是預留了一個20針的Jtag接口,連底座都沒有焊。
先來點基礎知識,網上http://bbs.eeworld.com.cn/thread-418373-1-1.html對AM335x的啟動流程有個介紹。
1、上電,處理器PoR(Power-on Reset)后就會跳到復位向量所指的程序段去運行,這段程序位於處理器的ROM中,由處理器生產廠商提供,我們稱其為ROM BootLoader(RBL)。RBL在初始化固定存儲設備(NANDFlash,MMC,Etc.)后,根據CPU的跳線選擇,從持久性存儲設備(Beaglebone默認是從MMC)中將第二部要用到的bootloader讀入內存(至於是內部還是外部,要根據ROM中的程序來定,Beaglebone是內部ram),而后將控制權轉交。
2、Bootloader,分兩步:
第一步的bootloader我們稱為Secondary Program Loader(SPL),或MLO。SPL完成有限的初始化工作,最重要的就是初始化DDR RAM(或是其他大一點的外部RAM),因為下一步的U-Boot將要進駐其中。在這之后,SPL從持久性存儲設備中將U-Boot(其他bootloader也行,我們這里以U-Boot為例)讀入DDR RAM中,隨后轉交CPU控制權。
第二步終於到了萬眾矚目的U-Boot階段,使能大部分的處理器功能,將操作系統內核讀入DDR RAM中,而后配置啟動參數啟動Linux內核。當然U-Boot的功能可不止這些,U-Boot中提供了很多應用程序,可以使用tftp下載文件,或是格式化存儲設備等等。
3、Linux內核啟動……內核初始化,MMU使能,外部設備初始化,PID(1)Init進程啟動……。至於從什么地方加載內核到DDRRAM中,完全由U-Boot的啟動參數或命令決定的。
為什么要分這么幾步呢?源自網絡上的一段解釋:
一步Boot起來不行嗎?>_< 其實任何一門技術都是讓我們的生活變的簡單,Bootloader也是,所以其不可能是麻煩……首先,第一步的RBL不可能太復雜,ROM大小是一個限制,最重要的還是因為其所能獲取的系統信息太少,所以處理器只能使用簡單的方法去尋找能完成復雜功能的代碼,而后將處理器初始化工作交給它來完成。其次,SPL也不能很復雜,因為其位於處理器的內部RAM中,一般處理器的內部RAM都要小於128KB,其大小注定其不能完成很復雜的功能,是故,再尋找能力更強大一些的代碼,將處理器初始化工作交給它來完成。到了在DDR RAM中執行的Bootloader(U-Boot算一個),其功能就比較完善了,此時就可以啟動操作系統了。
Jtag接口的作用一般有兩個:一個是在線調試,還有一個程序燒錄。在線調試就是利用的CPU的Jtag接口,直接實現CPU信息的讀取。ARM芯片的Jtag程序燒錄和DSP是不一樣的,在DSP上連接Jtag后,我們在CCS里就可以直接實現程序的下載了,那是因為一方面Ti將這些功能都用CCS實現了,另外DSP的程序下載是直接下載到DSP片上的。而ARM的燒錄是有硬件和軟件兩方面的需求的,硬件方面Jtag接口要和flash之間有必要的連接,軟件方面,一般都是借助於一個flash燒寫工具,實現flash燒錄的。像2410這種芯片,一般都沒有統一的工具實現程序的編譯、燒錄,在AM335x上,Ti在CCS里集成了燒錄工具。
從上面這個啟動流程來看,即便是裸機程序也是有多級bootloader的概念的,和以前接觸的單片機、DSP、2410的裸機程序還是有區別的。在AM335x上面可以將程序用SD卡工具燒寫到SD卡上啟動,或者是用串口啟動,沒必要一定用Jtag將程序燒寫到板子上的flash里,啟動方式是多樣化的。在AM335x上面熟悉了uboot的一些應用開發方法,實際上就是裸機程序了,有Jtag的好處就是調試uboot這些啟動相關的程序時比較方便而已了。因此,暫時就不再折Jtag了,這里記錄一下最近了解BBK的Jtag實現搜集到的一些信息。
硬件方面:
我們需要給BBK焊接個Jtag底座才行,悲劇的是BBK的Jtag是貼片式的,可以用牛角底座,但我估計焊上去后也蠻容易掉的,同時也不好焊,也可以選擇飛線出來吧。
仿真器可以選用“XDS100V2 USB2.0 DSP仿真器”,可以支持TI DSP/ARM核 CCS4 CCS5 64bit等,135元就可以買到了,還是挺便宜的。淘寶直接搜“XDS100V2”。
軟件方面:
AM335x的邏輯程序是在CCS下面開發的,Ti提供了一個專門的開發包“am335x_sysbios_ind_sdk_1.0.0.8”,借助該開發包可以實現AM335x的starterware邏輯程序和sysbios操作系統程序開發。Ti的官方wiki有CCS的用法:
http://processors.wiki.ti.com/index.php/AM335X_StarterWare_Environment_Setup#Debugging_on_BeagleBone_board_using_CCSv5
可以采用兩種方式實現邏輯程序,一種就是采用CCS,可以實現程序的下載和單步調試,如果沒有Jtag,也可以將程序下載到SD里,向“白板的成功調試記錄 3”記錄的那樣。
beaglebone官方網站也給出了白板CCS帶Jtag的調試方法:
http://beagleboard.org/static/beaglebone/a3/Docs/ccs-jtag-simple.htm
白板的成功調試記錄有:
1. http://www.verydemo.com/demo_c161_i60745.html
2. http://anthonymerlino.us/uncategorized/emulated-floating-point-addition-on-the-beaglebone
3. http://www.eeboard.com/bbs/forum.php?mod=viewthread&tid=14722&highlight=
有人自己焊接了BBK的Jtag底座,借用白板的工程,實現了調試:
http://anthonymerlino.us/uncategorized/getting-started-with-beaglebone-black-bbb-and-starterware