记gnu-mcu-eclipse-openocd工具链移植

在RISCV工具链开发中挣扎。。。

施工中。。。

前言

本文不是为了讲述工具链的安装,本文的目标是为了向OpenOCD添加一个新的芯片.

整体来说,工具链就是东拼西凑.
我搞这个东西快四个月了,真要伶出来脑子里还是一团浆糊。个人觉得能用商业的,还是出钱吧,真的。
特别像我们这种头铁的gdx,连jlink也想换自研的,真的很折腾。

概述

工具链总览:

GUI –>CMD –>TCL –>TTL
eclipse-CDT GDB openocd dongle

记gnu-mcu-eclipse-openocd工具链移植_第1张图片
其中,dongle表示DAP_link,jlink,stlink等一众硬件仿真器。
调试器千千万,调试界面无非jtag/swd,这部分要做的就是连线连对而已。也可以自己开发,反正就拿dap-link的源码往上套。
openocd,最好的情况是已有cfg,例如st家的芯片,直接带参-f调用类似STM32F10x.cfg 之类就够了
比较糟糕的情况,例如芯片自有flash操作方法,那就需要修改flash操作部分,这个cfg是没有的,需要自己改源码编译。
具体要改动的文件如下:

此部分日后详细说明
1.在./tcl/target中,添加自己设备的.cfg文件
此文件用于编译后传递到scripts中供用户调用
2.在./src/flash/nor中,添加自己设备的.c文件
此文件用于告知openocd你文件的flash烧录流程
3. 在 /src/flash/drivers.c中,添加自己设备的设备名
此处让openocd知晓你的设备.
4. 在flash/nor中,更改makefile.am
令openocd的编译过程可以引用到你刚刚添加的文件.

这其中最重要的问题在于交叉编译,可能是我脸黑,抓了很多版本的openocd源码都编译过不了,哪怕拿着sifive现场写的教程也make fail for win64.
目前能够成功的环境只有那个docker。

openocd源码搞定以后,其他的就不是问题了,cfg写对,基本上可以开始第一轮对内核的debug了
因为都是内核相关,ld里配一下flash和ram地址就完事。

在arm环境下,工具链的移植可以说随便填填空就够了。
在riscv中,总是会遇到各种问题,可以说,非常的不尽兴

此部分日后详细说明

路线图

目前的移植工作,大致上按照以下步骤进行:

  1. openocd修改cfg连接mcu内核调试部分
  2. openocd修改源码编译操作mcu的flash
  3. eclipse 修改ld文件,通过gcc编译出elf
  4. gdb联调openocd,测试cmd工作情况
  5. 各组件交叉编译统一到一个平台
  6. eclipse中整合cmd,开始debug

目前进度

卡在gdb无法启动openocd中

已解决,在启动前,需要变更gdb指令格式,指令为:
set archtecture riscv:rv32

flash烧写时间过长(0.038KB/s)

尚未解决,由于riscv内核不支持arm的algorithm特性,使用了单字节烧录和强制延时等待的办法.
下一轮开发再解决此问题

你可能感兴趣的:(RISCV)