
北京立萨科技有限公司
咨询热线:010-82488292
公司电话:010-82488292
公司传真:010-82611646
企业邮箱:sales@lisatech.cn
地址:北京市海淀区中关村大街19号 新中关大厦B座南翼15层1507室
基于AM335x的U-Boot/SPL 的CCS 调试
摘要 : 在基于Linux的AM335x软件开发流程中,第一步就是U-Boot/SPL(SecondProgram Loader)的移植。在移植中遇到问题比较常见,而U-Boot/SPL的调试手段比较简陋,不便于迅速找到问题。利用仿真器可以单步调试的特点,就可以迅速定位到出问题的代码所在位置,加速移植的调试过程。本文主要介绍如何用CCS+emulator调试基于AM335x的U-Boot/SPL。
在基于Linux的AM335x软件开发流程中,第一步就是U-Boot/SPL(SecondProgram Loader)的移植。在移植中遇到问题比较常见,而U-Boot/SPL的调试手段比较简陋,不便于迅速找到问题。利用仿真器可以单步调试的特点,就可以迅速定位到出问题的代码所在位置,加速移植的调试过程。本文主要介绍如何用CCS+emulator调试基于AM335x的U-Boot/SPL。
1. AM335x Linux启动过程以及U-Boot/SPL调试代码的准备
1.1 [url=]AM335x Linux[/url]的启动过程
AM335x Linux的启动主要包括ROM,SPL, U-Boot 和kernel四个启动步骤:
A. ROM code
ROM code是固化在芯片内部的代码,当上电时序正确,而且晶振等芯片启动所需的条件都具备时,AM335x会从ROM code开始运行。
ROM code首先会读取sys_boot引脚上的配置,以确定存放SPL的存储器,或者可以获取SPL的外设。
具体可以参考AM335x technical reference manual中的第26章 IniTIalizaTIon。
ROM code会从相应的地方读取/获取SPL,并运行SPL。
B. SPL
SPL 和U-Boot 是bootloader的两个阶段。这里分为两个阶段的原因是, 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等的配置。
b. 配置时钟系统,主要是PLL等。这个是配置各个功能模块的基础。
c. 配置UART,TImer等。主要用于输出必要的调试信息,或者提供些时钟工具。
d. 配置I2C和PMIC。这个主要是为了配置电源管理芯片。
e. 配置DDR。
f. 配置 U-Boot所在的存储器或者外设。
完成配置后,SPL会读取U-Boot,并运行U-Boot。
C. U-Boot
U-Boot 主要的工作就是正确加载Kernel。和SPL类似,U-Boot也是要加载下一个阶段的image,但是U-Boot提供了更多外设的支持和更多的调试工具。所以,U-Boot也要进行各个模块的配置,上述SPL配置的部分, 除了DDR外,U-Boot也会根据需求重新配置(这里重置主要是U-Boot是一个开源工程,其要兼容某些特殊的芯片,从而需要做重载)。此外,U- Boot也会对网口,SD卡等根据需求进行配置。
U-Boot 和SPL的工作流程比有一点是有较大差异的,就是会对自身进行一次重载。这个在后面介绍U-Boot调试的时候,会有具体介绍。
完成配置后,U-Boot 会从相应的存储器或者外设读取Kernel,并传递参数给kernel,运行kernel。
D. Kernel
Kernel运行起来就代表Linux运行起来了,表明了启动过程的结束。
1.2 U-Boot/SPL 调试代码的准备
1.2.1下载U-Boot/SPL 代码
U-Boot/SPL的代码在一个包里面,通过编译宏来分别编译。目前TI U-Boot/SPL 代码发布主要有两个渠道,具体如下
A. 通过GIT开源的方式发布:
git://arago-project.org/git/projects/U-Boot-am33x.git
可以获取最新的代码,包含了最新的bug的修复。
B. 通过TI的官网的EZSDK发布:
http://software-dl.ti.com/dsps/dsps_public_sw/am_bu/sdk/AM335xSDK/latest/index_FDS.html
EZSDK是正式发布的软件包,经过全面测试,性能稳定,U-Boot/SPL在board-support 目录中。可以选择EZSDK作为开发的基础代码。当有问题时, 可到GIT上查找最新的代码是否有bug fix。
1.2.2 U-Boot/SPL的编译
为了便于用CCS进行调试, 在编译上需要注意两点,其一,是要加入调试信息,就是为了加入symbol等信息;其二,去掉编译器的性能优化编译选项,这个主要是因为,优化后的代码执行顺序相对C代码会有调整。
针对这两点,在Uboot/SPL中,需要在config.mk中进行修改:
A. 在CFLAG 和 AFLAG中加入调试编译选项,从而加入调试信息:
278ALL_AFLAGS = $(AFLAGS) $(AFLAGS_$(BCURDIR)/$(@F)) $(AFLAGS_$(BCURDIR)) –g
279ALL_CFLAGS = $(CFLAGS) $(CFLAGS_$(BCURDIR)/$(@F)) $(CFLAGS_$(BCURDIR)) –g
B. 去掉 CFLAG中的编译选项, -O2(U-Boot中默认是-O2)
61 HOSTCFLAGS = -Wall -Wstrict-prototypes -O2-fomit-frame-pointer
编译过程可以参考http://processors.wiki.ti.com/index.php/AM335x_U-Boot_User%27s_Guide
1.2.3 可执行文件
经过编译后,就会生成可执行文件,也就是我们通常所说的image,这里会生成的image主要用AM335xLinux启动的两个阶段,MLO(SPL)和U-Boot。
这里,SPL生成的image在am335/U-Boot-am33x/am335x/spl中,
A. am335/U-Boot-am33x/MLO 负责AM335x启动的第一阶段。
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信息,可以找到各函数入口的地址
上一篇:AM335XDDR3 512M内存的调试过程详细中文讲解1970-01-01
下一篇:i.MX6Q核心板散热方案参考1970-01-01
文章推荐
- RK3288底板+核心板设计过程
- RK3288广告机硬件和软件调试心得
- 一款基于TI Sitara Cortex-A8 AM3358的嵌入式单板机
- BeagleBone产品采用了德州仪器推出的Sitara AM335x Cortex A8 ARM处理器
- 一个带有HDMI视频输入的VS-RK3288方案
- 瑞芯微vs-rk3288方案定制Android 开发板
- RK3288在人脸识别上的应用及外接双路摄像头
- 德州仪器(TI)工业以太网解决方案
- AM335x ARM Cortex-A8处理器-TI DLP 3D打印机总体解决方案
- 瑞星微RK3288方案设计
- i.MX6Q Cortex-A9新一代智能平台
- i.MX6Q车载全触控智能管理终端解决方案
- AM3354嵌入式充电桩计费控制单元主板方案
- 大联大控股世平推出 TI 、NXP 多领域应用人机交互平台
- 强化物联网“心脏”,智能网关设计详解
- TI AM437x系列处理器为核心的嵌入式开发板Rico Board
- 如何用BB Black制作DAC系统
- 采用AM3352工控核心板进行免疫荧光检测仪解决方案
- 人机交互与TI Sitara处理器的产品性能介绍
- Rockchip RK3399 eMMc 的 DTS 配置说明
我要评论: | |
*内 容: |
|
验证码: |
|
共有0条评论