Beaglebone Black初体验之怎样才能裸奔


本来是想先在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

 

beaglebone black 貌似已有ti官方sitera SDK支援方法

http://www.amobbs.com/archiver/tid-5543014.html


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM