日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Arch Linux 下 sipeed longan-nano 2 rv-link

發布時間:2023/12/20 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arch Linux 下 sipeed longan-nano 2 rv-link 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

序 – 起因

某天在群里看到有人發 sipeed2022_spring_competition 的活動宣傳圖,如下:

矽速2022春季AIoT挑戰賽

~~矽速(Sipeed)2022春季AIoT挑戰賽萬元大獎等你來拿 ~~
賽題信息:https://github.com/sipeed/sipeed2022_spring_competition
轉發比賽信息到1000人以上相關技術QQ群,500人專業微信群,或專業論壇,
即可到矽速官方店領取 BL702 JTAG+UART 調試小板一塊~
(截圖給客服,僅限第一次轉發到該群有效, sipeed.taobao.com)

重點是可以白嫖一塊 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 wikihttps://wiki.sipeed.com/hardware/zh/longan/Nano/Longan_nano.htmlLongan Nano是基于兆易創新(GigaDevice)的GD32VF103CBT6(RISC-V架構)芯片設計的極簡開發板。開發板將芯片所有IO引出,設計小巧精致,板載Type-C、LCD、SD卡、JTAG等接口,方便廣大學生、工程師、極客愛好者們接觸學習最新一代的 RISC-V處理器。
GD32VF103CBT6 ,基于芯來科技.的Bumblebee內核http://dl.sipeed.com/LONGAN/Nano/DOC/支持 RV32IMAC 指令集及ECLIC 快速中斷功能。內核功耗僅傳統 Cortex-M3 的1/3.
Longan nano 開發工具https://dl.sipeed.com/LONGAN/Nano/Tools/注:Windows 平臺
Longan nano 相關手冊https://dl.sipeed.com/shareURL/LONGAN/Nano/DOC有中英文版本
Longan nano 引腳圖和規格書https://dl.sipeed.com/shareURL/LONGAN/Nano/Spec相關引腳信息
HDK 屏幕資料https://dl.sipeed.com/shareURL/LONGAN/Nano/HDK0.96 inch 80*160 IPS LCD
Blink 閃燈程序https://wiki.sipeed.com/soft/longan/zh/get_started/blink.html在 vscode 使用 pio 插件開發,使用 jlink/sipeed-rv-debugger 工具調試,使用 gd32-dfu (僅供 windows)上位機下載調試,使用 zadig 替換驅動信息。
RV-LINK 原始倉庫(幾年沒更新了)https://gitee.com/zoomdy/RV-LINK用 RISC-V 開發板實現的 RISC-V 仿真器。與其它仿真器不同的是:RV-LINK 通過 USB 串口直接與 GDB 交互,不需要 OpenOCD 之類的中介。
rv-link 第三方倉庫(進行了大量功能新增和優化)https://github.com/michahoiting/rv-linkThis 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) 插件https://platformio.org/platformio-ide打開 VSCode -> 點擊左側擴展 -> 搜索 PlatformIO -> 點擊安裝插件 -> 等待安裝完成 -> 重啟 VSCODE
gd32-dfu-utilshttps://github.com/riscv-mcu/gd32-dfu-utilsDfu-utils GD32 fork. Dfu-util - Device Firmware Upgrade Utilities
gd32-dfu-utils AUR 包https://aur.archlinux.org/packages/gd32-dfu-utilsAUR 的 gd32-dfu-utils 包,做了處理避免和 dfu-utils 包沖突
rv-link-udev-git AUR 包https://aur.archlinux.org/packages/rv-link-udev-gitAUR 的 rv-link 的 udev 文件(驅動文件)
RV-Debugger-BL702https://github.com/sipeed/RV-Debugger-BL702RV-Debugger-BL702 源碼,RV-Debugger-BL702 is an opensource project that implement a JTAG+UART debugger with BL702C-A0.
python-bflb-mcu-toolhttps://aur.archlinux.org/packages/python-bflb-mcu-toolBOUFFALOLAB MCU TOOL
python-bflb-iot-toolhttps://aur.archlinux.org/packages/python-bflb-iot-toolBOUFFALOLAB IOT TOOL
python-bflb-crypto-plushttps://aur.archlinux.org/packages/python-bflb-crypto-plusPyCryptoPlus is an extension to the Python Crypto module (www.pycrypto.org).
Bouffalo Lab Dev Cube For Ubuntuhttps://dev.bouffalolab.com/media/upload/download/BouffaloLabDevCube-1.6.8-linux-x86.tar.gzDev Cube是博流提供的芯片集成開發工具,包含IOT程序下載、MCU程序下載和RF性能測試三大功能。工具提供程序固件啟動時的時鐘,電源,Flash參數等配置,并可根據用戶需求對程序進行加密和簽名,生成應用程序啟動信息文件。工具還可燒寫用戶資源文件,分區表文件以及 EFUSE配置文件等。工具可對Flash進行擦、改、寫
bflb-mcu-toolhttps://pypi.org/project/bflb-mcu-toolBOUFFALOLAB MCU TOOL

