调试 SDK
JTAG 调试的整个物理环境示意图如下,本地 PC 和调试 PC 可以是同一台 PC,也可以是局域网内不同的两台 PC:
执行调试流程之前,需要先准备 JTAG 调试的物理环境,包括:
-
硬件:
-
板子上有 JTAG 插座,或者飞线引出了 JTAG 信号线,可以连接到 JTAG 调试器。
-
JTAG 调试器:Luban-Lite 支持 CKLink 调试器 和 AIC JTAG 两种。
-
保证板子和 JTAG 调试器的信号线正确连接,请参考调试器上的信号标识。
-
-
软件:
-
安装 T-HeadDebugServer:调试器在 PC 端的代理,提供 GDB Server 调试服务。
-
安装 AiBurn:ArtInChip 烧录软件,需要用到其中的 USB 烧写驱动。
注:调试前,确保 PC 已安装上述软件。由于安装过程涉及驱动安装,务必开启管理员权限。关于软件的安装包,可以在工具包中找到。所有资源均可在代码仓库中下载。
-
- 选择当前需要 JTAG 调试的场景。JTAG 调试包括以下两种场景:
- 板子刚执行完 PSRAM/ DDR 的初始化,等待 JTAG 连接,Debug 配置选择执行: Dxx load
- 板子上已经在运行一份镜像,中途用 JTAG 连接,Debug 配置选择执行: Dxx connect only
SoC 型号 板子上无镜像 板子上已经在运行镜像 D21x D21x load D21x connect only D12X/D12x D12X/D12x load D12X/D12x connect only
完成上述 JTAG 环境准备后,遵照以下流程调试 SDK:
-
根据 JTAG 调试的场景,在 VSCode 中选择合适的 Debug 配置方法,点击箭头小图标(快捷键 F5),界面操作如下:注:Debug 配置只需选择一次,VSCode 会记住上次的配置。
- 运行 T-HeadDebugServer 并配置下列参数:注:T-HeadDebugServer 完成安装后,桌面会自动创建一个 T-HeadDebugServer 的图标。在 Setting 目录下选择 Target Setting
- Debug Arch Select:必须选择 RISC-V DM
- D1:需要选择 CSKY HAD
-
等待调试器正常连接且目标板上电后,点击红色小三角按钮,或者点击
,开始连接设备:
正常情况下,执行上述步骤会看到扫描出 CPU 信息如下:
注:- 通过 JTAG load
elf
前,必须要先完成 PSRAM、或者 DDR 初始化,否则 JTAG 在写 PSRAM/ DDR 时会出现异常,使用 JTAG 口需要关闭
IIC、以及 Touch panel,操作命令如下:
- 运行 scons --menuconfig 命令。
- 执行下列命令关闭 I2C 和 Touch
Panel。
Board options ---> [] Using i2c3 Drivers options ---> Peripheral ---> Touch Panel Support ---> Gt911 touch panel options ---> [] Using touch panel gt911
- 若使用 JTAG 口,另外需断开 CTP 触屏排线。
- 通过 JTAG load
elf
前,必须要先完成 PSRAM、或者 DDR 初始化,否则 JTAG 在写 PSRAM/ DDR 时会出现异常,使用 JTAG 口需要关闭
IIC、以及 Touch panel,操作命令如下:
- 在 VSCode 中修改 Luban-Lite/.vscode/launch.json
文件的下列参数,与当前方案配置保持一致:
-
路径名、elf 文件名
-
DebugServer 的服务 IP 和端口号,选择
-
断点
如果要添加多个断点,方法如下:
以 Dxx load 为例,修改方法如下:
Dxx connect only 需要修改的参数和上面类似,在 launch.json 文件中都用关键字 FIXME 标注。
-
- 打开 DebugServer,确保已经成功连接 JTAG 调试器。
如果成功连接,则界面显示如下:
如果连接成功,VSCode 会进入 Debug 界面,如下所示:
- 按照实际需求,开始调试。
Eclipse
-
使用 Eclipse IDE 前,确保已经下载和安装 Eclipse IDE for Embedded C/C++ Developers。
- 使用命令生成当前工程对应的 Eclipse 工程文件:
一键生成工程文件之前,确保已经在命令行环境下正确配置并且能成功编译工程文件。如果工程配置有更新,则在命令行下编译成功后再次生成 eclipse 工程文件。根据实际项目需求,生成当前工程对应的工程文件,具体流程如下所示,下列文件类型二选一:
- 生成 eclipse 工程文件:
-
进入 SDK 根目录:
cd luban-lite
- 使用下列命令生成当前工程对应的 Eclipse
工程文件:
scons --target=eclipse
-
将生成的 eclipse 工程文件存储到 luban-lite/output/xxxx/project_eclipse 目录中:
ls -a output/d21x_demo100-nand_rt-thread_helloworld/project_eclipse ./ ../ .cproject .project .settings/
-
- 生成 eclipse_sdk 工程文件:
-
进入 SDK 根目录:
cd luban-lite
-
使用下列命令生成当前工程对应的 Eclipse SDK 工程
scons --target=eclipse_sdk
-
将生成的 eclipse_sdk 工程文件存储到 luban-lite/output/xxxx/project_eclipse_sdk 目录中。
该目录拷贝了所有必要文件,可以作为一份独立的 SDK 拷贝到任何路径下进行调试。
-
- 生成 eclipse 工程文件:
- 导入 Eclipse 工程:
- 打开下载的 Eclipse IDE for Embedded C/C++ Developers 文件。
- 在菜单栏中,选择 。
- 在 Import Projects
界面,分别选择导入工程所在路径和需要导入的工程文件。
示例如下:
-
选择 Finish 完成导入。
- 编译
-
在 Project Explorer 中选择和打开成功导入的工程。
-
选中所需工程,并点击鼠标右键。
-
在鼠标右键菜单中选择 Build Project,对整个工程进行编译。注:对于首次编译操作,需要选择 Clean Project 清理工程,避免出现环境的兼容性问题,
-
等待编译完成。
编译生成的文件存放在 luban-lite/output/xxxx/project_eclipse/Debug 目录中,示例如下:ll output/d21x_demo100-nand_rt-thread_helloworld/project_eclipse/Debug/ d21x.bin d21x.elf // 调试需要的 elf 文件 d21x.map d21x_demo100_nand_page_2k_block_128k_v1.0.0.img // 烧录需要的 img 文件
-
-
Eclipse 在线调试。
具体步骤如下:-
安装 AiBurn 软件,使用 AiBurn 将 ddr_init_only.img 固件烧录到单板。烧录成功后,每次单板上电和复位后都会自动把 DDR 初始化好。
-
ddr_init_only.img: 仅仅初始化 DDR 的固件,方便直接加载工程的 elf 文件到内存当中。
-
AiBurn:烧录软件,把上述固件烧录到单板。
-
-
启动 T-HEADDebugServer,配置 GDB-Server 端口号。
T-HeadDebugServer 是调试器在 PC 端的代理,以 GDB-Server 的形式提供调试服务。
- Eclipse 中创建对应的 Debug Configuration。通过菜单
经过上述配置以后,就可以方便的在 Eclipse 下进行在线调试了。
给编译成功的工程新建一个对应的调试配置:
-