查看: 750|回复: 0
收起左侧

Arch Linux 下 sipeed longan-nano 2 rv-link

[复制链接]

  离线 

  • TA的每日心情
    拍拍
    2022-10-3 08:50
  • 签到天数: 1 天

    [LV.1]

    发表于 2022-11-6 10:54:37 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 魏定国 于 2022-11-6 10:54 编辑

    序 — 起因

    某天在群里看到有人发 sipeed2022_spring_competition 的活动宣传图,如下:

    GD32VF 单片机芯片及应用-Arch Linux 下 sipeed longan-nano 2 rv-linkrisc-v单片机中文社区(1)

    重点是可以白嫖一块 BL702 JTAG+UART 调试小板 ,对于电子行业的用户来说这是无法拒绝的诱惑;而且还是调试工具。

    于是白嫖了这块 Sipeed RV debugger plus JTAG+UART BL702 调试器(有需要的朋友,也可以去白嫖),在他们官方的店铺看到了 Sipeed Longan Nano RISC-V GD32VF103CBT6 单片机 带壳开发板,没忍住,于是就有这篇 linux 下制作rv-link 的调试器的文章。

    准备—初步了解

    sipeed 官网关于Longan nano开发板的相关信息、 RV-LINK 介绍信息和 PIO 插件信息。如下:
    资源
    连接
    详情
    Longan nano wiki
    Longan Nano是基于兆易创新(GigaDevice)的GD32VF103CBT6(RISC-V架构)芯片设计的极简开发板。开发板将芯片所有IO引出,设计小巧精致,板载Type-C、LCD、SD卡、JTAG等接口,方便广大学生、工程师、极客爱好者们接触学习最新一代的 RISC-V处理器。
    GD32VF103CBT6 ,基于芯来科技.的Bumblebee内核
    支持 RV32IMAC 指令集及ECLIC 快速中断功能。内核功耗仅传统 Cortex-M3 的1/3.
    Longan nano 开发工具
    注:Windows 平台
    Longan nano 相关手册
    有中英文版本
    Longan nano 引脚图和规格书
    相关引脚信息
    HDK 屏幕资料
    0.96 inch 80*160 IPS LCD
    Blink 闪灯程序
    在 vscode 使用 pio 插件开发,使用 jlink/sipeed-rv-debugger 工具调试,使用 gd32-dfu (仅供 windows)上位机下载调试,使用 zadig 替换驱动信息。
    RV-LINK 原始仓库(几年没更新了)
    用 RISC-V 开发板实现的 RISC-V 仿真器。与其它仿真器不同的是:RV-LINK 通过 USB 串口直接与 GDB 交互,不需要 OpenOCD 之类的中介。
    rv-link 第三方仓库(进行了大量功能新增和优化)
    This project aims to improve the original RV-LINK firmware with the following features: Support for a newly designed hardware board with specific features, called RVL-Probe Support for JTAG over SPI + DMA; Additional diagnostics of the JTAG interface; Support for a second USB to serial adapter; A CAN bus logger; Easy updating of the RV-Link firmware; Support of running RV-Link on other host platforms (e.g. Linux PC+FT323 / Raspberry Pi); Additional mon commands; Additional NVM configurable items.
    vscode 的 pio(PlatformIO) 插件
    打开 VSCode -> 点击左侧扩展 -> 搜索 PlatformIO -> 点击安装插件 -> 等待安装完成 -> 重启 VSCODE
    gd32-dfu-utils
    Dfu-utils GD32 fork. Dfu-util - Device Firmware Upgrade Utilities
    gd32-dfu-utils AUR 包
    AUR 的 gd32-dfu-utils 包,做了处理避免和 dfu-utils 包冲突
    rv-link-udev-git AUR 包
    AUR 的 rv-link 的 udev 文件(驱动文件)
    RV-Debugger-BL702
    RV-Debugger-BL702 源码,RV-Debugger-BL702 is an opensource project that implement a JTAG+UART debugger with BL702C-A0.
    python-bflb-mcu-tool
    BOUFFALOLAB MCU TOOL
    python-bflb-iot-tool
    BOUFFALOLAB IOT TOOL
    python-bflb-crypto-plus
    PyCryptoPlus is an extension to the Python Crypto module (www.pycrypto.org).
    Bouffalo Lab Dev Cube For Ubuntu
    Dev Cube是博流提供的芯片集成开发工具,包含IOT程序下载、MCU程序下载和RF性能测试三大功能。工具提供程序固件启动时的时钟,电源,Flash参数等配置,并可根据用户需求对程序进行加密和签名,生成应用程序启动信息文件。工具还可烧写用户资源文件,分区表文件以及 EFUSE配置文件等。工具可对Flash进行擦、改、写
    bflb-mcu-tool
    BOUFFALOLAB MCU TOOL
    根据上面相关信息,大致有点了解后,应该知道如何安装 gitvscodepio 插件 。以下默认已经安装。

    编译 RV-LINK — 踩踩坑

    RV-LINK 原始仓库进行编译
    克隆 RV-LINK 源码
    1. git clone https://gitee.com/zoomdy/RV-LINK.git
    复制代码
    运行 vscode ,左侧找到 pio,单击后,选择 打开本地工程,选择上面 RV-LINK 所在位置

    左下角单击 编译图标[✔] ,不出意外的话会有如下报错:
    1. KeyError: "Invalid board option 'build.ldscript'":
    2. File "~/.platformio/penv/lib/site-packages/platformio/builder/main.py", line 179:
    3. env.SConscript(item, exports="env")
    4. File "~/.platformio/packages/tool-scons/scons-local-4.3.0/SCons/Script/SConscript.py", line 597:
    5. return _SConscript(self.fs, *files, **subst_kw)
    6. File "~/.platformio/packages/tool-scons/scons-local-4.3.0/SCons/Script/SConscript.py", line 285:
    7. exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
    8. File "~/RV-LINK-master/RV-LINK-master/build.py", line 65:
    9. LDSCRIPT_PATH = join(PROJ_DIR, "src", "link", "gd32vf103c-start", "RISCV", "gcc", board.get("build.ldscript"))
    10. File "~/.platformio/penv/lib/site-packages/platformio/platform/board.py", line 46:
    11. raise KeyError("Invalid board option '%s'" % path)
    复制代码
    原因是 build.ldscript 参数发生变化,需要在工程目录下 plateformio.ini 进行如下修改:
    1. ; PlatformIO Project Configuration File
    2. ;
    3. ;   Build options: build flags, source filter, extra scripting
    4. ;   Upload options: custom port, speed and extra flags
    5. ;   Library options: dependencies, extra library storages
    6. ;
    7. ; Please visit documentation for the other options and examples
    8. ; http://docs.platformio.org/page/projectconf.html
    9. [env:sipeed-longan-nano]
    10. ; platform = gd32v
    11. platform = https://github.com/sipeed/platform-gd32v.git
    12. ;framework = gd32vf103-sdk
    13. board = sipeed-longan-nano
    14. monitor_speed = 115200
    15. upload_protocol = dfu
    16. debug_tool = sipeed-rv-debugger
    17. board_build.ldscript = GD32VF103xB.lds
    18. build_flags =
    19.     -DGD32VF103C_START
    20.     -DUSE_STDPERIPH_DRIVER
    21.     -DUSE_USB_FS
    22.     -DLINK_LONGAN_NANO
    23.     -DTARGET_GD32VF103
    24.     -DAPP_GDB_SERVER
    25.     -DRVL_ASSERT_EN
    26.     -MMD
    27. extra_scripts =
    28.     pre:build.py
    29. src_filter =
    30.     +<*>-<.git/>-<.svn/>----
    31.     -
    32.     -
    33.     -
    34.     -
    35.     -
    36.     -
    37.     -
    38.     -
    39.     -
    40.     -
    41.     +
    42.     +
    43.     +
    44.     +
    45.     -
    46.     +
    47.     -
    48.     +
    49.     +
    50.     +
    51.     +
    52.     +
    53.     +
    54.     +
    复制代码
    再此编译即可生成固件。
    由于此 RV-LINK 停更两年以上,可以选择自己二次开发或使用第三方开发的其他 RV-LINK
    rv-link 第三方仓库编译

    克隆 rv-link 源码
    1. git clone https://github.com/michahoiting/rv-link.git
    复制代码
    运行 vscode ,左侧找到 pio,单击后,选择 打开本地工程,选择上面 RV-LINK 所在位置
    左下角单击 编译图标[✔] ,不出意外的话编译通过

    烧录固件 — gd32-dfu-utils

    发现 linux 没有 gd32 的 dfu 刷固件工具,于是打包了 gd32-dfu-utils 来给 arch 系用户使用,打包的 PKGBUILD 文件内容如下
    1. # Maintainer: taotieren
    2. pkgname=gd32-dfu-utils
    3. pkgver=0.9
    4. pkgrel=2
    5. epoch=
    6. pkgdesc="Dfu-utils GD32 fork. Dfu-util - Device Firmware Upgrade Utilities"
    7. arch=('x86_64')
    8. url="https://github.com/riscv-mcu/gd32-dfu-utils"
    9. license=('GPLv2')
    10. groups=()
    11. depends=('libusb')
    12. makedepends=()
    13. checkdepends=()
    14. optdepends=(
    15.   'python: dfuse-pack tool support'
    16.   'python-intelhex: Intel HEX file format support'
    17. )
    18. provides=("GD32-dfu-util")
    19. conflicts=()
    20. replaces=()
    21. backup=()
    22. options=('!strip')
    23. install=
    24. changelog=
    25. source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz")
    26. noextract=()
    27. sha256sums=('6312461aab3650b0be8648a7afb9bbf2e63328defe80b25b6c2c85973b39f8f5')
    28. #validpgpkeys=()
    29. build() {
    30.     cd "${srcdir}/${pkgname}-${pkgver}"
    31.     ./autogen.sh
    32.     ./configure --prefix=/usr
    33.     make
    34. }
    35. package() {
    36.     cd $pkgname-$pkgver
    37.     make DESTDIR="$pkgdir" install
    38.     install -Dm755 dfuse-pack.py "$pkgdir"/usr/bin/dfuse-pack
    39.     install -Dm644 doc/40-dfuse.rules "$pkgdir"/usr/lib/udev/rules.d/40-gd32-dfuse.rules
    40.     cd "$pkgdir"/usr/bin/
    41.     for var in *; do mv "$var" "gd32-${var}"; done
    42.     rm -rf "$pkgdir"/usr/share
    43. }
    复制代码

    for var in *; do mv "$var" "gd32-${var}"; donedfu 的工具重命名成 gb32-开头,避免和 dfu 工具冲突,正常来说需要打 patch 暂时还没写,后续和 gd32-dfu-utils 维护者沟通下,是他那边修改还是我这边打包的时候打 patch

    已经上传到 AUR 仓库 gd32-dfu-utils

    命令行刷机操作
    准备操作

    按住 BOOT0 按钮,然后按下 RESET 按钮,释放 RESET 按钮,最后释放 BOOT0 按钮,进入 DFU 模式
    1. # 通过 lsusb 或者 GD32 的 PID:VID 信息
    2. ❯ lsusb |grep GD
    3. Bus 003 Device 052: ID 28e9:0189 GDMicroelectronics GD32 DFU Bootloader (Longan Nano)
    4. # 命令行刷写固件,用法和 dfu 一致,其他 dfu 用户可以看 dfu 的帮助文档或其他用户的分享
    5. ❯ gd32-dfu-util -d 28e9:0189 -a 0 --dfuse-address 0x08000000:leave -D rvlink_fw_sipeed-longan-nano.hex
    6. dfu-util 0.9
    7. Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
    8. Copyright 2010-2016 Tormod Volden and Stefan Schmidt
    9. This program is Free Software and has ABSOLUTELY NO WARRANTY
    10. Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
    11. gd32-dfu-util: Invalid DFU suffix signature
    12. gd32-dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
    13. Opening DFU capable USB device...
    14. ID 28e9:0189
    15. Run-time device DFU version 011a
    16. Claiming USB DFU Interface...
    17. Setting Alternate Setting #0 ...
    18. Determining device status: state = dfuIDLE, status = 0
    19. dfuIDLE, continuing
    20. DFU mode device DFU version 011a
    21. Device returned transfer size 2048
    22. GD32 flash memory access detected
    23. Device model: GD32VF103CB
    24. Memory segment (0x08000000 - 0801ffff)(rew)
    25. Erase size 1024, page count 128
    26. Downloading to address = 0x08000000, size = 141046
    27. gd32-dfu-util: Last page at 0x080226f5 is not writeable
    28. # 通过 lsusb 确认刷入的固件是否别识别
    29. ❯ lsusb |grep GD
    30. Bus 003 Device 053: ID 28e9:018a GDMicroelectronics Longan Nano
    复制代码

    其他的可能的坑

    可能会踩的坑 Ubuntu 等需要将 $USER 加到 串口组(uucp) 里面(新版本一般是 uucp ,旧版本可能是其他的,使用 ls -lsh /dev/ttyUSB* 查看设备所在组。如果在 Linux 下调试时遇到串口不通或者提示没权限,把用户加入串口设备组里面,后重启电脑试试。示例:
    1. # 查看 串口设备组
    2. ❯ ls -lash /dev/ttyS0 0 crwxrwxrwx 1 root uucp 4, 64 Feb 15 19:09 /dev/ttyS0
    3. ❯ sudo gpasswd -a `whoami` uucp
    4. [sudo] taotieren 的密码:
    5. 正在将用户“taotieren”加入到“uucp”组中
    6. ❯ groups `whoami`
    7. wheel uucp vboxusers taotieren
    8. ❯ reboot
    9. # 如果添加 uucp 后还是不能使用,尝试安装 uucp 软件包,以 Arch 为例,其他 Linux 根据设备组确认
    10. ❯ yay -Syu uucp
    复制代码

    固件烧录 — RV-Debugger-BL702

    Bouffalo Lab Dev Cube 我这边在 Arch 下运行有一些坑(内置的软件版本过低,和 Arch 最新的包不兼容),无法运行。

    在 Bouffalo 官网找到 bflb-mcu-tool 的 python 源码包,编写 PKGBUILD 进行打包操作
    1. # Maintainer: taotieren
    2. pkgname=python-bflb-mcu-tool
    3. _name=${pkgname#python-}
    4. pkgver=1.6.8
    5. pkgrel=1
    6. epoch=
    7. pkgdesc="BOUFFALOLAB MCU TOOL"
    8. arch=('any')
    9. url="https://pypi.org/project/bflb-mcu-tool"
    10. license=('unkown')
    11. groups=()
    12. depends=('python' )
    13. makedepends=('python-build' 'python-installer' 'python-wheel')
    14. checkdepends=()
    15. optdepends=()
    16. provides=()
    17. conflicts=()
    18. replaces=()
    19. backup=()
    20. options=('!strip')
    21. install=
    22. changelog=
    23. source=("${_name}-${pkgver}.tar.gz::https://files.pythonhosted.org/packages/a5/57/ab4a45ca3e7736c415f28502db6d897256332521025a52872b534d288207/$_name-$pkgver.tar.gz")
    24. noextract=()
    25. sha256sums=('675f24619aded8f1313bde5c0cb2da5100e519c7ec5234b3b2481b66e5aa8bcc')
    26. #validpgpkeys=()
    27. build() {
    28.     cd "${srcdir}/${_name}-${pkgver}"
    29.     python -m build --wheel --no-isolation
    30. }
    31. package() {
    32.     cd "${srcdir}/${_name}-${pkgver}"
    33.     python -m installer --destdir="${pkgdir}" dist/*.whl
    34. }
    复制代码

    上传到 AUR 仓库:python-bflb-mcu-tool

    安装 python-bflb-mcu-tool
    1. yay -S python-bflb-mcu-tool
    复制代码

    博流还有其他 python 包,也一并打包了,需要的话可以自行安装。
    1. # BOUFFALOLAB IOT TOOL
    2. yay -S python-bflb-iot-tool
    3. # PyCryptoPlus is an extension to the Python Crypto module (www.pycrypto.org).
    4. yay -S python-bflb-crypto-plus
    复制代码

    bflb-mcu-tool 固件烧录操作
    1. # Windows:
    2. # 设备管理器确认 bl702 实际串口号
    3. .\bflb_mcu_tool.exe --chipname=bl702 --port=COM9 --xtal=32M --firmware="main.bin"
    4. # Linux:
    5. # lsusb 获取 bl702 的 usb 信息,确认 bl702 实际串口号
    6. # 通过软件包安装后可以直接使用 bflb_mcu_tool ,如果是手动编译或者其他方式,自己设置运行路径即可。
    7. # 建议参考前面的 AUR 中 python 编译和打包的操作,先将其打包成 whl 包,再用 python 安装 whl 包
    8. bflb_mcu_tool --chipname=bl702 --port=ttyUSB1 --xtal=32M --firmware="main.bin"
    复制代码

    安装驱动 — rv-link-udev

    安装 rv-link 里面的 99-rvlink-jtag.rules
    1. # 手动安装 99-rvlink-jtag.rules 到系统的 /etc/udev/rules.d/99-rvlink-jtag.rules
    2. # 如果打包的话安装至 /usr/lib/udev/rules.d/99-rvlink-jtag.rules
    3. sudo install -Dm0644 "rv-link/drivers/udev/rules.d/99-rvlink-jtag.rules" "/usr/lib/udev/rules.d/99-rvlink-jtag.rules"
    4. sudo install -Dm0644 "rv-link/drivers/udev/rules.d/99-rvlink-jtag.rules" "/etc/udev/rules.d/99-rvlink-jtag.rules"
    复制代码
    99-rvlink-jtag.rules 打包到 AUR 仓库,编写相应的 PKGBUILD
    1. # Maintainer: taotieren
    2. pkgname=rv-link-udev-git
    3. pkgver=0.2.1.r95.g04f3781
    4. pkgrel=1
    5. pkgdesc="A JTAG emulator/debugger for RISC-V micro-controllers that runs on a RISC-V development board (Sipeed Longan Nano for example)."
    6. arch=('any')
    7. url="https://github.com/michahoiting/rv-link"
    8. license=('MulanPSL')
    9. provides=(${pkgname%-git})
    10. conflicts=()
    11. #replaces=(${pkgname})
    12. depends=('libusb')
    13. makedepends=('git')
    14. backup=()
    15. options=('!strip')
    16. #install=${pkgname}.install
    17. source=("${pkgname%-git}::git+${url}.git")
    18. sha256sums=('SKIP')
    19. pkgver() {
    20.     cd "${srcdir}/${pkgname%-git}"
    21.     git describe --long --tags | sed 's/^v//g' | sed 's/\([^-]*-g\)/r\1/;s/-/./g'
    22. }
    23. package() {
    24.     install -Dm0644 "${srcdir}/${pkgname%-git}/drivers/udev/rules.d/99-rvlink-jtag.rules" "${pkgdir}/usr/lib/udev/rules.d/99-rvlink-jtag.rules"
    25. }
    复制代码

    上传至 AUR 仓库:rv-link-udev-git

    通过 AUR 工具安装 99-rvlink-jtag.rules
    1. yay -Syu rv-link-udev-git
    复制代码

    总结 — 填坑至始

    完成 Sipeed Longan Nano RISC-V GD32VF103CBT6
    rv-link 固件的编译
    rv-link 固件的烧录
    rv-link 驱动文件安装
    完成 Sipeed RV-Debugger-BL702

    bflb-mcu-toolpython 打包
    bflb-mcu-tool 烧录固件

    剩下的就是填坑之路。
    GD32VF 单片机芯片及应用-Arch Linux 下 sipeed longan-nano 2 rv-linkrisc-v单片机中文社区(2)





    上一篇:[RISC-V Linux] Arch Linux 更新 nuclei-gcc nuclei-openocd 支持 embedded-studio-risc-v
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条



    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-26 22:59 , Processed in 0.987174 second(s), 49 queries .

    快速回复 返回顶部 返回列表