【编译】
由于脱离了界面的UI配置,对于未知的工程结构。用户需要:
1. 手动为每个源文件目录编写Makefile规则,指定源文件集合、依赖、汇编/编译工具exe、编译参数(例如编译头索引目录)。
2. 切换到一个新目录,作为输出目录,用户手动为编写Makefile规则,指定链接各个源的中间文件、链接工具exe、链接参数(例如ld文件)。以上步骤了解Makefile的语法。
3. 命令行路径切换到步骤2的输出目录下,执行make进行编译,如果编译工程成功将会最终输出elf文件。执行make clean可进行输出文件的清理。
【烧写,以wch的risc-v内核工程为例】
擦除 OPENOCD_PATH –f CFG_PATH –c init –c halt -c "flash erase_sector wch-riscv 0 last" –c exit
编程 OPENOCD_PATH –f CFG_PATH –c init –c halt -c "program TARGET_PATH ADDRESS" –c exit
校验 OPENOCD_PATH –f CFG_PATH –c init –c halt –c "verify_image TARGET_PATH " -c exit
复位 OPENOCD_PATH –f CFG_PATH –c init -c reset -c exit
【调试】
1. 创建openocd进程
格式:OPENOCD_PATH -f CFG_PATH
提倡使用拖拽的方式,提升效率,也可避免输入路径出错。
执行命令,openocd会获取
开发板状态,并启动协议server端。随后openocd进程挂起,等待连接。命令行中显示等待连接的端口号,此处gdb
通信的端口默认为3333。
2. 开启第二个MRS Console,启动gdb client
格式: GDB_PATH [FILE_PATH] [–ARGS]
无参数形式riscv-none-embed-gdb为默认的gdb cli命令。
参数形式riscv-none-embed-gdb xxxx.elf -interpreter mi 在支持cli基础上,同时支持gdb mi命令。MRS调试打开gdb trace之后,Console输出的命令就是gdb mi命令。可以复制到此模式下逐个运行。
若指定了FILE_PATH,如命令riscv-none-embed-gdb xxxx.elf ,则后续不需要调用file命令指定调试文件;若未指定FILE_PATH,则后续需要file命令指定调试文件。
3.gdb连接设置
设置连接配置:
set mem inaccessible-by-default off
set remote
timeout unlimited
(rv内核) set architecture riscv:rv32
4. 连接server端口
target remote ip:port:连接端口
5.调试的其他命令
load :烧写, 执行后将pc置为程序第一条指令处;
info register + 寄存器名: 查看寄存器;
info breakpoint:查看所有断点;
break +行号/方法名/符号名:设置断点 ;
continue:继续跑到下一个断点,如果没有断点则一直运行;
next:调试执行下一步;
step:单步进入;
print:打印变量值;
list:(需要工程目录包含源码, 编译时调试等级-g以上)查看当前代码 ;
暂停状态时,可执行查看寄存器、查看当前代码,查看反汇编等操作;
gdb模式下,可输入help all列出所有命令,如搜索、变量打印、查看堆栈等。