开源RTOS(实时操作系统):nuttx 编译
开源RTOS(实时操作系统):nuttx 编译
手册:Installing — NuttX latest documentation
源码:GitHub - apache/nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS)
Installing
The first step to get started with NuttX is to install a series of required tools, a toolchain for the architecture you will be working with and, finally, download NuttX source code itself.
Prerequisites
First, install the following set of system dependencies according to your Operating System:
Linux (debian based)Linux (Fedora / RPM based)macOSWindows / WSLWindows/Cygwin
Run the following command to install packages:
$ sudo apt install \ $ bison flex gettext texinfo libncurses5-dev libncursesw5-dev xxd \ $ git gperf automake libtool pkg-config build-essential gperf genromfs \ $ libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \ $ libexpat1-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
KConfig frontend
NuttX configuration system uses KConfig which is exposed via a series of interactive menu-based frontends, part of the kconfig-frontends
package. Depending on your OS you may use a precompiled package or you will have to build it from source, which is available in the NuttX tools repository:
Ubuntu 20.04 LTS and laterUbuntu 18.04 LTS and earlierFedoramacOS
$ sudo apt install kconfig-frontends
NuttX also supports kconfiglib by default, which is a Kconfig tool implemented in Python 2/3. Compared with kconfig-frontends
, kconfiglib provides NuttX with the possibility of multi-platform support(configure NuttX in Windows native/Visual Studio), and also kconfiglib
has a stronger Kconfig syntax check, this will help developers to avoid some Kconfig syntax errors. Install kconfiglib via following command:
sudo apt install python3-kconfiglib
If you are a working on Windows, which also need the support of windows-curses:
pip install windows-curses
Toolchain
To build Apache NuttX you need the appropriate toolchain according to your target platform. Some Operating Systems such as Linux distribute toolchains for various architectures. This is usually an easy choice however you should be aware that in some cases the version offered by your OS may have problems and it may be better to use a widely used build from another source.
The following example shows how to install a toolchain for ARM architecture:
Ubuntu (deb)macOSFrom arm.com
$ sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
Tip
There are hints on how to get the latest tool chains for most supported architectures in the Apache NuttX CI helper script and Docker container
Todo
Required toolchain should be part of each arch documentation (see relevant issue).
Download NuttX
Apache NuttX is actively developed on GitHub. There are two main repositories, nuttx and apps, where the latter is technically optional (but recommended for complete set of features). If you intend to contribute changes, you need the absolute latest version or you simply prefer to work using git, you should clone these repositories (recommended). Otherwise you can choose to download any stable release archive.
Clone git repositoriesDownload stable release
$ mkdir nuttxspace $ cd nuttxspace $ git clone https://github.com/apache/nuttx.git nuttx $ git clone https://github.com/apache/nuttx-apps apps
The development source code is also available as a compressed archive, should you need it:
$ mkdir nuttxspace $ cd nuttxspace $ curl -L https://github.com/apache/nuttx/tarball/master -o nuttx.tar.gz $ curl -L https://github.com/apache/nuttx-apps/tarball/master -o apps.tar.gz $ tar zxf nuttx.tar.gz --one-top-level=nuttx --strip-components 1 $ tar zxf apps.tar.gz --one-top-level=apps --strip-components 1
There are also .zip
archives available (useful for Windows users): just replace tarball
with zipball
.
在Windows10的WSL Ubuntu22.04环境下实践安装Nuttx
首先进入WSL
安装基本库
sudo apt install \
bison flex gettext texinfo libncurses5-dev libncursesw5-dev xxd \
git gperf automake libtool pkg-config build-essential gperf genromfs \
libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \
libexpat1-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
安装KConfig frontend
sudo apt install kconfig-frontends
安装工具链
sudo apt install gcc-arm-none-eabi binutils-arm-none-eabi
这个占用空间较大,需要2.5G空间
下载源代码
mkdir nuttxspace
cd nuttxspace
git clone https://github.com/apache/nuttx.git nuttx
git clone https://github.com/apache/nuttx-apps apps
如果github抽风,可以使用镜像加速
使用make进行编译
初始化配置
cd nuttx
./tools/configure.sh -L | less
哇塞,这个支持的实在太多了!光esp的就这么多:
esp32c3-devkit:efuseesp32c3-devkit:watchdogesp32c3-devkit:pwmesp32c3-devkit:gdbstubesp32c3-devkit:moduleesp32c3-devkit:watcheresp32c3-devkit:wifiesp32c3-devkit:romfsesp32c3-devkit:ticklessesp32c3-devkit:coremarkesp32c3-devkit:sotestesp32c3-devkit:bmp180esp32c3-devkit:randomesp32c3-devkit:rtcesp32c3-devkit:bleesp32c3-devkit:twaiesp32c3-devkit:ostestesp32c3-devkit:usbconsoleesp32c3-devkit:autopmesp32c3-devkit:oneshotesp32c3-devkit:pmesp32c3-devkit:knshesp32c3-devkit:gpioesp32c3-devkit:nvcfgdataesp32c3-devkit:sta_softapesp32c3-devkit:nshesp32c3-devkit:lvglesp32c3-devkit:timeresp32c3-devkit:mcuboot_slot_confirmesp32c3-devkit:cxxesp32c3-devkit:spiflashesp32c3-devkit:cryptoesp32c3-devkit:uidesp32c3-devkit:elfesp32c3-devkit:adcesp32c3-devkit-rust-1:nshesp32c3-devkit-rust-1:brickmatchesp32h2-devkit:i2cesp32h2-devkit:efuseesp32h2-devkit:watchdogesp32h2-devkit:pwmesp32h2-devkit:timersesp32h2-devkit:ticklessesp32h2-devkit:i2scharesp32h2-devkit:bmp180esp32h2-devkit:spiesp32h2-devkit:randomesp32h2-devkit:rtcesp32h2-devkit:buttonsesp32h2-devkit:twaiesp32h2-devkit:ostestesp32h2-devkit:qencoderesp32h2-devkit:captureesp32h2-devkit:usbconsoleesp32h2-devkit:motoresp32h2-devkit:gpioesp32h2-devkit:nshesp32h2-devkit:temperature_sensoresp32h2-devkit:rmtesp32h2-devkit:spiflashesp32h2-devkit:sdmesp32h2-devkit:mcuboot_nshesp32h2-devkit:adcesp32c3-xiao:wifiesp32c3-xiao:bleesp32c3-xiao:usbnshesp32c3-xiao:gpioesp32c3-xiao:nshesp32c3-generic:i2cesp32c3-generic:efuseesp32c3-generic:watchdogesp32c3-generic:pwmesp32c3-generic:timersesp32c3-generic:nimbleesp32c3-generic:wifiesp32c3-generic:ticklessesp32c3-generic:i2scharesp32c3-generic:bmp180esp32c3-generic:spiesp32c3-generic:randomesp32c3-generic:rtcesp32c3-generic:buttonsesp32c3-generic:bleesp32c3-generic:twaiesp32c3-generic:ostestesp32c3-generic:usbconsoleesp32c3-generic:gpioesp32c3-generic:sta_softapesp32c3-generic:nshesp32c3-generic:temperature_sensoresp32c3-generic:rmtesp32c3-generic:spiflashesp32c3-generic:sdmesp32c3-generic:mcuboot_nshesp32c3-generic:adcesp32c6-devkitm:i2cesp32c6-devkitm:efuseesp32c6-devkitm:watchdogesp32c6-devkitm:pwmesp32c6-devkitm:timersesp32c6-devkitm:wifiesp32c6-devkitm:ticklessesp32c6-devkitm:i2scharesp32c6-devkitm:bmp180esp32c6-devkitm:spiesp32c6-devkitm:randomesp32c6-devkitm:rtcesp32c6-devkitm:buttonsesp32c6-devkitm:spislvesp32c6-devkitm:twaiesp32c6-devkitm:ostestesp32c6-devkitm:usbconsoleesp32c6-devkitm:gpioesp32c6-devkitm:sta_softapesp32c6-devkitm:nshesp32c6-devkitm:rmtesp32c6-devkitm:spiflashesp32c6-devkitm:mcuboot_nshesp32c6-devkitc:i2cesp32c6-devkitc:efuseesp32c6-devkitc:watchdogesp32c6-devkitc:pwmesp32c6-devkitc:timersesp32c6-devkitc:mpu60x0esp32c6-devkitc:wifiesp32c6-devkitc:ticklessesp32c6-devkitc:i2scharesp32c6-devkitc:bmp180esp32c6-devkitc:spiesp32c6-devkitc:randomesp32c6-devkitc:rtcesp32c6-devkitc:buttonsesp32c6-devkitc:spislvesp32c6-devkitc:twaiesp32c6-devkitc:ostestesp32c6-devkitc:qencoderesp32c6-devkitc:captureesp32c6-devkitc:usbconsoleesp32c6-devkitc:motoresp32c6-devkitc:gpioesp32c6-devkitc:sta_softapesp32c6-devkitc:nshesp32c6-devkitc:temperature_sensoresp32c6-devkitc:rmtesp32c6-devkitc:spiflashesp32c6-devkitc:sdmesp32c6-devkitc:mcuboot_nshesp32c6-devkitc:adcesp32c6-xiao:wifiesp32c6-xiao:usbnshesp32c6-xiao:gpioesp32c6-xiao:nshesp32s3-eye:i2cesp32s3-eye:wifiesp32s3-eye:usbnshesp32s3-eye:gpioesp32s3-eye:nshesp32s3-eye:lcdesp32s3-lcd-ev:buttonsesp32s3-lcd-ev:ws2812esp32s3-lcd-ev:audioesp32s3-lcd-ev:nshesp32s3-lcd-ev:lcdesp32s3-lcd-ev:lvglesp32s3-lhcbit:usbnshesp32s3-korvo-2:rtptoolsesp32s3-korvo-2:sdmmcesp32s3-korvo-2:audioesp32s3-korvo-2:nshesp32s3-box:lvgl-3esp32s3-box:buttonsesp32s3-box:nshesp32s3-box:touchscreenesp32s3-box:lvglesp32s3-devkit:psram_octalesp32s3-devkit:i2cesp32s3-devkit:watchdogesp32s3-devkit:pwmesp32s3-devkit:nxlooperesp32s3-devkit:usb_deviceesp32s3-devkit:wifiesp32s3-devkit:pythonesp32s3-devkit:qemu_toywasmesp32s3-devkit:sdmmcesp32s3-devkit:ticklessesp32s3-devkit:psram_quadesp32s3-devkit:ksta_softapesp32s3-devkit:coremarkesp32s3-devkit:sotestesp32s3-devkit:i2scharesp32s3-devkit:spiesp32s3-devkit:randomesp32s3-devkit:smpesp32s3-devkit:qemu_openethesp32s3-devkit:rtcesp32s3-devkit:buttonsesp32s3-devkit:bleesp32s3-devkit:twaiesp32s3-devkit:qencoderesp32s3-devkit:audioesp32s3-devkit:captureesp32s3-devkit:txtableesp32s3-devkit:usbnshesp32s3-devkit:psram_usrheapesp32s3-devkit:oneshotesp32s3-devkit:adbesp32s3-devkit:pmesp32s3-devkit:knshesp32s3-devkit:motoresp32s3-devkit:blewifiesp32s3-devkit:gpioesp32s3-devkit:sta_softapesp32s3-devkit:nshesp32s3-devkit:usbmscesp32s3-devkit:qemu_debugesp32s3-devkit:temperature_sensoresp32s3-devkit:timeresp32s3-devkit:rmtesp32s3-devkit:eth_lan9250esp32s3-devkit:stackesp32s3-devkit:cxxesp32s3-devkit:spiflashesp32s3-devkit:sdmesp32s3-devkit:toywasmesp32s3-devkit:mcuboot_nshesp32s3-devkit:elfesp32s3-devkit:fastbootesp32s3-devkit:adcesp32s3-xiao:usbnshesp32s3-xiao:comboesp32s3-meadow:usbnshesp32s3-meadow:nshlckfb-szpi-esp32s3:pwmlckfb-szpi-esp32s3:usb_devicelckfb-szpi-esp32s3:pca9557lckfb-szpi-esp32s3:txtablelckfb-szpi-esp32s3:adblckfb-szpi-esp32s3:gpiolckfb-szpi-esp32s3:nshlckfb-szpi-esp32s3:psramlckfb-szpi-esp32s3:lcdlckfb-szpi-esp32s3:lvgllckfb-szpi-esp32s3:fastbootesp32-wrover-kit:nxesp32-wrover-kit:wifiesp32-wrover-kit:ledsesp32-wrover-kit:lcd1602esp32-wrover-kit:bmp180esp32-wrover-kit:rtcesp32-wrover-kit:buttonsesp32-wrover-kit:autopmesp32-wrover-kit:oneshotesp32-wrover-kit:luaesp32-wrover-kit:mmcsdspiesp32-wrover-kit:gpioesp32-wrover-kit:nshesp32-wrover-kit:lvglesp32-devkitc:efuseesp32-devkitc:watchdogesp32-devkitc:ms5611esp32-devkitc:pwmesp32-devkitc:nxlooperesp32-devkitc:mcuboot_update_agentesp32-devkitc:modbusesp32-devkitc:softapesp32-devkitc:moduleesp32-devkitc:nxdiagesp32-devkitc:watcheresp32-devkitc:wifiesp32-devkitc:ticklessesp32-devkitc:coremarkesp32-devkitc:mcp2515esp32-devkitc:wifishareesp32-devkitc:ledsesp32-devkitc:sotestesp32-devkitc:mqttcesp32-devkitc:i2scharesp32-devkitc:bmp280esp32-devkitc:max6675esp32-devkitc:randomesp32-devkitc:smpesp32-devkitc:qemu_openethesp32-devkitc:rtcesp32-devkitc:buttonsesp32-devkitc:wamr_wasi_debugesp32-devkitc:bleesp32-devkitc:twaiesp32-devkitc:ostestesp32-devkitc:qencoderesp32-devkitc:audioesp32-devkitc:captureesp32-devkitc:dacesp32-devkitc:autopmesp32-devkitc:snakeesp32-devkitc:psram_usrheapesp32-devkitc:oneshotesp32-devkitc:pmesp32-devkitc:knshesp32-devkitc:motoresp32-devkitc:wifi_smpesp32-devkitc:blewifiesp32-devkitc:espnowesp32-devkitc:sta_softapesp32-devkitc:nshesp32-devkitc:psramesp32-devkitc:timeresp32-devkitc:mcuboot_slot_confirmesp32-devkitc:rmtesp32-devkitc:cxxesp32-devkitc:spiflashesp32-devkitc:sdmesp32-devkitc:wifinshesp32-devkitc:mcuboot_nshesp32-devkitc:elfesp32-devkitc:brickmatchesp32-devkitc:adcttgo_lora_esp32:sx127xttgo_lora_esp32:nshttgo_t_display_esp32:lvgl_fbttgo_t_display_esp32:nshttgo_t_display_esp32:lvgl_lcdesp32-audio-kit:wifiesp32-audio-kit:audioesp32-audio-kit:nshesp32-pico-kit:nshesp32-2432S028:nshesp32-2432S028:lvglesp32-ethernet-kit:ethernetesp32-ethernet-kit:wifiesp32-ethernet-kit:rtcesp32-ethernet-kit:buttonsesp32-ethernet-kit:autopmesp32-ethernet-kit:oneshotesp32-ethernet-kit:nshesp32-sparrow-kit:wifiesp32-sparrow-kit:mqttcesp32-sparrow-kit:nshesp32-lyrat:nxrecorderesp32-lyrat:rtptoolsesp32-lyrat:wifiesp32-lyrat:buttonsesp32-lyrat:audioesp32-lyrat:mmcsdspiesp32-lyrat:nshesp32s2-kaluga-1:i2cesp32s2-kaluga-1:watchdogesp32s2-kaluga-1:nxlooperesp32s2-kaluga-1:rtcesp32s2-kaluga-1:buttonsesp32s2-kaluga-1:twaiesp32s2-kaluga-1:audioesp32s2-kaluga-1:nshesp32s2-kaluga-1:lvgl_ili9341esp32s2-kaluga-1:lvgl_st7789esp32s2-saola-1:i2cesp32s2-saola-1:watchdogesp32s2-saola-1:pwmesp32s2-saola-1:nxlooperesp32s2-saola-1:wifiesp32s2-saola-1:coremarkesp32s2-saola-1:sotestesp32s2-saola-1:i2scharesp32s2-saola-1:randomesp32s2-saola-1:rtcesp32s2-saola-1:buttonsesp32s2-saola-1:twaiesp32s2-saola-1:ostestesp32s2-saola-1:qencoderesp32s2-saola-1:audioesp32s2-saola-1:oneshotesp32s2-saola-1:gpioesp32s2-saola-1:sta_softapesp32s2-saola-1:nshesp32s2-saola-1:temperature_sensoresp32s2-saola-1:timeresp32s2-saola-1:rmtesp32s2-saola-1:cxxesp32s2-saola-1:spiflashesp32s2-saola-1:sdmesp32s2-saola-1:mcuboot_nshesp32s2-saola-1:adc
列出所有的esp32c3
./tools/configure.sh -L |grep esp32c3esp32c3-devkit:efuseesp32c3-devkit:watchdogesp32c3-devkit:pwmesp32c3-devkit:gdbstubesp32c3-devkit:moduleesp32c3-devkit:watcheresp32c3-devkit:wifiesp32c3-devkit:romfsesp32c3-devkit:ticklessesp32c3-devkit:coremarkesp32c3-devkit:sotestesp32c3-devkit:bmp180esp32c3-devkit:randomesp32c3-devkit:rtcesp32c3-devkit:bleesp32c3-devkit:twaiesp32c3-devkit:ostestesp32c3-devkit:usbconsoleesp32c3-devkit:autopmesp32c3-devkit:oneshotesp32c3-devkit:pmesp32c3-devkit:knshesp32c3-devkit:gpioesp32c3-devkit:nvcfgdataesp32c3-devkit:sta_softapesp32c3-devkit:nshesp32c3-devkit:lvglesp32c3-devkit:timeresp32c3-devkit:mcuboot_slot_confirmesp32c3-devkit:cxxesp32c3-devkit:spiflashesp32c3-devkit:cryptoesp32c3-devkit:uidesp32c3-devkit:elfesp32c3-devkit:adcesp32c3-devkit-rust-1:nshesp32c3-devkit-rust-1:brickmatchesp32c3-xiao:wifiesp32c3-xiao:bleesp32c3-xiao:usbnshesp32c3-xiao:gpioesp32c3-xiao:nshesp32c3-generic:i2cesp32c3-generic:efuseesp32c3-generic:watchdogesp32c3-generic:pwmesp32c3-generic:timersesp32c3-generic:nimbleesp32c3-generic:wifiesp32c3-generic:ticklessesp32c3-generic:i2scharesp32c3-generic:bmp180esp32c3-generic:spiesp32c3-generic:randomesp32c3-generic:rtcesp32c3-generic:buttonsesp32c3-generic:bleesp32c3-generic:twaiesp32c3-generic:ostestesp32c3-generic:usbconsoleesp32c3-generic:gpioesp32c3-generic:sta_softapesp32c3-generic:nshesp32c3-generic:temperature_sensoresp32c3-generic:rmtesp32c3-generic:spiflashesp32c3-generic:sdmesp32c3-generic:mcuboot_nshesp32c3-generic:adc
配置 esp32c3-devkit:nsh
cd nuttx
./tools/configure.sh -l esp32c3-devkit:nsh
完成显示:
configuration written to .config
make menuconfig
cd nuttx
make menuconfig
出现菜单界面
对于ammy 也就是Ubuntu 22.04版本,需要加上参数make CONFIG_LIBM=y
在library Routines里加上本地math库的支持:
选择-> Library Routines (库函数) -> Select math library (Math library from NuttX) -> Math library from NuttX
设好后,保存退出
make
make
make输出
make
Create version.h
LN: platform/board to /home/skywalk/github/nuttxspace/apps/platform/dummy
Register: dd
Register: dumpstack
Register: nsh
Register: sh
CPP: /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/esp32c3_rom.ld-> /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/esp32c3_rom.ld.tmCPP: /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/flat_memory.ld-> /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/flat_memory.ld.tmCPP: /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/legacy_sections.ld-> /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/legacy_sectioLD: nuttx
Memory region Used Size Region Size %age Used
iram0_0_seg: 6624 B 321296 B 2.06%
irom0_0_seg: 107028 B 4194272 B 2.55%
dram0_0_seg: 13792 B 321296 B 4.29%
drom0_0_seg: 147892 B 4194272 B 3.53%
rtc_seg: 0 GB 8 KB 0.00%
CP: nuttx.hex
MKIMAGE: ESP32-C3 binary
esptool.py not found. Please run: 'pip install esptool'
Run make again to create the nuttx.bin image.
make: *** [tools/Unix.mk:559: nuttx] Error 1
按照提示,安装esptool
pip install esptool
然后再make
输出:
LD: nuttx
Memory region Used Size Region Size %age Usediram0_0_seg: 6624 B 321296 B 2.06%irom0_0_seg: 107028 B 4194272 B 2.55%dram0_0_seg: 13792 B 321296 B 4.29%drom0_0_seg: 147892 B 4194272 B 3.53%rtc_seg: 0 GB 8 KB 0.00%
CP: nuttx.hex
MKIMAGE: ESP32-C3 binary
esptool.py -c esp32c3 elf2image -fs 4MB -fm dio -ff 40m -o nuttx.bin nuttx
esptool.py v4.8.1
Creating esp32c3 image...
Merged 1 ELF section
Successfully created esp32c3 image.
Generated: nuttx.bin (ESP32-C3 compatible)
使用Cmake
先安装cmake
sudo apt isntall cmake
cd nuttx
cmake -B build -DBOARD_CONFIG=esp32c3-devkit:nsh -GNinja
cmake -B build -DBOARD_CONFIG=esp32c3-devkit:nsh -GNinja
配置管理
cmake --build build -t menuconfig
cmake失败
烧录
烧录之前安装esptool工具
pip install esptool
使用这条命令:
esptool --chip esp32c3 --port com3 --baud 460800 write_flash -z 0x0 E:\tmp\nuttx.bin
显示:
esptool --chip esp32c3 --port com3 --baud 460800 write_flash -z 0x0 E:\tmp\nuttx.bin
esptool.py v4.8.1
Serial port com3
Connecting...
Failed to get PID of a device on com3, using standard reset sequence.
.
Chip is ESP32-C3 (QFN32) (revision v0.4)
Features: WiFi, BLE
Crystal is 40MHz
MAC: e4:b0:63:22:df:68
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x0002afff...
Compressed 172640 bytes to 81799...
Wrote 172640 bytes (81799 compressed) at 0x00000000 in 2.3 seconds (effective 610.2 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
也不知道是否成功了...
至少生成了文件:
-rwxr-xr-x 1 skywalk skywalk 2808092 May 17 19:08 nuttx
-rw-r--r-- 1 skywalk skywalk 172640 May 17 19:08 nuttx.bin
-rw-r--r-- 1 skywalk skywalk 369186 May 17 19:08 nuttx.hex
-rw-r--r-- 1 skywalk skywalk 47 May 17 19:08 nuttx.manifest
-rw-r--r-- 1 skywalk skywalk 1660487 May 17 19:08 nuttx.map
就先到这里吧!
调试
编译报错ERROR: riscv64-unknown-elf-gcc failed: 1
make
Create version.h
LN: platform/board to /home/skywalk/github/nuttxspace/apps/platform/dummy
Register: dd
Register: dumpstack
Register: nsh
Register: sh
./stdlib/lib_strtold.c:42:10: fatal error: math.h: No such file or directory
42 | #include <math.h>
| ^~~~~~~~
compilation terminated.
ERROR: riscv64-unknown-elf-gcc failed: 1
command: riscv64-unknown-elf-gcc -MT bin/lib_strtold.o -M '-fno-common' '-Wall' '-Wstrict-prototypes' '-Wshadow' '-Wundef' '-Wno-attributes' '-Wno-unknown-pragmas' '-Wno-psabi' '-Os' '-fno-strict-aliasing' '-fno-omit-frame-pointer' '-fno-optimize-sibling-calls' '-ffunction-sections' '-fdata-sections' '-nostdlib' '-g' '-march=rv32imc' '-mabi=ilp32' '-isystem' '/home/skywalk/github/nuttxspace/nuttx/include' '-D__NuttX__' '-DNDEBUG' '-D__KERNEL__' '-Werror=return-type' '-I' '/home/skywalk/github/nuttxspace/nuttx/libs/libc' ./stdlib/lib_strtold.c
make[2]: *** [/home/skywalk/github/nuttxspace/nuttx/tools/Config.mk:232: lib_strtold.ddc] Error 1
make[1]: *** [Makefile:202: .depend] Error 2
make: *** [tools/Unix.mk:660: pass2dep] Error 2
又重新make了一下,报错简化成:
make
CC: stdlib/lib_strtold.c stdlib/lib_strtold.c:42:10: fatal error: math.h: No such file or directory
42 | #include <math.h>
| ^~~~~~~~
compilation terminated.
make[1]: *** [Makefile:156: bin/lib_strtold.o] Error 1
make: *** [tools/LibTargets.mk:196: libs/libc/libc.a] Error 2
检查math.h
是否存在
find /usr/include -name math.h
find /usr/include -name math.h
/usr/include/newlib/math.h
/usr/include/newlib/c++/10.3.1/math.h
/usr/include/newlib/c++/10.3.1/tr1/math.h
/usr/include/math.h
/usr/include/c++/11/math.h
/usr/include/c++/11/tr1/math.h
检查编译器路径
echo | gcc -E -v -
看到这句
#include <...> search starts here:/usr/lib/gcc/x86_64-linux-gnu/11/include/usr/local/include/usr/include/x86_64-linux-gnu/usr/include
证明应该可以看到math.h文件啊!
检查这两项:
7. 检查环境变量
确保环境变量 CC
和 CFLAGS
没有错误配置。例如:
export CC=gcc
export CFLAGS="-I/usr/include"
8. 检查 Makefile
配置
检查 Makefile
中是否有错误的配置,例如缺少 -lm
链接数学库。在 Makefile
中添加以下内容:
LDFLAGS += -lm
问题解决
最终发现,这是已知的问题:`rv-virt:nsh64` can't build with stock gcc-riscv64-unknown-elf on Ubuntu Jammy · Issue #11341 · apache/nuttx
This is a know issue. Ubuntu release of RISC-V GCC is compiled without math libs. We can do nothing with that, but you can enable NuttX native math libraries support via CONFIG_ LIBM=y
and still use RISC-V GCC provided by Ubuntu apt
or pick another more mature toolchain
👍1
直接用命令:
make CONFIG_LIBM=y
哇塞,终于过去了
cmake -B build -DBOARD_CONFIG=esp32c3-devkit:nsh -GNinja报错
cmake -B build -DBOARD_CONFIG=esp32c3-devkit:nsh -GNinja
CMake Error at CMakeLists.txt:89 (message):
Kconfig environment depends on kconfiglib, Please install:
(APT source)
$ sudo apt install python3-kconfiglib
or (pip source)
$ pip install kconfiglib
or (After Ubuntu 24.04)
$ pip install kconfiglib --break-system-packages
-- Configuring incomplete, errors occurred!
放弃cmake
make报错esptool.py not found. Please run: 'pip install esptool'
make
Create version.h
LN: platform/board to /home/skywalk/github/nuttxspace/apps/platform/dummy
Register: dd
Register: dumpstack
Register: nsh
Register: sh
CPP: /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/esp32c3_rom.ld-> /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/esp32c3_rom.ld.tmCPP: /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/flat_memory.ld-> /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/flat_memory.ld.tmCPP: /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/legacy_sections.ld-> /home/skywalk/github/nuttxspace/nuttx/boards/risc-v/esp32c3-legacy/esp32c3-devkit/../common/scripts/legacy_sectioLD: nuttx
Memory region Used Size Region Size %age Used
iram0_0_seg: 6624 B 321296 B 2.06%
irom0_0_seg: 107028 B 4194272 B 2.55%
dram0_0_seg: 13792 B 321296 B 4.29%
drom0_0_seg: 147892 B 4194272 B 3.53%
rtc_seg: 0 GB 8 KB 0.00%
CP: nuttx.hex
MKIMAGE: ESP32-C3 binary
esptool.py not found. Please run: 'pip install esptool'
Run make again to create the nuttx.bin image.
make: *** [tools/Unix.mk:559: nuttx] Error 1
按照提示的运行
pip install esptool
相关文章:
开源RTOS(实时操作系统):nuttx 编译
开源RTOS(实时操作系统):nuttx 编译 手册:Installing — NuttX latest documentation 源码:GitHub - apache/nuttx: Apache NuttX is a mature, real-time embedded operating system (RTOS) Installing The fir…...
C++学习:六个月从基础到就业——C++11/14:decltype关键字
C学习:六个月从基础到就业——C11/14:decltype关键字 本文是我C学习之旅系列的第四十二篇技术文章,也是第三阶段"现代C特性"的第四篇,主要介绍C11/14中的decltype关键字。查看完整系列目录了解更多内容。 引言 在现代C…...
【51】快速获取数码管段选表(含小数点)及字母表的工具(分享)
1 介绍 1.1 画面 1.2 用法 输入IO口和段码字母的映射关系,比如这里e4d5dp2,指的是bit4是e段,bit5是d段,bit2是小数点dp段。 然后选择有效电平(1表示亮 or 0表示亮)。 点击生成段码配置,即可得到…...
高频面试题(含笔试高频算法整理)基本总结回顾120
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
5月17日
这几天不知道为啥没更新。可能是玩得太疯了。或者是考试有点集中?? 线性代数开课了,英语昨天完成了debate 昨天中午debate结束我们就出去玩了,去的那里时光民俗,别墅很好,770平米,但是缺点是可…...
摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程
摩方12代N200迷你主机标配 Intel AX201无线网卡,支持 WiFi 6 协议(802.11ax)及蓝牙5.2。此网卡兼容主流抓包工具,但需注意: 驱动兼容性:Ubuntu 20.04及以上内核版本(5.4)默认支持AX2…...
从零开始:使用 PyTorch 构建深度学习网络
从零开始:使用 PyTorch 构建深度学习网络 目录 PyTorch 简介环境配置PyTorch 基础构建神经网络训练模型评估与测试案例实战:手写数字识别进阶技巧常见问题解答 PyTorch 简介 PyTorch 是一个开源的深度学习框架,由 Facebook(现…...
应用层自定义协议与序列化
应用层自定义协议与序列化 应用层协议网络版计算器序列化和反序列化序列化反序列化 重新理解read、write、recv、send和TCP为什么支持全双工代码结构Jsoncpp特性安装序列化使用Json::Value的toStyledString方法使用Json::StreamWriter使用Json::FastWriter 反序列化使用Json::R…...
2025春训第二十场
问题 B: 狗是啥呀 题目描述 在神秘的地狱深处,有着一种神秘的犬类生物,据传这种生物长了x个脑袋,并且具有强大的生命力。由于见过它的人全都下落不明,至今没有人知道它的真面目。 一位勇士为了斩杀这奇怪的生物,来到地…...
分糖果--思维+while判断
1.从左到右只考虑右边一遍,再从右到左考虑左边一遍,相当于左右考虑了 2.然后关键是1遍不一定行,while循环直到成功 https://www.luogu.com.cn/problem/B4091 #include<bits/stdc.h> using namespace std; #define N 100011 typedef …...
[system-design] ByteByteGo_Note Summary
目录 通信协议 REST API 与 GraphQL gRPC 如何工作? 什么是Webhook? 如何提高应用程序接口的性能? HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC) SOAP vs REST vs GraphQL vs RPC 代码优先与应用程序接口优先 HTT…...
Flask项目实践:构建功能完善的博客系统(含评论与标签功能)
引言 在Python Web开发领域,Flask以其轻量级、灵活性和易用性赢得了众多开发者的青睐。本文将带您从零开始构建一个功能完善的博客系统,包含文章发布、评论互动和标签分类等核心功能。通过这个实战项目,您不仅能掌握Flask的核心技术…...
Python爬虫实战:获取1688商品信息
在电商领域,获取1688商品信息对于市场分析、竞品研究、用户体验优化等至关重要。1688作为国内领先的B2B电商平台,提供了丰富的商品资源。通过Python爬虫技术,我们可以高效地获取1688商品的详细信息,包括商品名称、价格、图片、描述…...
Canva 推出自有应用生成器以与 Bolt 和 Lovable 竞争
AI 目前是一个巨大的市场,每个人都想从中分一杯羹。 即使是 Canva,这个以拖放图形设计而闻名的流行设计平台,也在其 Canva Create 2025 活动中发布了自己版本的代码生成器,加入了 AI 竞赛。 但为什么一个以设计为先的平台会提供代码生成工具呢? 乍看之下,这似乎有些不…...
多平台屏幕江湖生存指南
UniApp 屏幕适配大师:多平台屏幕江湖生存指南 屏幕江湖:尺寸混战 屏幕适配就像是应对不同体型的客人:从迷你的手机屏,到标准的平板,再到巨大的电视屏幕,你的应用必须有如武林高手般的适应力。 ┌──────────────────────────────────…...
BootCDN介绍(Bootstrap主导的前端开源项目免费CDN加速服务)
文章目录 BootCDN前端开源项目CDN加速服务全解析什么是BootCDN技术原理与架构CDN技术基础BootCDN架构特点1. 全球分布式节点网络2. 智能DNS解析系统3. 高效缓存管理机制4. 自动同步更新机制5. HTTPS和HTTP/2协议支持 BootCDN的核心优势速度与稳定性开源免费资源丰富度技术规范遵…...
LeetCode 153. 寻找旋转排序数组中的最小值:二分查找法详解及高频疑问解析
文章目录 问题描述算法思路:二分查找法关键步骤 代码实现代码解释高频疑问解答1. 为什么循环条件是 left < right 而不是 left < right?2. 为什么比较 nums[mid] > nums[right] 而不是 nums[left] < nums[mid]?3. 为什么 right …...
刷leetcodehot100返航版--二叉树
二叉树理论基础 二叉树的种类 满二叉树和完全二叉树,二叉树搜索树 满二叉树 如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 节点个数2^n-1【n为树的深度】 完全二叉树 在完全二叉树…...
「Mac畅玩AIGC与多模态41」开发篇36 - 用 ArkTS 构建聚合搜索前端页面
一、概述 本篇基于上一节 Python 实现的双通道搜索服务(聚合 SearxNG 本地知识库),构建一个完整的 HarmonyOS ArkTS 前端页面。用户可在输入框中输入关键词,实时查询本地服务 http://localhost:5001/search?q...,返…...
【LINUX操作系统】生产者消费者模型(下):封装、信号量与环形队列
1.封装、完善基于阻塞队列的productor-consumer module 前文中我们封装了自己的Mutex 【LINUX操作系统】线程同步与互斥-CSDN博客 按照老规矩,现在我们对同步与互斥的理解更进一步了,现在把这种面向过程的语言封装成面向对象的写法 1.1 封装条件变量 #p…...
项目管理学习-CSPM-4考试总结
前言 经过两个月左右时间的学习,今天(2025年5月17日)参加了CSPM-4的考试,仿佛回到了2011年参加软考高项的时候。中午12点考完出来后,手都是酸酸的。不过整体感觉还可以,和预想的差不多。CSPM-4的考试一共有…...
自己手写tomcat项目
一:Servlet的原理 在Servlet(接口中)有: 1.init():初始化servlet 2.getServletConfig():获取当前servlet的配置信息 3.service():服务器(在HttpServlet中实现,目的是为了更好的匹配http的请求方式) 4.g…...
C语言—再学习(结构体)
一、建立结构体 用户自己建立由不同类型数据组成的组合型的数据结构,它称为结构体。 struct Student { int num; //学号char name[20]; //名字为字符串char sex; //性别int age; //年纪float score; //分数char addr[30]; 地址为字符…...
SpringBoot--自动配置原理详解
为什么要学习自动配置原理? 原因:在实际开发中,我们经常会定义一些公共的组件,提供各个团队来使用,为了使用方便,我们经常会将公共的组件自定义成starter,如果想自定义starter,必须…...
MiInsertPageInFreeList函数分析和MmFreePagesByColor数组的关系
第一部分: Color MI_GET_COLOR_FROM_LIST_ENTRY(PageFrameIndex, Pfn1); ColorHead &MmFreePagesByColor[ListName][Color]; 第二部分: #define MI_GET_COLOR_FROM_LIST_ENTRY(index,pfn) \ ((ULONG)(((pfn)->…...
Windows/MacOS WebStorm/IDEA 中开发 Uni-App 配置
文章目录 前言1. 安装 HBuilder X2. WebStorm/IDEA 安装 Uniapp Tool 插件3. 配置 Uniapp Tool 插件4. 运行 Uni-App 项目 前言 前端开发人员对 WebStorm 一定不陌生,但有时需要开发 Uni-App 的需求,就必须要采用 HBuilder X,如果不习惯 HBu…...
redisson分布式锁实现原理归纳总结
Redisson 分布式锁的实现原理主要依赖于 Redis 的 Hash 数据结构、Lua 脚本、发布订阅机制以及看门狗(Watchdog)机制,以下是核心要点总结: 1. 核心原理 • 互斥性与可重入性: 通过 Redis 的 Hash 数据结构保存锁的持…...
Ubuntu 添加系统调用
实验内容 通过内核编译法添加一个不用传递参数的系统调用,其功能可自定义。 (1)添加系统调用号,系统会根据这个号找到syscall_table中的相应表项。具体做法是在syscall_64.tbl文件中添加系统调用号和调用函数的对应关系。 &#…...
Olib 2.2.0 | 免费开源软件,无需注册登录即可从ZLibrary下载多语言电子书
Olib是一款专为书籍爱好者设计的免费开源软件,它允许用户无需注册或登录即可从ZLibrary高速下载各种语言的电子书。该软件支持上百种语言的电子书下载,非常适合需要多语言资源的读者和研究人员使用。Olib的操作界面非常直观,使得书籍的搜索与…...
c++动态链接库
1. 生成动态链接库 首先实现一个动态链接库的代码 // example.cpp #include <iostream> void sayHello() {std::cout << "Hello from shared library!" << std::endl; }int add(int a, int b) {return a b; }// example.h #pragma once void sa…...
HelloWorld
HelloWorld 新建一个java文件 文件后缀名为 .javahello.java【注意】系统可能没有显示文件后缀名,我们需要手动打开 编写代码 public class hello {public static void main(String[] args) {System.out.print(Hello,World)} }编译 javac java文件,会生…...
SVGPlay:一次 CodeBuddy 主动构建的动画工具之旅
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 背景与想法 我一直对 SVG 图标的动画处理有浓厚兴趣,特别是描边、渐变、交互等效果能为图标增添许…...
SLAM定位常用地图对比示例
序号 地图类型 概述 1 格栅地图 将现实环境栅格化,每一个栅格用 0 和 1 分别表示空闲和占据状态,初始化为未知状态 0.5 2 特征地图 以点、线、面等几何特征来描绘周围环境,将采集的信息进行筛选和提取得到关键几何特征 3 拓扑地图 将重要部分抽象为地图,使用简单的图形表示…...
强化学习中,frames(帧)和 episodes(回合)
在强化学习中,frames(帧)和 episodes(回合)是两个不同的概念: 1. 定义差异 Frame(帧): 表示智能体与环境交互的单个时间步(step),例如…...
HCIP第六次作业
一、拓扑图 二、需求 1、使用PreVal策略,确保R4通过R2到达192.168.10.0/24 2、使用AS_Path策略,确保R4通过R3到达192.168.11.0/24 3、配置MED策略,确保R4通过R3到达192.168.12.0/24 4、使用Local Preference策略,确保R1通过R2…...
高频面试题(含笔试高频算法整理)基本总结回顾110
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
数据湖与数据仓库融合:Hudi、Iceberg、Delta Lake 实践对比
在实时与离线一体化的今天,数据湖与数据仓库边界不断融合,越来越多企业选用如 Hudi、Iceberg、Delta Lake 等开源方案实现统一的数据存储、计算、分析平台。本篇将围绕以下关键点,展开实战对比与解决方案分享: ✅ 实时写入能力 ✅ ACID 保证 ✅ 增量数据处理能力 ✅ 流批一…...
OGG 更新表频繁导致进程中断,见鬼了?非也!
大家好,这里是 DBA学习之路,专注于提升数据库运维效率。 目录 前言问题描述问题分析解决方案后续 前言 最近几周一直遇到一个 OGG 问题,有一张表已更新就会中断 OGG 同步进程,本文记录一下分析过程以及解决方案。 问题描述 昨天…...
C++学习-入门到精通-【7】类的深入剖析
C学习-入门到精通-【7】类的深入剖析 类的深入剖析 C学习-入门到精通-【7】类的深入剖析一、Time类的实例研究二、组成和继承三、类的作用域和类成员的访问类作用域和块作用域圆点成员选择运算符(.)和箭头成员选择运算符(->)访问函数和工具函数 四、具有默认实参的构造函数重…...
非易失性存储技术综合对比:EEPROM、NVRAM、NOR Flash、NAND Flash和SD卡
非易失性存储技术综合对比:EEPROM、NVRAM、NOR Flash、NAND Flash和SD卡 读写性能对比 存储类型读取速度写入速度随机访问能力最小操作单位NVRAM极快(~10ns)极快(~10ns)极优(字节级)字节EEPROM中等(~100ns)慢(~5ms/字节)优(字节级)字节NOR Flash快(~50ns)慢(~5ms/…...
数字化转型- 数字化转型路线和推进
数字化转型三个阶段 百度百科给出的企业的数字化转型包括信息化、数字化、数智化三个阶段 信息化是将企业在生产经营过程中产生的业务信息进行记录、储存和管理,通过电子终端呈现,便于信息的传播与沟通。数字化通过打通各个系统的互联互通,…...
ARM (Attention Refinement Module)
ARM模块【来源于BiSeNet】:细化特征图的注意力,增强重要特征并抑制不重要的特征。 Attention Refinement Module (ARM) 详解 ARM (Attention Refinement Module) 是 BiSeNet 中用于增强特征表示的关键模块,它通过注意力机制来细化特征图&…...
符合Python风格的对象(对象表示形式)
对象表示形式 每门面向对象的语言至少都有一种获取对象的字符串表示形式的标准方 式。Python 提供了两种方式。 repr() 以便于开发者理解的方式返回对象的字符串表示形式。str() 以便于用户理解的方式返回对象的字符串表示形式。 正如你所知,我们要实现_…...
AtCoder AT_abc406_c [ABC406C] ~
前言 除了 A 题,唯一一道一遍过的题。 题目大意 我们定义满足以下所有条件的一个长度为 N N N 的序列 A ( A 1 , A 2 , … , A N ) A(A_1,A_2,\dots,A_N) A(A1,A2,…,AN) 为波浪序列: N ≥ 4 N\ge4 N≥4(其实满足后面就必须满足这…...
多指标组合策略
该策略(MultiConditionStrategy)是一种基于多种技术指标和市场条件的交易策略。它通过综合考虑多个条件来生成交易信号,从而决定买入或卖出的时机。 以下是对该策略的详细分析: 交易逻辑思路 1. 条件1:星期几和价格变化判断 - 该条件根据当前日期是星期几以及价格的变化…...
系统架构-大数据架构设计
基础介绍 三大挑战: 如何处理非结构化和半结构化数据如何探索大数据复杂性、不确定性特征描述的刻画方法及大数据的系统建模数据异构性与决策异构性的关系对大数据知识发现与管理决策的影响 架构特征: 鲁棒性(稳定性)和容错性…...
R语言空间数据处理入门教程
我的课程《R语言空间数据处理入门教程》已重新恢复课程售卖,有需要的读者可以学习。 👇点击下方链接(文末“阅读原文”可直达),立即开启你的空间数据之旅: https://www.bilibili.com/cheese/play/ss13775…...
QT+EtherCAT 主站协议库—SOEM主站
SOEM 是 Simple Open EtherCAT Master Library 的缩写,是瑞典 rt-lab 提供 的一个开源 EtherCAT 主站协议库 。 SOEM 库使用 C 语言编写,可以在 windows 以及 Linux 平台上运行,并也可以方便地移植到嵌入式平台上。 SOEM 支持 CoE ࿰…...
Java-反射(Reflection)
一:概述 (1)出现背景 (2)解决方案 (3)使用场景 业务开发用的少,框架使用的多,业务反射被认为是动态语言的关键 (4)与原方法对比 (5…...
第一次经历项目上线
这几天没写csdn,因为忙着项目上线的问题,我这阶段改了非常多的前端bug哈哈哈哈,说几个比较好的bug思想! 这个页面算是我遇到的比较大的bug,因为我一开始的逻辑都写好了,询价就是在点击快递公司弹出弹框的时…...