根據上面相關信息,大致有點了解后,應該知道如何安裝 git 、 vscode 和 pio 插件 。以下默認已經安裝。

編譯 RV-LINK – 踩踩坑

  • RV-LINK 原始倉庫進行編譯
    • 克隆 RV-LINK 源碼
    git clone https://gitee.com/zoomdy/RV-LINK.git
    • 運行 vscode ,左側找到 pio,單擊后,選擇 打開本地工程,選擇上面 RV-LINK 所在位置
    • 左下角單擊 編譯圖標[?] ,不出意外的話會有如下報錯:
    KeyError: "Invalid board option 'build.ldscript'": File "~/.platformio/penv/lib/site-packages/platformio/builder/main.py", line 179: env.SConscript(item, exports="env") File "~/.platformio/packages/tool-scons/scons-local-4.3.0/SCons/Script/SConscript.py", line 597: return _SConscript(self.fs, *files, **subst_kw) File "~/.platformio/packages/tool-scons/scons-local-4.3.0/SCons/Script/SConscript.py", line 285: exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) File "~/RV-LINK-master/RV-LINK-master/build.py", line 65: LDSCRIPT_PATH = join(PROJ_DIR, "src", "link", "gd32vf103c-start", "RISCV", "gcc", board.get("build.ldscript")) File "~/.platformio/penv/lib/site-packages/platformio/platform/board.py", line 46: raise KeyError("Invalid board option '%s'" % path)

    原因是 build.ldscript 參數發生變化,需要在工程目錄下 plateformio.ini 進行如下修改:

    ; PlatformIO Project Configuration File ; ; Build options: build flags, source filter, extra scripting ; Upload options: custom port, speed and extra flags ; Library options: dependencies, extra library storages ; ; Please visit documentation for the other options and examples ; http://docs.platformio.org/page/projectconf.html[env:sipeed-longan-nano] ; platform = gd32v platform = https://github.com/sipeed/platform-gd32v.git ;framework = gd32vf103-sdk board = sipeed-longan-nano monitor_speed = 115200 upload_protocol = dfu debug_tool = sipeed-rv-debugger board_build.ldscript = GD32VF103xB.lds build_flags = -DGD32VF103C_START-DUSE_STDPERIPH_DRIVER-DUSE_USB_FS-DLINK_LONGAN_NANO-DTARGET_GD32VF103-DAPP_GDB_SERVER-DRVL_ASSERT_EN-MMDextra_scripts = pre:build.py src_filter = +<*>-<.git/>-<.svn/>-<example/>-<examples/>-<test/>-<tests/>-<app/riscv-prober>-<app/test-usb-serial/>-<link/gd32vf103c-start/rvl-link.c>-<link/gd32vf103c-start/rvl-button.c>-<link/gd32vf103c-start/rvl-led.c> -<link/gd32vf103c-start/rvl-jtag.c> -<link/gd32vf103c-start/gd32vf103c_start.c>-<link/gd32vf103c-start/rvl-jtag-inline.h>-<link/rvl-link-stub.c>-<link/gd32vf103c-start/RISCV/gcc/>+<link/gd32vf103c-start/RISCV/gcc/init.c>+<link/gd32vf103c-start/RISCV/gcc/handlers.c>+<link/gd32vf103c-start/RISCV/gcc/entry.S>+<link/gd32vf103c-start/RISCV/gcc/start.S>-<link/gd32vf103c-start/RISCV/stubs>+<link/gd32vf103c-start/RISCV/stubs/sbrk.c>-<link/gd32vf103c-start/GD32VF103_standard_peripheral/>+<link/gd32vf103c-start/GD32VF103_standard_peripheral/system_gd32vf103.c>+<link/gd32vf103c-start/GD32VF103_standard_peripheral/Source/gd32vf103_gpio.c>+<link/gd32vf103c-start/GD32VF103_standard_peripheral/Source/gd32vf103_rcu.c>+<link/gd32vf103c-start/GD32VF103_standard_peripheral/Source/gd32vf103_timer.c>+<link/gd32vf103c-start/GD32VF103_standard_peripheral/Source/gd32vf103_eclic.c>+<link/gd32vf103c-start/GD32VF103_standard_peripheral/Source/gd32vf103_exti.c>+<link/gd32vf103c-start/GD32VF103_standard_peripheral/Source/gd32vf103_pmu.c>
    • 再此編譯即可生成固件。
    • 由于此 RV-LINK 停更兩年以上,可以選擇自己二次開發或使用第三方開發的其他 RV-LINK
  • rv-link 第三方倉庫編譯
    • 克隆 rv-link 源碼
    git clone https://github.com/michahoiting/rv-link.git
    • 運行 vscode ,左側找到 pio,單擊后,選擇 打開本地工程,選擇上面 RV-LINK 所在位置
    • 左下角單擊 編譯圖標[?] ,不出意外的話編譯通過

    燒錄固件 – gd32-dfu-utils

  • 發現 linux 沒有 gd32 的 dfu 刷固件工具,于是打包了 gd32-dfu-utils 來給 arch 系用戶使用,打包的 PKGBUILD 文件內容如下
  • # Maintainer: taotieren <admin@taotieren.com>pkgname=gd32-dfu-utils pkgver=0.9 pkgrel=2 epoch= pkgdesc="Dfu-utils GD32 fork. Dfu-util - Device Firmware Upgrade Utilities" arch=('x86_64') url="https://github.com/riscv-mcu/gd32-dfu-utils" license=('GPLv2') groups=() depends=('libusb') makedepends=() checkdepends=() optdepends=('python: dfuse-pack tool support''python-intelhex: Intel HEX file format support' ) provides=("GD32-dfu-util") conflicts=() replaces=() backup=() options=('!strip') install= changelog= source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz") noextract=() sha256sums=('6312461aab3650b0be8648a7afb9bbf2e63328defe80b25b6c2c85973b39f8f5') #validpgpkeys=()build() {cd "${srcdir}/${pkgname}-${pkgver}"./autogen.sh./configure --prefix=/usrmake }package() {cd $pkgname-$pkgvermake DESTDIR="$pkgdir" installinstall -Dm755 dfuse-pack.py "$pkgdir"/usr/bin/dfuse-packinstall -Dm644 doc/40-dfuse.rules "$pkgdir"/usr/lib/udev/rules.d/40-gd32-dfuse.rulescd "$pkgdir"/usr/bin/for var in *; do mv "$var" "gd32-${var}"; donerm -rf "$pkgdir"/usr/share }
    • for var in *; do mv "$var" "gd32-${var}"; done 將 dfu 的工具重命名成 gb32-開頭,避免和 dfu 工具沖突,正常來說需要打 patch 暫時還沒寫,后續和 gd32-dfu-utils 維護者溝通下,是他那邊修改還是我這邊打包的時候打 patch

    • 已經上傳到 AUR 倉庫 gd32-dfu-utils

  • 命令行刷機操作
    • 準備操作
    • 按住 BOOT0 按鈕,然后按下 RESET 按鈕,釋放 RESET 按鈕,最后釋放 BOOT0 按鈕,進入 DFU 模式
    # 通過 lsusb 或者 GD32 的 PID:VID 信息 ? lsusb |grep GD Bus 003 Device 052: ID 28e9:0189 GDMicroelectronics GD32 DFU Bootloader (Longan Nano)# 命令行刷寫固件,用法和 dfu 一致,其他 dfu 用戶可以看 dfu 的幫助文檔或其他用戶的分享 ? gd32-dfu-util -d 28e9:0189 -a 0 --dfuse-address 0x08000000:leave -D rvlink_fw_sipeed-longan-nano.hex dfu-util 0.9Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2016 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to http://sourceforge.net/p/dfu-util/tickets/gd32-dfu-util: Invalid DFU suffix signature gd32-dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! Opening DFU capable USB device... ID 28e9:0189 Run-time device DFU version 011a Claiming USB DFU Interface... Setting Alternate Setting #0 ... Determining device status: state = dfuIDLE, status = 0 dfuIDLE, continuing DFU mode device DFU version 011a Device returned transfer size 2048 GD32 flash memory access detected Device model: GD32VF103CB Memory segment (0x08000000 - 0801ffff)(rew) Erase size 1024, page count 128 Downloading to address = 0x08000000, size = 141046 gd32-dfu-util: Last page at 0x080226f5 is not writeable# 通過 lsusb 確認刷入的固件是否別識別 ? lsusb |grep GD Bus 003 Device 053: ID 28e9:018a GDMicroelectronics Longan Nano
  • 其他的可能的坑
    • 可能會踩的坑 Ubuntu 等需要將 $USER 加到 串口組(uucp) 里面(新版本一般是 uucp ,舊版本可能是其他的,使用 ls -lsh /dev/ttyUSB* 查看設備所在組。如果在 Linux 下調試時遇到串口不通或者提示沒權限,把用戶加入串口設備組里面,后重啟電腦試試。示例:
    # 查看 串口設備組 ? ls -lash /dev/ttyS0 0 crwxrwxrwx 1 root uucp 4, 64 Feb 15 19:09 /dev/ttyS0 ? sudo gpasswd -a `whoami` uucp [sudo] taotieren 的密碼: 正在將用戶“taotieren”加入到“uucp”組中 ? groups `whoami` wheel uucp vboxusers taotieren ? reboot # 如果添加 uucp 后還是不能使用,嘗試安裝 uucp 軟件包,以 Arch 為例,其他 Linux 根據設備組確認 ? yay -Syu uucp

    固件燒錄 – RV-Debugger-BL702

  • Bouffalo Lab Dev Cube 我這邊在 Arch 下運行有一些坑(內置的軟件版本過低,和 Arch 最新的包不兼容),無法運行。
  • 在 Bouffalo 官網找到 bflb-mcu-tool 的 python 源碼包,編寫 PKGBUILD 進行打包操作
  • # Maintainer: taotieren <admin@taotieren.com>pkgname=python-bflb-mcu-tool _name=${pkgname#python-} pkgver=1.6.8 pkgrel=1 epoch= pkgdesc="BOUFFALOLAB MCU TOOL" arch=('any') url="https://pypi.org/project/bflb-mcu-tool" license=('unkown') groups=() depends=('python' ) makedepends=('python-build' 'python-installer' 'python-wheel') checkdepends=() optdepends=() provides=() conflicts=() replaces=() backup=() options=('!strip') install= changelog= source=("${_name}-${pkgver}.tar.gz::https://files.pythonhosted.org/packages/a5/57/ab4a45ca3e7736c415f28502db6d897256332521025a52872b534d288207/$_name-$pkgver.tar.gz") noextract=() sha256sums=('675f24619aded8f1313bde5c0cb2da5100e519c7ec5234b3b2481b66e5aa8bcc') #validpgpkeys=()build() {cd "${srcdir}/${_name}-${pkgver}"python -m build --wheel --no-isolation }package() {cd "${srcdir}/${_name}-${pkgver}"python -m installer --destdir="${pkgdir}" dist/*.whl }
    • 上傳到 AUR 倉庫:python-bflb-mcu-tool

    • 安裝 python-bflb-mcu-tool

      yay -S python-bflb-mcu-tool
    • 博流還有其他 python 包,也一并打包了,需要的話可以自行安裝。

      # BOUFFALOLAB IOT TOOL yay -S python-bflb-iot-tool # PyCryptoPlus is an extension to the Python Crypto module (www.pycrypto.org). yay -S python-bflb-crypto-plus
  • bflb-mcu-tool 固件燒錄操作
  • # Windows: # 設備管理器確認 bl702 實際串口號 .\bflb_mcu_tool.exe --chipname=bl702 --port=COM9 --xtal=32M --firmware="main.bin"# Linux: # lsusb 獲取 bl702 的 usb 信息,確認 bl702 實際串口號 # 通過軟件包安裝后可以直接使用 bflb_mcu_tool ,如果是手動編譯或者其他方式,自己設置運行路徑即可。 # 建議參考前面的 AUR 中 python 編譯和打包的操作,先將其打包成 whl 包,再用 python 安裝 whl 包 bflb_mcu_tool --chipname=bl702 --port=ttyUSB1 --xtal=32M --firmware="main.bin"

    安裝驅動 – rv-link-udev

  • 安裝 rv-link 里面的 99-rvlink-jtag.rules
  • # 手動安裝 99-rvlink-jtag.rules 到系統的 /etc/udev/rules.d/99-rvlink-jtag.rules # 如果打包的話安裝至 /usr/lib/udev/rules.d/99-rvlink-jtag.rules sudo install -Dm0644 "rv-link/drivers/udev/rules.d/99-rvlink-jtag.rules" "/usr/lib/udev/rules.d/99-rvlink-jtag.rules" 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
  • # Maintainer: taotieren <admin@taotieren.com>pkgname=rv-link-udev-git pkgver=0.2.1.r95.g04f3781 pkgrel=1 pkgdesc="A JTAG emulator/debugger for RISC-V micro-controllers that runs on a RISC-V development board (Sipeed Longan Nano for example)." arch=('any') url="https://github.com/michahoiting/rv-link" license=('MulanPSL') provides=(${pkgname%-git}) conflicts=() #replaces=(${pkgname}) depends=('libusb') makedepends=('git') backup=() options=('!strip') #install=${pkgname}.install source=("${pkgname%-git}::git+${url}.git") sha256sums=('SKIP')pkgver() {cd "${srcdir}/${pkgname%-git}"git describe --long --tags | sed 's/^v//g' | sed 's/\([^-]*-g\)/r\1/;s/-/./g' }package() {install -Dm0644 "${srcdir}/${pkgname%-git}/drivers/udev/rules.d/99-rvlink-jtag.rules" "${pkgdir}/usr/lib/udev/rules.d/99-rvlink-jtag.rules" }
    • 上傳至 AUR 倉庫:rv-link-udev-git

    • 通過 AUR 工具安裝 99-rvlink-jtag.rules

      yay -Syu rv-link-udev-git

    總結 – 填坑至始

  • 完成 Sipeed Longan Nano RISC-V GD32VF103CBT6

    • rv-link 固件的編譯
    • rv-link 固件的燒錄
    • rv-link 驅動文件安裝
  • 完成 Sipeed RV-Debugger-BL702

    • bflb-mcu-tool 的 python 打包
    • bflb-mcu-tool 燒錄固件
  • 剩下的就是填坑之路。

  • 總結

    以上是生活随笔為你收集整理的Arch Linux 下 sipeed longan-nano 2 rv-link的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。