內容目錄
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 開四個分頁:
-
- 用一個 Powershell 管理員模式下把 stlink (BUSID: 2-4)讓給 WSL:
usbipd wsl attach -b 2-4 -a。
- 用一個 Powershell 管理員模式下把 stlink (BUSID: 2-4)讓給 WSL:
-
- 用一個 ubuntu shell 跑 openocd:
openocd -f interface/stlink-v2-1.cfg -f target/stm32f4x.cfg。
- 用一個 ubuntu shell 跑 openocd:
-
- 用一個 ubuntu shell 跑 gdb:
gdb-multiarch nuttx。
(gdb) target extended-remote :3333 - 用一個 ubuntu shell 跑 gdb:
-
- 用一個 ubuntu shell 跑 screen 運行 Nuttx的 nsh shell:
screen /dev/ttyACM0 115200。
- 用一個 ubuntu shell 跑 screen 運行 Nuttx的 nsh shell:
至於用 IDE (如 VSCode)來 debug,可以考量直接在Windows下執行 openocd。
留言