1、基于AM33x的UBootSPL的CCS调试基于AM335x的U-Boot/SPL 的CCS 调试 在基于Linux的AM335x软件开发流程中,第一步确实是U-Boot/SPL(Second Program Loader)的移植。在移植中碰到问题比较常见,而U-Boot/SPL的调试手腕比较简陋,不便于迅速找到问题。利用仿真器能够单步调试的特点,就能够迅速定位到出问题的代码所在位置,加速移植的调试进程。本文要紧介绍如何用CCS+emulator调试基于AM335x的U-Boot/SPL。 1.AM335x Linux启动进程和U-Boot/SPL调试代码的预备1.1 AM335x Linux
2、的启动进程AM335x Linux的启动要紧包括ROM,SPL, U-Boot 和kernel四个启动步骤:A.ROM codeROM code是固化在芯片内部的代码,当上电时序正确,而且晶振等芯片启动所需的条件都具有时,AM335x会从ROM code开始运行。ROM code第一会读取sys_boot引脚上的配置,以确信寄存SPL的存储器,或能够获取SPL的外设。具体能够参考AM335x 中的第26章 Initialization。ROM code会从相应的地址读取/获取SPL,并运行SPL。B.SPLSPL和U-Boot 是bootloader的两个时期。那个地址分为两个时期的缘故是,
3、ROM code中可不能配置DDR,时钟等最小系统,因此ROM code只能把bootloader加载到片上SRAM中,而片上SRAM对本钱阻碍专门大,因此通常很小,例如在AM335x上只有64K,不足够放下整个U-Boot,因此将U-Boot分成两部份,SPL和U-Boot。SPL要紧的职责确实是初始化DDR,时钟等最小系统,以读取U-Boot,并加载到DDR中。具体来看,SPL 由ROM code加载到片上SRAM的起始位置,也确实是0x402F0400。SPL会进一步对芯片进行配置,要紧包括以下几个方面以完成其要紧职责:a.配置ARM core。 要紧包括对中断向量表,cache,MMU
4、等的配置。b.配置时钟系统,主若是PLL等。那个是配置各个功能模块的基础。c.配置UART,timer等。要紧用于输出必要的调试信息,或提供些时钟工具。d.配置I2C和PMIC。那个主若是为了配置电源治理芯片。e.配置DDR。f.配置 U-Boot所在的存储器或外设。完成配置后,SPL会读取U-Boot,并运行U-Boot。C.U-BootU-Boot 要紧的工作确实是正确加载Kernel。和SPL类似,U-Boot也是要加载下一个时期的image,可是U-Boot提供了更多外设的支持和更多的调试工具。因此,U-Boot也要进行各个模块的配置,上述SPL配置的部份, 除DDR外,U-Boot也
5、会依照需求从头配置(那个地址重置主若是U-Boot是一个开源工程,其要兼容某些特殊的芯片,从而需要做重载)。另外,U-Boot也会对网口,SD卡等依照需求进行配置。U-Boot 和SPL的工作流程比有一点是有较大不同的,确实是会对自身进行一次重载。那个在后面介绍U-Boot调试的时候,会有具体介绍。完成配置后,U-Boot 会从相应的存储器或外设读取Kernel,并传递参数给kernel,运行kernel。D.KernelKernel运行起来就代表Linux运行起来了,说明了启动进程的终止。1.2U-Boot/SPL 调试代码的预备1.2.1下载 U-Boot/SPL 代码U-Boot/SPL
6、的代码在一个包里面,通过编译宏来别离编译。目前TI U-Boot/SPL 代码发布要紧有两个渠道,具体如下A.通过GIT开源的方式发布:git:/arago-project.org/git/projects/U-Boot-am33x.git能够获取最新的代码,包括了最新的bug的修复。B.通过TI的官网的EZSDK发布:EZSDK是正式发布的软件包,通过全面测试,性能稳固,U-Boot/SPL在board-support 目录中。能够选择EZSDK作为开发的基础代码。当有问题时, 可到GIT上查找最新的代码是不是有bug fix。1.2.2 U-Boot/SPL的编译。为了便于用CCS进行调试
7、, 在编译上需要注意两点,其一,是要加入调试信息,确实是为了加入symbol等信息;其二,去掉编译器的性能优化编译选项,那个主若是因为,优化后的代码执行顺序相对C代码会有调整。针对这两点,在Uboot/SPL中,需要在config.mk中进行修改:A.在CFLAG 和 AFLAG中加入调试编译选项,从而加入调试信息:278 ALL_AFLAGS = $(AFLAGS) $(AFLAGS_$(BCURDIR)/$(F) $(AFLAGS_$(BCURDIR) g279 ALL_CFLAGS = $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(F) $(CFLAGS_$(BCURD
8、IR) gB.去掉 CFLAG中的编译选项, -O2(U-Boot中默许是-O2)61 HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer编译进程能够参考1.2.3 可执行文件通过编译后,就会生成可执行文件,也确实是咱们通常所说的image,那个地址会生成的image要紧用AM335x Linux启动的两个时期,MLO(SPL)和U-Boot。那个地址,SPL生成的image在am335/U-Boot-am33x/am335x/spl中,A.am335/U-Boot-am33x/MLO 负责AM335x启动的第一时期。
9、B.U-Boot-spl 作为带有调试信息的image,能够在CCS顶用作导入调试信息。C.U-Boot-spl.bin 包括有调试信息,是调试时需要的image。D.U-Boot-spl.map 那个文件里面存储了spl的memory map信息,能够找到各函数入口的地址。U-Boot生成的image在U-Boot-am33x/am335x中,具体如下:A.U-Boot.img负责AM335x启动的第二时期B.U-Boot 包括有调试信息,属于ELF格式,是调试时需要的image。C.U-Boot.map那个文件里面存储了U-Boot的memory map信息,能够找到各函数入口的地址2.调
10、试环境的预备调试环境要紧包括3个部份,仿真器,集成调试环境和开发板。下面将一一介绍:2.1 仿真器(emulator)目前支持AM335x的仿真器的型号比较多,有XDS560v2, XDS510,XDS100v2, XDS100v3,等,比较常见的是XDS560v2和XDS100v2。 XDS560v2,性能好,速度快,具有trace功能,可是价钱偏贵。 XDS100v2价钱比较廉价。其具有和XDS560v2 一样的大体调试功能,只是XDS100v2的速度相对略慢。 XDS560v2和XDS100v2在PC机上的驱动(Windows, Linux)都已经包括在CCS中了,因此安装了最新版的CC
11、S,就会安装相应的驱动。2.2 集成开发环境TI有自己的集成开发环境(IDE)CCS.目前最新的版本是基于Eclipse IDE架构的,界面新颖方便。 下载地址。 CCS有Windows版本和Linux 版本,后面会在介绍调试进程中具体介绍二者的不同。2.3 开发板目前,针对不同的应用,TI发布了基于AM335x的多个开发板。其中,和上配置了基于FT2232的xds100v2。而和上引出了接口。那个地址选择GP EVM 和 Spectrum Digital XDS560v2 作为调试平台。3 CCS 调试Uboot/SPL的具体步骤 下面正式开始CCS的调试。调试的进程要紧分为导入U-Boot
12、/SPL 工程, CCS 连接AM335x,代码调试等几个部份。3.1 导入CCS代码。 在CCS中,Menu File - Import 选择 Makefile 方式导入,如以下图所示:在ezsdk中,U-Boot/SPL所对应的Makefile的具体途径如下:/home/sitara/ti-sdk-am335x-evm-05.05.00.00/board-support/U-Boot-2020.09-psp04.06.00.08如前面所提到,U-Boot 和SPL的源码在同一个文件夹的,通过不同的Makefile治理不同的编译宏来区分的。那个地址导入的是U-Boot的代码对应的Makefi
13、le,会相应的导入U-Boot对应的预编译选项,因为其包括了所有的代码。而关于SPL,也会相应的一路带入,只是在CCS中看到的代码的宏概念有些不对,但那个不阻碍调试。3.2CCS 连接 AM335x.要紧分成仿真器的连接,target连接和Debug配置等几部份:3.2.1 仿真器的连接 关于 AM335x GP EVM选用Spectrum Digital XDS560v2 的20 pin的接口板,连在baseboard的J2口上即可,注意pin脚的顺序,不要把JTAG 接口插反了。 关于beaglebone,StarterKit,ICE等,这些板子已经把XDS100v2 仿真器集成到板子上了
14、,因此直接用usb线连到PC机上即可。A.CCS的配置 CCS的配置要紧包括Target的配置和连接两部份。a.Target 配置Target的配置包括两个部份,一个是仿真器(XDS560v2),另一个确实是SOC(AM335x)。具体操作如下:i.View - Target Configurationsii.点右键选择New Target Configuration.iii.新建一个叫做AM335_EVM的target.iv.Connection当选择 Spectrum Digital XDS560V2 STM USB Emulator.v.关于XDS100v2 , 能够选择 Texas I
15、nstruments XDS100v2 USB Emulator.vi.在Board or Device 当选择AM335x.vii.点击Save 保留。viii.点击Test Connection 看是不是能够正常连接。配置target成功后,会看到如下界面 3.2.2 Target 连接A.右键选中Target Configurations中已配置好的target,AM335x_EVM.ccxml, 在右键菜单当选择Launch Selected Configuration,连接成功后,能够取得以下图 现在,PC 和仿真器和仿真器和SOC的JTAG连接成功,可是ARM core尚未连上。从图中能够看到,有多个core的配置选项,由于U-Boot/SPL, Linux 运行在ARM coretex-A8 core上,那个地址只关注ARM core。B.在Debug窗口中,右键点击CortxA8 core, 选择Connect Target. 连接成功后,如以下图所示:现在,已经成功连上AM335x的Cortex-A8 core了。3.2.3 Debug配置 那个地址的debug配置,是对emulator连上core后行为的设置。 能够通过鼠标右键点击pr
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1