內容目錄

6. WSLg 嵌入式工程-Nuttx篇

之前的 Nuttx-macOS實戰 有使用 multipass 的方式介紹。WSLg 在 sim:lvgl-lcd 項目可以無縫看到 LVGL的圖形使用。

Nuttx項目更新了, 模擬器的 lvgl demo 項目拆分爲 lvgl_fb 和 lvgl_lcd 裝置。WGLg 是 RDP顯示,只能用 sim:lvgl_lcd。

6.1 編譯環境:

sudo apt install bison flex gettext texinfo libncurses5-dev libncursesw5-dev gperf automake libtool pkg-config build-essential gperf genromfs libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux curl

6.2 KConfig front-end:

sudo apt install kconfig-frontends

6.3 arm tools

sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi

6.4 下载 NuttX

mkdir ~/nuttxspace
cd ~/nuttxspace
git clone https://github.com/apache/incubator-nuttx.git nuttx
git clone https://github.com/apache/incubator-nuttx-apps apps

6.5 查看可选编译项目

cd nuttx
./tools/configure.sh -L | less

6.6 编译测试 sim:lvgl_lcd

./tools/configure.sh sim:lvgl_lcd
make menuconfig
make
./nuttx

6.7 编译测试 stm32f429i-disco 板

  • 安裝 STM MCU需要的開發工具:
sudo apt-get install automake bison build-essential flex gcc-arm-none-eabi gperf git libncurses5-dev libtool libusb-dev libusb-1.0.0-dev pkg-config kconfig-frontends openocd
  • Powershell 管理員模式下,查看 stlink 位置:
usbipd wsl list
BUSID  VID:PID    DEVICE                                                        STATE
2-4    0483:374b  ST-Link Debug, USB 大容量存储设备, USB 串行设备 (COM6)        Not attached
。。。
  • Powershell 管理員模式下,將 stlink 接到 WSL:
usbipd wsl attach -b 2-4
若要能在wsl重啓后重連到 wsl,添加 `-a` 參數。
  • 查看Nuttx 已有 429i工程:
 ./tools/configure.sh -L | grep 429i
  stm32f429i-disco:highpri
  stm32f429i-disco:adc
  stm32f429i-disco:fb
  stm32f429i-disco:nxhello
  stm32f429i-disco:usbmsc
  stm32f429i-disco:usbnsh
  stm32f429i-disco:nxwm
  stm32f429i-disco:lvgl
  stm32f429i-disco:nsh
  stm32f429i-disco:extflash
  • 選 stm32f429i-disco:lvgl :
make distclean
./tools/configure.sh stm32f429i-disco:lvgl
make menuconfig
  • 編譯:
make
  • 透過 st-flash 燒錄:
st-flash --connect-under-reset  write nuttx.bin 0x8000000
#st-flash reset
  • screen 進入 nsh 操作開發板:
# screen 進入 nuttx shell. 板上 stlink需要設置 115200bps
screen /dev/ttyACM0 115200
# 離開 screen
[Ctrl+A K]
  • screen 進入 nsh 操作開發板:
# screen 進入 nuttx shell. 板上 stlink需要設置 115200bps
screen /dev/ttyACM0 115200
# 離開 screen
[Ctrl+A K]
  • 查看有哪些app,運行 lvgldemo:
nsh> ?
help usage:  help [-v] [<cmd>]

    .         break     dd        exit      ls        ps        source    umount
    [         cat       df        false     mkdir     pwd       test      unset
    ?         cd        dmesg     free      mkrd      rm        time      uptime
    alias     cp        echo      help      mount     rmdir     true      usleep
    unalias   cmp       env       hexdump   mv        set       truncate  xd
    basename  dirname   exec      kill      printf    sleep     uname

Builtin Apps:
    lvgldemo  tc        fb        sh        nsh
nsh> lvgldemo

我就不拍照了。。。

使用 openocd 燒錄

apt 取得的 openocd 找不到 interface 目錄。。。 我把interface 位置link到 nuttx下:

ln -s /usr/share/openocd/scripts/interface interface

然後:

openocd -f /usr/share/openocd/scripts/interface/stlink-v2-1.cfg -f target/stm32f4x.cfg -c init -c "reset halt" -c "flash write_image erase nuttx.bin 0x08000000" 

OK…

6.8 Debug

參考 https://nuttx.apache.org/docs/latest/quickstart/debugging.html 對 Nuttx debug.

Windows Terminal 開四個分頁:

    1. 用一個 Powershell 管理員模式下把 stlink (BUSID: 2-4)讓給 WSL: usbipd wsl attach -b 2-4 -a
    1. 用一個 ubuntu shell 跑 openocd:openocd -f interface/stlink-v2-1.cfg -f target/stm32f4x.cfg
    1. 用一個 ubuntu shell 跑 gdb: gdb-multiarch nuttx
    (gdb) target extended-remote :3333
    
    1. 用一個 ubuntu shell 跑 screen 運行 Nuttx的 nsh shell:screen /dev/ttyACM0 115200

至於用 IDE (如 VSCode)來 debug,可以考量直接在Windows下執行 openocd。

最後修改日期: 2023 年 3 月 29 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。