为单片机移植实时操作系统NuttX(Unix-like)
| 操作系统 | 实时性 | 最小资源需求 | 功能丰富度 | 适用场景 |
|---|---|---|---|---|
| NuttX | 强(微秒级) | 6KB Flash+2KB RAM | 高(POSIX + 网络 + 文件系统) | 资源受限且需复杂功能的设备(如 ESP32、STM32) |
| FreeRTOS | 强(微秒级) | 2KB Flash+1KB RAM | 中(无 POSIX / 网络,需额外集成) | 极简场景(如纯控制类设备) |
| RT-Thread | 强(微秒级) | 4KB Flash+2KB RAM | 高(国产,生态适配国内芯片) | 国内嵌入式设备(如 STM32、GD32) |
| 嵌入式 Linux(如 Buildroot) | 弱(毫秒级) | 4MB Flash+8MB RAM | 极高(全 POSIX + 丰富软件) | 资源充足的设备(如 Raspberry Pi、工业网关) |
偶然发现的一个操作系统,很小巧,使用体验跟Linux差不多,还兼容POSIX,可以很方便地将Linux的程序移植到它上面。
小米在它的基础上实现了vela系统,但我看不出什么太大的差别,不过小米的中文文档可以参考下,毕竟小米招安了原作者。
官网文档:NuttX Documentation — NuttX latest documentation
小米vela文档:openvela 开源项目
在线体验:Demo
中文介绍:NuttX实时操作系统介绍(最详细)-CSDN博客
移植
安装依赖:sudo apt install kconfig-frontends
ESP32-C3 / C6:
#克隆esp官方工具 git clone --recursive https://github.com/espressif/esp-idf.git cd esp-idf ./install.sh #安装 . ./export.sh #导出环境变量(注意前面有个'.',相当于source ./export.sh) # 克隆NuttX的内核以及APP源码 git clone https://github.com/apache/nuttx git clone https://github.com/apache/nuttx-apps.git # 目录应该是这样的 esp-idf/ ├─ nuttx/ # NuttX 内核源码 └─ nuttx-apps/ # NuttX 应用源码(含 nsh 等组件) # 配置一个开发板: cd nuttx/tools # 先查看esp32c3这款芯片支持哪些开发板 ./configure.sh -L | grep esp32c3 esp32c3-generic:spi esp32c3-generic:i2schar esp32c3-generic:nimble esp32c3-generic:timers esp32c3-generic:rmt ... # 这里我选通用的开发板来配置: ./configure.sh esp32c3-generic:nsh # 后面的nsh表示配置的这个镜像默认运行nsh终端,也可以其他的,例如:spi表示spi测试 # 编译 # 注:esp-idf提供的riscv编译器前缀是riscv32-esp-elf-,而nutty的默认编译器前缀是riscv64-unknown-elf-,需要改下,否则会找不到编译器 cd nuttx make menuconfig CROSSDEV=riscv32-esp-elf- make -j8 CROSSDEV=riscv32-esp-elf- # 编译完成后会在nuttx根目录生成一个nuttx.bin,即镜像文件 # 烧录: esptool --chip esp32c3 --port COM5 write_flash -z 0x0 nuttx.bin # 重启并运行,注意:nutty的控制台是在esp32c3的硬件UART引脚(RX:20,TX:21),而不是USB口模拟的串口
注:C6 跟 C3 差不多,就是把上面的 c3 关键字换成 c6,这里就不多说了
ESP32-S3:
# 流程跟上面的ESP32-C3差不多,相同的就省略 # 配置文件,这里选通过开发板 ./configure.sh esp32s3-devkit:nsh # 编译 # 不用加CROSSDEV=xxx,s3的xtensa-esp32s3-elf-前缀能正常识别 make -j8 # 烧录 esptool --chip esp32s3 --port COM9 write_flash -z 0x0 nuttx.bin # 重启并运行,同样终端输出是在UART串口而不是USB模拟的那个
RP2040:
# 拉取RP2040的官方SDK git clone --recursive https://github.com/raspberrypi/pico-sdk.git
# 更新子项目(如果上面有加--recursive就不用)
git submodule update --init --recursive # 将SDK设置到环境变量,后面会依赖到 export PICO_SDK_PATH=/workspaces/pico-sdk # 克隆 picotool 源码,这是用来生成uf2文件的工具 git clone https://github.com/raspberrypi/picotool.git cd picotool # 编译安装(需 CMake 和 GCC) mkdir build && cd build cmake .. make -j8 sudo make install # 安装到系统路径(默认 /usr/local/bin) # 验证安装(输出版本信息即成功) picotool --version # 安装跨平台编译工具gcc,可以直接安装sudo apt install gcc-arm-none-eabi,但版本不同可能会导致下面的编译失败 # 进入 /opt 目录(工具链通常安装在这里) cd /opt # 下载 2022 年 12 月的 12.2 版本(64 位 Linux) sudo wget https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz # 解压 sudo tar -xf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz # 添加新工具链到环境变量 echo 'export PATH=/opt/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi/bin:$PATH' >> ~/.bashrc source ~/.bashrc # 验证版本(应输出 12.2.1) arm-none-eabi-gcc --version # 配置 cd nuttx/tools ./configure.sh raspberrypi-pico:nsh # 编译 cd nuttx make -j8 # 编译完成后会在nuttx目录生成 'nuttx.uf2' # 拷贝到树莓派运行 # 终端输出到树莓派的UART0(TX:GP0,RX:GP1)
可惜目前树莓派模拟器没办法正确运行,否则就方便多了:
> rp2040js@1.1.1 start > tsx demo/emulator-run.ts --image ./nuttx.uf2 Loading uf2 image ./nuttx.uf2 RP2040 GDB Server ready! Listening on port 3333 18:15:46.90 [XOSC_BASE] Unimplemented peripheral write to 0x0: 0xaa0 18:15:46.90 [XOSC_BASE] Unimplemented peripheral write to 0xc: 0x2f 18:15:46.91 [XOSC_BASE] Unimplemented peripheral read from 0x0 18:15:46.91 [XOSC_BASE] Unimplemented peripheral write to 0x0: 0x-1 18:15:46.91 [XOSC_BASE] Unimplemented peripheral read from 0x4 18:15:46.91 [PLL_SYS_BASE] Unimplemented peripheral write to 0x4: 0xffffffff 18:15:46.91 [PLL_SYS_BASE] Unimplemented peripheral write to 0x8: 0x0 18:15:46.91 [PLL_SYS_BASE] Unimplemented peripheral write to 0x0: 0x1 18:15:46.92 [PLL_SYS_BASE] Unimplemented peripheral write to 0x8: 0x7d 18:15:46.92 [PLL_SYS_BASE] Unimplemented peripheral read from 0x4 18:15:46.92 [PLL_SYS_BASE] Unimplemented peripheral write to 0x4: 0x-22 18:15:46.92 [PLL_SYS_BASE] Unimplemented peripheral read from 0x0 18:15:46.92 [PLL_SYS_BASE] Unimplemented peripheral write to 0xc: 0x62000 18:15:46.92 [PLL_SYS_BASE] Unimplemented peripheral read from 0x4 18:15:46.92 [PLL_SYS_BASE] Unimplemented peripheral write to 0x4: 0x-9 18:15:46.92 [PLL_USB_BASE] Unimplemented peripheral write to 0x4: 0xffffffff 18:15:46.92 [PLL_USB_BASE] Unimplemented peripheral write to 0x8: 0x0 18:15:46.92 [PLL_USB_BASE] Unimplemented peripheral write to 0x0: 0x1 18:15:46.93 [PLL_USB_BASE] Unimplemented peripheral write to 0x8: 0x28 18:15:46.93 [PLL_USB_BASE] Unimplemented peripheral read from 0x4 18:15:46.93 [PLL_USB_BASE] Unimplemented peripheral write to 0x4: 0x-22 18:15:46.93 [PLL_USB_BASE] Unimplemented peripheral read from 0x0 18:15:46.93 [PLL_USB_BASE] Unimplemented peripheral write to 0xc: 0x52000 18:15:46.93 [PLL_USB_BASE] Unimplemented peripheral read from 0x4 18:15:46.93 [PLL_USB_BASE] Unimplemented peripheral write to 0x4: 0x-9 18:15:46.95 [UART0] Unimplemented peripheral write to 0x34: 0x0 18:15:46.101 [UART0] Unimplemented peripheral write to 0x48: 0x0 18:15:46.101 [UART0] Unimplemented peripheral write to 0x4: 0xf 18:15:46.102 [UART0] Unimplemented peripheral write to 0x34: 0x0 NuttShell (NSH) NuttX-12.11.0-RC0 nsh> echo 'hello' 没反应了...

模拟运行
ESP32-S3:
官方文档:Espressif ESP32-S3 — NuttX latest documentation
RP2040:
可以用 rp2040js 模拟进入系统,但在终端里无法输入任何内容
一些常用的操作
注1:每次 menuconfig 修改完配置,要 make clean 一下,否则很可能编译出来的程序有问题。如果切换了模板,就要重新 make distclean ,但是有时候distclean会报错,手动删除.config开头的文件。
1.WIFI(ESP系列专属)
NSH里运行
nsh> ifup wlan0 nsh> wapi psk wlan0 mypasswd 3 nsh> wapi essid wlan0 myssid 1 nsh> renew wlan0(renew就是dhcp自动获取ip,如果有在CONFIG里配置好SSID跟密码,前面的步骤可以直接省略) nsh> ifconfig wlan0 Link encap:Ethernet HWaddr e4:b3:23:f8:c1:f4 at RUNNING mtu 1500 inet addr:192.168.31.56 DRaddr:192.168.31.1 Mask:255.255.255.0 nsh> ping www.baidu.com PING 183.240.99.58 56 bytes of data 56 bytes from 183.240.99.58: icmp_seq=0 time=280.0 ms 56 bytes from 183.240.99.58: icmp_seq=1 time=40.0 ms # 开启热点(需要在配置里修改WIFI模式为SoftAP) nsh> ifup wlan1(此时可以搜到'Nuttx'这个热点,但连不上,因为没法分配IP) nsh> dhcpd_start
2.超频(RP2040 / RP23XX 专属)
打开:nuttx/arch/arm/src/rp2040/rp2040_clock.c
找到 clocks_init 函数,里面 rp2040_pll_init(RP2040_PLL_SYS_BASE, 1, 1500 * MHZ, 6, 2); 这一句便是CPU默认频率(125MHZ)设置函数,改为以下想要的:
| 目标频率(MHz) | VCO 频率(MHz) | post_div1 | post_div2 | 计算公式验证(MHz) | rp2040_pll_init 参数 |
|---|---|---|---|---|---|
| 125 | 1500 | 6 | 2 | 1500 / (6×2) = 125 | rp2040_pll_init(RP2040_PLL_SYS_BASE, 1, 1500*MHZ, 6, 2) |
| 200 | 1200 | 3 | 2 | 1200 / (3×2) = 200 | rp2040_pll_init(RP2040_PLL_SYS_BASE, 1, 1200*MHZ, 3, 2) |
| 250 | 1500 | 3 | 2 | 1500 / (3×2) = 250 | rp2040_pll_init(RP2040_PLL_SYS_BASE, 1, 1500*MHZ, 3, 2) |
| 300 | 1200 | 2 | 2 | 1200 / (2×2) = 300 | rp2040_pll_init(RP2040_PLL_SYS_BASE, 1, 1200*MHZ, 2, 2) |
打开:nuttx/boards/arm/rp2040/raspberrypi-pico/include/board.h(具体看你用了哪个板子,这里以默认的 raspberrypi-pico 为例)
找到以下这几项,改为想要的频率,注:这几个宏定义只是做一个引用,实际上生效的关键函数是上面的 rp2040_pll_init
#define BOARD_PLL_SYS_FREQ (125 * MHZ) #define BOARD_SYS_FREQ (125 * MHZ) #define BOARD_PERI_FREQ (125 * MHZ)
注:目前最高只能超频到300MHZ,再高的话机器无法启动
测试,加入CoreMark应用,跑个分测下有没有生效:

300MHZ下的跑分是 358 左右,125MHZ时是 149 左右,提升2.4倍,证明修改频率生效了(作为对比,240MHZ的ESP32S3跑分是464)

注:.config 里的 CONFIG_ARCH_CPUINFO_FREQ_KHZ=0 这个只是起一个显示作用,执行 cat /proc/cpuinfo 时显示这个数据作为CPU频率,它跟实际的CPU频率没半毛钱关系
3.驱动SSD1306屏幕
RP2040可以直接驱动,板级支持代码里里已经有SSD1306,而ESP32系列没有,需要参考RP2040的,然后小小修改下:
拷贝 nuttx/boards/arm/rp2040/common/src/rp2040_ssd1306.c 到 nuttx/boards/xtensa or risc-v/esp32xx/esp32xx-xx/src/ 下,并重命名为 esp32xx_ssd1306.c # ESP32-S3 将里面的 #include "rp2040_i2c.h" 需改为 #include "esp32s3_i2c.h" 将里面的 i2c = rp2040_i2cbus_initialize(busno); 修改为 i2c = esp32s3_i2cbus_initialize(busno); 在 nuttx/boards/xtensa/esp32s3/esp32s3-devkit/src/Make.defs 里添加 ifeq ($(CONFIG_LCD_SSD1306),y) CSRCS += esp32s3_ssd1306.c endif # ESP32-C3 / C6 将里面的 #include "rp2040_i2c.h" 需改为 #include "espressif/esp_i2c.h" 将里面的 i2c = rp2040_i2cbus_initialize(busno); 修改为 i2c = esp_i2cbus_initialize(busno); 在 nuttx/boards/risc-v/esp32c3/esp32c3-generic/src/Make.defs 里添加 ifeq ($(CONFIG_LCD_SSD1306),y) CSRCS += esp32c3_ssd1306.c endif
注1:S3能正常加载出 /dev/fb0,C3/C6不知道为何没成功,可能是lcd驱动没起来
注2:亿百特的 EoRa-HUB-400TB 开发板上的 ssd1306 屏幕,有多出一个 reset 引脚连在 gpio21 上,这个复位引脚必须设置为高电平,ssd1306 才能初始化成功,简单处理可以直接用导向将它跟 3v3 连接
注3:ESP的大部分i2c配置文件,都把 CONFIG_I2C_TRACE 和 CONFIG_DEBUG_I2C 之类的 I2C 调试默认给打开,导致运行的时候非常多错误日志,一开始以为是BUG,卡这里很久。
4.sqlite
编译时可能报错:
在编译RP2040时报错: 提示:nuttx-apps/database/sqlite/build/sqlite3.c 的 7146 行: unsigned int(*)(void*,const char*,unsigned int,unsigned int,unsigned int) 与 180497 处的声明不一致 unsigned int (*xCallback)(void*,const char*,u32,u32,u32) 将 180497 行的3个 u32 参数改为 unsigned int: unsigned int (*xCallback)(void*,const char*,unsigned int,unsigned int,unsigned int)
如果提示找不到 nuttx-apps/database/sqlite/sqlite/configure,是由于 sqlite3 的源码没解压成功 Makefile里是这样写的: sqlite.zip: ifeq ($(wildcard sqlite/.git),) $(Q) curl -L https://codeload.github.com/sqlite/sqlite/zip/refs/tags/vesion-${CONFIG_LIB_SQLITE_VERSION} -o sqlite.zip $(Q) unzip -q -o sqlite.zip $(Q) mv sqlite-vesion-* sqlite $(call DELFILE, sqlite.zip) endif 手动执行下这些操作即可
5.终端,串口相关的概念
/dev/console:终端,一个抽象的概念,具备输入输出功能,系统的启动信息、日志输入到这里,NSH 默认绑定到 console,你输入的命令和输出的结果都通过它交互。它常与一个物理的串口设备映射(如 ttyS0 )
/dev/ttyS0:UART(通用异步收发传输器)串口设备,是最常见的串行通信接口,ttyS0 通常对应系统的第一个串口(优先级最高),ttyS1 是第二个串口,以此类推
/dev/ttyACM0:USB ACM(Abstract Control Model)设备,通常是通过 USB 连接的虚拟串口设备
6.网络相关
我这里是 PC 的 WIFI 网络共享给网口,网口通过网线跟装有 W5500 的 RP2040 连接
W5500 跟 RP2040 的连接方式:

PC 共享网络设置:
主网络WIFI:
W5500网口:
设置 ip 的方式(如果是网线连接PC,要先设置好网络共享):
1.配置里写死 CONFIG_NETINIT_DHCPC=n # 关闭 dhcp 自动获取地址 CONFIG_NETINIT_IPADDR=0xC0A88902 # ip:192.168.137.2 CONFIG_NETINIT_DRIPADDR=0xC0A88901 # route:192.168.137.1 CONFIG_NETINIT_NETMASK=0xffffff00 # netmask:255.255.255.0 运行后就会自动跟网络连接上 2.运行时手动设置静态 ip ifconfig eth0 192.168.137.2 netmask 255.255.255.0 gateway 192.168.137.1 3.通过 dhcp 自动获取 ip CONFIG_NETINIT_DHCPC=y CONFIG_SYSTEM_DHCPC_RENEW=y 然后运行时 renew eth0
一些网络工具: # 域名解析工具 CONFIG_NET_LOOPBACK=y nslookup www.baidu.com # 查看网关192.168.137.1的MAC地址 arp -a 192.168.137.1
7.ADB
ESP32S3 的默认 adb 配置有 etc 文件系统,它在 /etc/init.d/rcS 里让 adbh 守护进程开机启动 echo "rcS file is called!" adbd & PC 上直接 adb shell 就可以进入 nsh PC 接收设备文件: adb pull /data/local/tmp/test.txt D:\backup\ PC发送文件到设备,需要设备有可读写的文件系统支持,否则会接收失败 CONFIG_ESP32S3_SPIFLASH=y CONFIG_ESP32S3_SPIFLASH_SMARTFS=y 第一次使用该文件系统需要先格式化下 mksmartfs /dev/smart0 然后就可以正常发送了: adb push .\test.txt /data/
注:目前仅 ESP32S3 测试成功,RP2040 能编译,但运行 adbd 守护进程失败,连上电脑能识别到 ADB 设备,但一直处于离线状态。而 ESP32C3 编译失败。
6.UART交互,AT交互,这对于 AT 调制解调器很有用,例如,建立 pppd 连接(请参阅相关的 pppd 示例)
7.FASTBOOT
8.MCUBOOT
9.usbmsc
10.ADB
11.分区表:txtable
13.esp32c3:sta_softap
14.变成AT
配置模板
RP2040:
# license # 版权相关,建议全部打开,否则有些开源模块无法打开 CONFIG_ALLOW_BSD_COMPONENTS=y CONFIG_ALLOW_GPL_COMPONENTS=y CONFIG_ALLOW_MIT_COMPONENTS=y CONFIG_ALLOW_ECLIPSE_COMPONENTS=y CONFIG_ALLOW_ICS_COMPONENTS=y # experimental # 开启实验性功能 CONFIG_EXPERIMENTAL=y # debug CONFIG_SYSLOG_COLOR_OUTPUT=y # 彩色日志输出 CONFIG_RAMLOG=y CONFIG_RAMLOG_SYSLOG=y # dmesg # CONFIG_SYSLOG_CDCACM=y # 日志输出到 usb_cdc_console # CONFIG_SYSLOG_DEVPATH=/dev/ttyS0 # 日志输出到串口1 # CONFIG_LIBC_LONG_LONG is not set # CONFIG_STANDARD_SERIAL is not set # base CONFIG_ARCH="arm" CONFIG_ARCH_BOARD="raspberrypi-pico" CONFIG_ARCH_BOARD_COMMON=y CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y CONFIG_ARCH_CHIP="rp2040" CONFIG_ARCH_CHIP_RP2040=y CONFIG_ARCH_RAMVECTORS=y CONFIG_ARCH_STACKDUMP=y CONFIG_BOARD_LOOPSPERMSEC=10450 CONFIG_BUILTIN=y CONFIG_DEBUG_FULLOPT=y CONFIG_DEBUG_SYMBOLS=y CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 CONFIG_RAM_SIZE=270336 CONFIG_RAM_START=0x20000000 CONFIG_READLINE_CMD_HISTORY=y CONFIG_RR_INTERVAL=200 CONFIG_SCHED_WAITPID=y CONFIG_START_DAY=9 CONFIG_START_MONTH=2 CONFIG_START_YEAR=2021 CONFIG_TESTING_GETPRIME=y CONFIG_TESTING_OSTEST=y CONFIG_SYSLOG_CONSOLE=y # init CONFIG_INIT_ENTRYPOINT="nsh_main" CONFIG_INIT_STACKSIZE=4096 # nsh CONFIG_SYSTEM_NSH=y # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_HEXDUMP is not set # CONFIG_NSH_DISABLE_DATE is not set # CONFIG_NSH_DISABLE_LOSMART is not set CONFIG_NSH_ARCHINIT=y CONFIG_NSH_BUILTIN_APPS=y CONFIG_NSH_READLINE=y CONFIG_NSH_SYMTAB=y CONFIG_NSH_SYMTAB_ARRAYNAME="g_symtab" CONFIG_NSH_SYMTAB_COUNTNAME="g_nsymbols" # nsh_run_apps # 支持在 NSH 中运行文件系统中的应用程序 CONFIG_NSH_FILE_APPS=y # nsh_romfs (need etcfs) # 启用后,NSH 会在登录时从 romfs 中加载初始化脚本 .nshrc 并运行 # CONFIG_NSH_ROMFS=y # 设置 NSH 初始的 PATH 环境变量(命令搜索路径) CONFIG_PATH_INITIAL="/bin" CONFIG_LINE_MAX=128 # boardctl CONFIG_BOARDCTL_RESET=y CONFIG_BOARDCTL_USBDEVCTRL=y # flash_size # 将 pico 默认的 2MB 修改为 8MB # 同时也要将 raspberrypi-pico-flash.ld 里的 flash (rx) : ORIGIN = 0x10000000, LENGTH = 2048K 修改为 8192K CONFIG_RP2040_FLASH_LENGTH=8388608 # console # 串口终端跟USB终端只能启用一个 # uart0_serial_console # CONFIG_UART0_SERIAL_CONSOLE=y # usb_cdc_console (need usb) CONFIG_CDCACM=y CONFIG_CDCACM_CONSOLE=y CONFIG_NSH_USBCONSOLE=y # usb CONFIG_USBDEV=y CONFIG_USBDEV_BUSPOWERED=y # usb 复合设备 # CONFIG_USBDEV_COMPOSITE=n # uart0 # CONFIG_RP2040_UART0_TX_GPIO=0 # CONFIG_RP2040_UART0_RX_GPIO=1 # i2c # CONFIG_RP2040_I2C=y # CONFIG_RP2040_I2C_DRIVER=y # CONFIG_SYSTEM_I2CTOOL=y # CONFIG_I2CTOOL_MAXBUS=1 # i2c0 # CONFIG_RP2040_I2C0=y # CONFIG_RP2040_I2C0_SDA_GPIO=4 # CONFIG_RP2040_I2C0_SCL_GPIO=5 # spi CONFIG_RP2040_SPI=y # CONFIG_SYSTEM_SPITOOL=y # CONFIG_SPITOOL_MAXBUS=1 # spi_sdcard # CONFIG_RP2040_SPISD=y # 可选:启用 RP2040 SPI SD 卡支持 # spi_cmddata # CONFIG_SPI_CMDDATA=y # 可选:启用 SPI 命令/数据切换支持(用于 LCD 驱动等设备) # spi_callback # CONFIG_SPI_CALLBACK=n # 可选:SPI 回调功能配置(用于 SPI 传输的异步通知) # spi_channel # LCD所连接的SPI通道,这里是spi1 # 注:一般屏幕会在rp2040_stxxx.c里引用这个宏 #define LCD_SPI_PORTNO CONFIG_RP2040_LCD_SPI_CH,用于初始化spi总线 # rp2040_st7735.c 写死了用spi1,不用这个配置 # CONFIG_RP2040_LCD_SPI_CH=1 # spi0 CONFIG_RP2040_SPI0=y CONFIG_RP2040_SPI0_RX_GPIO=16 CONFIG_RP2040_SPI0_CS_GPIO=17 CONFIG_RP2040_SPI0_SCK_GPIO=18 CONFIG_RP2040_SPI0_TX_GPIO=19 # spi1 # CONFIG_RP2040_SPI1=y # CONFIG_RP2040_SPI1_CS_GPIO=13 # CONFIG_RP2040_SPI1_RX_GPIO=12 # CONFIG_RP2040_SPI1_SCK_GPIO=14 # CONFIG_RP2040_SPI1_TX_GPIO=15 # mmcsd (need spi0, spi_sdcard, spi_callback) # CONFIG_MMCSD=y # sd卡挂载在spi0 # CONFIG_NSH_MMCSDSPIPORTNO=0 # CONFIG_MMCSD_HAVE_CARDDETECT is not set # CONFIG_MMCSD_HAVE_WRITEPROTECT is not set # lcd (need ldc_driver) # 目前还不知道怎么同时存在2个lcd_driver分别映射到fb0, fb1,所以只能同时开一个 # CONFIG_LCD=y # CONFIG_LCD_DEV=y # CONFIG_LCD_FRAMEBUFFER=y # CONFIG_LCD_PORTRAIT=n # 竖屏模式 # CONFIG_LCD_LANDSCAPE=y # 横屏模式 # lcd_driver ssd1306 (need lcd, i2c0) # CONFIG_LCD_MAXCONTRAST=255 # 对比度 # CONFIG_LCD_SH1106_OLED_132=y # CONFIG_LCD_SSD1306_I2C=y # lcd_driver max7219 (need lcd, spi1, spi_cmddata) # 测试未通过,它属于lcd分类下,但好像跟其他lcd_driver不一样?也无法被fb跟nx使用 # CONFIG_LCD_MAX7219=y # CONFIG_MAX7219_NHORIZONTALBLKS=3 # CONFIG_MAX7219_NVERTICALBLKS=1 # CONFIG_MAX7219_INTENSITY=10 # lcd_driver st7735 (need lcd, spi1, spi_cmddata) # DC, RST, BL 引脚配置,比较混乱,写死的,不同板子放的位置还不一样 # 可以在具体板子的板极支持文件夹里搜 SPI_CMDDATA,这个是SPI发送命令的函数,每个板子里都会定义具体实现,可通过它找到 DC 引脚的配置 # rp2040:写死在 nuttx/boards/arm/rp2040/common/src/rp2040_st7735.c 里的 LCD_XX # stm32f103mini:写死在 nuttx/boards/arm/stm32/stm32f103-minimum/src/stm32f103_minimum.h 里的 STM32_LCD_XX # CONFIG_LCD_ST7735=y # CONFIG_LCD_ST7735_SPIMODE=3 # CONFIG_LCD_ST7735_FREQUENCY=40000000 # 40MHz # 0.96 80x160 # CONFIG_LCD_ST7735_XRES=80 # CONFIG_LCD_ST7735_YRES=160 # CONFIG_LCD_ST7735_XOFFSET=26 # CONFIG_LCD_ST7735_YOFFSET=1 # CONFIG_LCD_ST7735_BGR=y # CONFIG_LCD_ST7735_INVCOLOR=y # 1.77 128x160 # CONFIG_LCD_ST7735_XRES=128 # CONFIG_LCD_ST7735_YRES=160 # CONFIG_LCD_ST7735_XOFFSET=2 # CONFIG_LCD_ST7735_YOFFSET=1 # CONFIG_LCD_ST7735_BGR=n # CONFIG_LCD_ST7735_INVCOLOR=y # 2.8 240x320(st7789,兼容st7735驱动) # ONFIG_LCD_ST7735_XRES=240 # CONFIG_LCD_ST7735_YRES=320 # CONFIG_LCD_ST7735_XOFFSET=0 # CONFIG_LCD_ST7735_YOFFSET=0 # CONFIG_LCD_ST7735_BGR=n # CONFIG_LCD_ST7735_INVCOLOR=y # 2.8 240x320(ili9341,兼容st7735驱动,X是翻转的,但默认的st7735配置里没有镜像翻转的选项) # CONFIG_LCD_ST7735_XRES=240 # CONFIG_LCD_ST7735_YRES=320 # CONFIG_LCD_ST7735_XOFFSET=0 # CONFIG_LCD_ST7735_YOFFSET=0 # CONFIG_LCD_ST7735_BGR=y # CONFIG_LCD_ST7735_INVCOLOR=n # lcd_driver st7789 (need lcd, spi1, spi_cmddata, spi_channel) # CONFIG_LCD_ST7789=y # CONFIG_LCD_ST7789_SPIMODE=3 # CONFIG_LCD_ST7789_FREQUENCY=40000000 # st7789的RST引脚是配置的,DC引脚用的是SPI1_RX,BL引脚是写死在 rp2040_st7789.c 里的 LCD_BL # CONFIG_LCD_ST7789_RST_GPIO=10 # 2.8 240x320 st7789 # CONFIG_LCD_ST7789_XRES=240 # CONFIG_LCD_ST7789_YRES=320 # CONFIG_LCD_ST7789_XOFFSET=0 # CONFIG_LCD_ST7789_YOFFSET=0 # CONFIG_LCD_ST7789_MIRRORX=n # CONFIG_LCD_ST7789_MIRRORY=n # CONFIG_LCD_ST7789_INVCOLOR=y # CONFIG_LCD_ST7789_BGR=n # 2.8 240x320 ili9341(兼容st7789驱动) # CONFIG_LCD_ST7789_XRES=240 # CONFIG_LCD_ST7789_YRES=320 # CONFIG_LCD_ST7789_XOFFSET=0 # CONFIG_LCD_ST7789_YOFFSET=0 # CONFIG_LCD_ST7789_MIRRORX=y # CONFIG_LCD_ST7789_MIRRORY=n # CONFIG_LCD_ST7789_INVCOLOR=n # CONFIG_LCD_ST7789_BGR=y # lcd_driver ili9341 (need lcd, spi1, spi_cmddata) # 暂时测试未成功,rp2040没找到哪里有c文件来实现它的内容,也不知道引脚怎么配置 # CONFIG_LCD_ILI9341=y # CONFIG_LCD_ILI9341_NINTERFACES=1 # CONFIG_LCD_ILI9341_IFACE0=y # CONFIG_LCD_ILI9341_IFACE0_WIDTH=240 # CONFIG_LCD_ILI9341_IFACE0_HEIGHT=320 # CONFIG_LCD_ILI9341_IFACE0_LANDSCAPE=y # fb (need lcd) # CONFIG_DRIVERS_VIDEO=y # CONFIG_VIDEO_FB=y # CONFIG_EXAMPLES_FB=y # fbcon (need fb, pipes, posix_spawn) # 暂时不能生效,运行程序后卡死,CPU状态灯闪烁 # CONFIG_EXAMPLES_FBCON=y # nx (need lcd) # CONFIG_NX=y # CONFIG_NXFONTS_PACKEDMSFIRST=y # CONFIG_NXFONT_SANS20X26=y # CONFIG_NX_BLOCKING=y # CONFIG_NX_DISABLE_1BPP=y # 如果是单色屏,要开启 1BPP 支持 # CONFIG_NX_DISABLE_16BPP=n # 如果是彩屏,要开启 16BPP 支持(LCD的默认色深是16BPP) # CONFIG_NX_PACKEDMSFIRST is not set # NX 服务器需要 POSIX 消息队列中单个消息的最大字节数至少为 64 # CONFIG_MQ_MAXMSGSIZE=64 # nx examples (need nx) # BPP根据屏幕色深选择,单色屏选1BPP,彩屏选16BPP # CONFIG_EXAMPLES_NX=y # CONFIG_EXAMPLES_NX_BPP=16 # CONFIG_EXAMPLES_NXDEMO=y # CONFIG_EXAMPLES_NXDEMO_BPP=16 # CONFIG_EXAMPLES_NXHELLO=y # CONFIG_EXAMPLES_NXHELLO_BPP=16 # CONFIG_EXAMPLES_NXLINES=y # CONFIG_EXAMPLES_NXLINES_BPP=16 # 跟 EXAMPLES_NX 会冲突不能同时启用 # CONFIG_EXAMPLES_NXTEXT=y # CONFIG_EXAMPLES_NXTEXT_BPP=16 # CONFIG_EXAMPLES_NXIMAGE=y # CONFIG_EXAMPLES_NXIMAGE_BPP=16 # pipes & fifo # CONFIG_PIPES=y # 管道是一种经典的进程间通信(IPC)机制,主要用于在两个进程(或线程)之间传递数据流 # task # CONFIG_TLS_TASK_NELEM=4 # libuv (need pipes, task) # CONFIG_LIBUV=y # elf # CONFIG_ELF=y # posix_spawn # NuttX 中启用 POSIX 标准的进程执行函数 的配置选项。启用后,系统会支持 execl()、execv()、execle()、execvp() 等 exec 系列函数 # 这些函数用于在当前进程中加载并执行新的程序(替换当前进程的代码、数据和堆栈) # CONFIG_LIBC_EXECFUNCS=y # envpath # CONFIG_LIBC_ENVPATH=y # posix_timers # CONFIG_DISABLE_POSIX_TIMERS=n # pthread_mutex_types # CONFIG_PTHREAD_MUTEX_TYPES=y # 启用多种类型的 POSIX 线程互斥锁(pthread mutex),包括普通互斥锁、递归互斥锁和错误检测互斥锁,以满足不同的同步需求 # symlink # 启用伪文件系统(如 /proc)的软链接(符号链接)支持 # CONFIG_PSEUDOFS_SOFTLINKS=y # syspopen (need pipes) # CONFIG_SYSTEM_POPEN=y # 进程间通信:启用系统级的 popen() 和 pclose() 函数,需要在程序中执行外部命令并进行数据交互(如获取命令输出、向命令输入数据) # syssystem # CONFIG_SYSTEM_SYSTEM=y # 启用 system() 函数 的配置项,该函数是标准 C 库中的系统调用接口,核心作用是在程序中执行外部命令 # dlfcn # CONFIG_LIBC_DLFCN=y # 启用标准 C 库中的动态加载接口(dlfcn.h),包括 dlopen()、dlsym()、dlclose() 等函数,用于动态加载和卸载共享库 # ws2812 # CONFIG_WS2812=y # CONFIG_RP2040_BOARD_HAS_WS2812=y # CONFIG_RP2040_WS2812_GPIO_PIN=17 # ws2812的灯珠数量(16x16) # CONFIG_WS2812_LED_COUNT=256 # CONFIG_EXAMPLES_WS2812=y # python # 暂时编译未通过,说缺少网络相关的posix接口 # CONFIG_INTERPRETER_CPYTHON=y # CONFIG_LIB_ZLIB=y # CONFIG_EXPERIMENTAL=y # quickjs (need syspopen, dlfcn) # CONFIG_INTERPRETERS_QUICKJS=y # CONFIG_INTERPRETERS_QUICKJS_BIGNUM=y # CONFIG_INTERPRETERS_QUICKJS_NONE=n # 无交互环境,只能通过 qjs test.js 来执行脚本 # CONFIG_INTERPRETERS_QUICKJS_MINI=n # 简单交互环境,通过 nsh> qjs -e "console.log(2 + 3)" 来执行脚本 # CONFIG_INTERPRETERS_QUICKJS_FULL=y # (need symlink) 完整交互,nsh> qjs 进入,需要的内存比较大 # duktape # 另一个js引擎,没quickjs小巧,性能也不如它,但是编译起来简单,没啥依赖 # CONFIG_INTERPRETERS_DUKTAPE=y # bas # BASIC 解释器 # CONFIG_INTERPRETERS_BAS=y # minibasic # 另一个 BASIC 解释器 # CONFIG_INTERPRETERS_MINIBASIC=y # CONFIG_INTERPRETER_MINIBASIC_TESTSCRIPT=y # lua # CONFIG_INTERPRETERS_LUA=y # 可选模块 # CONFIG_LUA_CJSON_MODULE=y # CONFIG_LUA_LFS_MODULE=y # (need symlink) # sqlite (need fs, passwd, symlink, syspopen, syssystem, dlfcn, pthread_mutex_types) # 当前能编译成功,但没在pico上看到 sqlite3 这个命令,不知道是不是文件系统没起来的原因(sim:sqlite里是正常的) # CONFIG_LIB_SQLITE=y # CONFIG_UTILS_SQLITE=y # fs # CONFIG_FS_LARGEFILE=y # 启用大文件支持(文件大小超过4GB) # CONFIG_FS_LOCK_BUCKET_SIZE=4 # disable_mountpoint # CONFIG_DISABLE_MOUNTPOINT=n # 启用文件系统挂载点支持 # procfs # 启用 /proc 虚拟文件系统,用于提供系统和进程信息的接口 CONFIG_FS_PROCFS=y CONFIG_FS_PROCFS_REGISTER=y # rp2040_falsh_smartfs # 将主 Flash 的剩余空间当作 smartfs 文件系统,大小受 CONFIG_RP2040_FLASH_LENGTH 影响 # 该文件系统的初始化写在 arch/arm/src/rp2040/rp2040_flash_initialize.S # 注:每次重新烧录都会重新初始化一次该文件系统,导致之前的文件丢失,暂时不知道怎么解决 CONFIG_RP2040_FLASH_FILE_SYSTEM=y CONFIG_SMARTFS_ALIGNED_ACCESS=y # fatfs (need mmcsd) # 会自动挂载在 /mnt/sd0 # CONFIG_FS_FAT=y # 启用 FAT 文件系统支持 # CONFIG_FAT_LFN=y # 启用长文件名支持 # CONFIG_FAT_LCNAMES=y # 启用 NT 风格的大小写文件名支持 # nfs # 网络文件系统(未测试) # CONFIG_NFS=y # CONFIG_NFS_STATISTICS=y # tmpfs # 临时文件系统,需要手动挂载才能出现 # mount -t tmpfs tmpfs /tmp # CONFIG_FS_TMPFS=y # binfs (need posix_spawn, nsh_run_apps) # 二进制文件系统,将编译时指定的二进制数据(如固件、资源文件等)以文件系统的形式挂载到系统中,方便应用程序访问 # mount -t binfs none /bin # CONFIG_FS_BINFS=y # romfs # 只读文件系统 # CONFIG_FS_ROMFS=y # etcfs (need romfs, disable_mountpoint=n) # 1. 在 nuttx/boards/arm/rp2040/raspberrypi-pico/src 下放置 etc 目录,里面放 init.d、passwd、group 等文件 # 注:common 下面也有个 etc:boards/arm/rp2040/common/board/etc,估计如果上面不自己建一个,就用 common 下面的默认的 # 2. 配置 src/Make.defs,添加 RCSRCS 和 RCRAWS # ifeq ($(CONFIG_ETC_ROMFS),y) # RCSRCS = etc/init.d/rc.sysinit etc/init.d/rcS etc/.nshrc # RCRAWS = etc/group etc/passwd # endif # 登录后,会自动执行 rc.sysinit 和 rcS 脚本 # CONFIG_ETC_ROMFS=y # CONFIG_ETC_ROMFSMOUNTPT="/etc" # CONFIG_FS_TMPFS_LITTLEFS=y # spiffs # CONFIG_IDLETHREAD_STACKSIZE=4096 # CONFIG_INIT_ENTRYPOINT="fstest_main" # CONFIG_LIBC_RAND_ORDER=3 # CONFIG_MTD=y # CONFIG_RAMMTD=y # CONFIG_RAMMTD_FLASHSIM=y # CONFIG_FS_SPIFFS=y # CONFIG_SPIFFS_CHECK_ONMOUNT=y # CONFIG_TESTING_FSTEST=y # CONFIG_TESTING_FSTEST_MOUNTPT="/mnt/spiffs" # CONFIG_TESTING_FSTEST_NLOOPS=10 # passwd # CONFIG_FSUTILS_PASSWD=y # CONFIG_FSUTILS_PASSWD_READONLY=y # zmodem (need posix_timers) # 可以编译,用 SecureCRT 接收文件终端有输出,但会打印乱码,接收到的文件大小为0,不知道是usb cdc的问题还是其他问题 # CONFIG_SYSTEM_ZMODEM=y # CONFIG_SYSTEM_ZMODEM_DEVNAME="/dev/ttyACM0" # usb cdc 终端 # CONFIG_SYSTEM_ZMODEM_MOUNTPOINT="/mnt/sd0" # 接收的文件存放位置,或用tmpfs:"=/tmp" # vi # vi 文本编辑器 # CONFIG_SYSTEM_VI=y # w5500 (need net) CONFIG_NET_W5500=y # net (need workqueue) CONFIG_NET=y CONFIG_NET_TCP=y CONFIG_NET_UDP=y CONFIG_NET_BROADCAST=y CONFIG_NET_ICMP_SOCKET=y CONFIG_NET_LOOPBACK=y # 域名解析工具:nslookup www.baidu.com CONFIG_NET_STATISTICS=y CONFIG_NET_TCP_WRITE_BUFFERS=y CONFIG_NET_ETH_PKTSIZE=1516 # dns 8.8.8.8 CONFIG_NETDB_DNSCLIENT=y CONFIG_NETDB_DNSSERVER_IPv4ADDR=0x08080808 # net_init_config (ip:192.168.137.2,route:192.168.137.1,netmask:255.255.255.0) CONFIG_NETINIT_DHCPC=n CONFIG_NETINIT_IPADDR=0xC0A88902 CONFIG_NETINIT_DRIPADDR=0xC0A88901 CONFIG_NETINIT_NETMASK=0xffffff00 CONFIG_NETINIT_MACADDR_1=0xdeadcafe CONFIG_NETINIT_NOMAC=y CONFIG_NETINIT_THREAD=y # net_tools CONFIG_NETUTILS_DHCPC=y CONFIG_NETUTILS_IPERF=y CONFIG_NETUTILS_WEBCLIENT=y # Web 客户端,可以通过 wget 下载文件?但好像下载失败,还没研究出怎么用 CONFIG_NETUTILS_WEBSERVER=y # Web 服务器 CONFIG_NETUTILS_TELNETD=y # Telnet 服务器,类似 ssh 的远程连接,PC上:telnet 192.168.137.2 CONFIG_NETUTILS_PPPD=y # PPPD 客户端 / 服务端 (AI说两者都可以,通过运行时配置来修改角色,没测试过) # net_dev CONFIG_NETDEV_WORK_THREAD=y # net_system_tool CONFIG_SYSTEM_PING=y CONFIG_SYSTEM_DHCPC_RENEW=y # dhcp 自动获取 ip:renew eth0 # net_example CONFIG_EXAMPLES_PPPD=y CONFIG_EXAMPLES_WEBSERVER=y # Web 服务器测试 CONFIG_EXAMPLES_WEBSERVER_DHCPC=y # workqueue # 工作队列 CONFIG_SCHED_LPWORK=y # rndis (need usb, net) # 测试未通过,插上后有显示 rndis 设备,但是有黄色感叹号,无法被 win 正常识别,而在 linux 系统则初始化失败:rndis_host 1-2.1:1.0: RNDIS init failed, -110 # CONFIG_RNDIS=y # cdc_ecm (need usb, net) # 测试失败,跟 RNDIS 同样的配置,但电脑无法识别到 USB 设备 # CONFIG_NET_CDCECM=y # adb (need usb, libuv, posix_spawn) # 连接后能识别出 adb 设备,但一直处于离线状态,在 nsh 里运行 adbd,报 adb_hal_run (77): uv_loop exit 0 的错,可能跟 libuv 或 posix_spawn 有关? # CONFIG_USBADB=y # CONFIG_SYSTEM_ADBD=y
ESP32S3:
# CONFIG_ARCH_LEDS is not set # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_HEXDUMP is not set CONFIG_ARCH="xtensa" CONFIG_ARCH_BOARD="esp32s3-devkit" CONFIG_ARCH_BOARD_COMMON=y CONFIG_ARCH_BOARD_ESP32S3_DEVKIT=y CONFIG_ARCH_CHIP="esp32s3" CONFIG_ARCH_CHIP_ESP32S3=y CONFIG_ARCH_CHIP_ESP32S3WROOM1N4=y CONFIG_ARCH_INTERRUPTSTACK=2048 CONFIG_ARCH_STACKDUMP=y CONFIG_ARCH_XTENSA=y CONFIG_BOARD_LOOPSPERMSEC=16717 CONFIG_BUILTIN=y CONFIG_DEBUG_FULLOPT=y CONFIG_DEBUG_SYMBOLS=y CONFIG_ESP32S3_UART0=y CONFIG_FS_PROCFS=y CONFIG_HAVE_CXX=y CONFIG_HAVE_CXXINITIALIZE=y CONFIG_IDLETHREAD_STACKSIZE=3072 CONFIG_INIT_ENTRYPOINT="nsh_main" CONFIG_INIT_STACKSIZE=3072 CONFIG_INTELHEX_BINARY=y CONFIG_LINE_MAX=64 CONFIG_NSH_ARCHINIT=y CONFIG_NSH_BUILTIN_APPS=y CONFIG_NSH_FILEIOSIZE=512 CONFIG_NSH_READLINE=y CONFIG_PREALLOC_TIMERS=4 CONFIG_RAM_SIZE=114688 CONFIG_RAM_START=0x20000000 CONFIG_RR_INTERVAL=200 CONFIG_SCHED_WAITPID=y CONFIG_START_DAY=6 CONFIG_START_MONTH=12 CONFIG_START_YEAR=2011 CONFIG_SYSLOG_BUFFER=y CONFIG_SYSTEM_NSH=y CONFIG_UART0_SERIAL_CONSOLE=y # uart # uart0 CONFIG_ESP32S3_UART0=y CONFIG_ESP32S3_UART0_TXPIN=43 CONFIG_ESP32S3_UART0_RXPIN=44 # uart1 CONFIG_ESP32S3_UART1=y CONFIG_ESP32S3_UART1_TXPIN=7 CONFIG_ESP32S3_UART1_RXPIN=6 # i2c # CONFIG_I2C_RESET=y # CONFIG_SYSTEM_I2CTOOL=y # CONFIG_I2CTOOL_MAXBUS=1 # CONFIG_I2CTOOL_DEFFREQ=400000 # 不要打开调试 # CONFIG_DEBUG_I2C=y # CONFIG_DEBUG_I2C_ERROR=y # CONFIG_DEBUG_I2C_INFO=y # CONFIG_DEBUG_I2C_WARN=y # CONFIG_I2C_TRACE=y # i2c0 # CONFIG_ESP32S3_I2C0=y # CONFIG_ESP32S3_I2C0_SCLPIN=17 # CONFIG_ESP32S3_I2C0_SDAPIN=18 # lcd (need ldc_driver) # CONFIG_LCD=y # CONFIG_LCD_DEV=y # CONFIG_LCD_FRAMEBUFFER=y # CONFIG_LCD_PORTRAIT=n # 竖屏模式 # CONFIG_LCD_LANDSCAPE=y # 横屏模式 # lcd_driver ssd1306 (need lcd, i2c) # CONFIG_LCD_MAXCONTRAST=255 # CONFIG_LCD_SH1106_OLED_132=y # CONFIG_LCD_SSD1306_I2C=y # CONFIG_SSD1306_I2CFREQ=400000 # fb (need lcd) # CONFIG_DRIVERS_VIDEO=y # CONFIG_VIDEO_FB=y # CONFIG_EXAMPLES_FB=y # gpio # 引脚数量配置在 board.h 里,引脚序号配置在 esp32s3_gpio.c 里 # nsh> echo 0 > /dev/gpio0 # nsh> echo 1 > /dev/gpio0 # CONFIG_DEV_GPIO=y # CONFIG_ESP32S3_GPIO_IRQ=y # CONFIG_EXAMPLES_GPIO=y # nx (need lcd) # CONFIG_NX=y # CONFIG_NXFONTS_PACKEDMSFIRST=y # CONFIG_NXFONT_SANS20X26=y # CONFIG_NX_BLOCKING=y # CONFIG_NX_DISABLE_1BPP=n # 如果是单色屏,要开启 1BPP 支持 # CONFIG_NX_DISABLE_16BPP=n # 如果是彩屏,要开启 16BPP 支持(LCD的默认色深是16BPP) # CONFIG_NX_PACKEDMSFIRST is not set # NX 服务器需要 POSIX 消息队列中单个消息的最大字节数至少为 64 # CONFIG_MQ_MAXMSGSIZE=64 # nx examples (need nx) # BPP根据屏幕色深选择,单色屏选1BPP,彩屏选16BPP # CONFIG_EXAMPLES_NXDEMO=y # CONFIG_EXAMPLES_NXDEMO_BPP=1 # ymodem / zmodem # 只能用 SecureCRT # sb 有效,接收的文件保存在电脑的Download # rb 无效,未响应 # sz 无效,未响应 # rz 无效,在终端打印乱码,接收到的文件大小为0 # CONFIG_SYSTEM_YMODEM=y # CONFIG_SYSTEM_ZMODEM=y # CONFIG_SYSTEM_ZMODEM_DEVNAME="/dev/ttyS0" # CONFIG_SYSTEM_ZMODEM_MOUNTPOINT="/tmp" # chat # AT交互,还未验证成功 CONFIG_EXAMPLES_CHAT=y CONFIG_EXAMPLES_CHAT_TTY_DEVNODE="/dev/ttyS1"
ESP32C3:
# license # 版权相关,建议全部打开,否则有些开源模块无法打开 CONFIG_ALLOW_BSD_COMPONENTS=y CONFIG_ALLOW_GPL_COMPONENTS=y CONFIG_ALLOW_MIT_COMPONENTS=y CONFIG_ALLOW_ECLIPSE_COMPONENTS=y CONFIG_ALLOW_ICS_COMPONENTS=y # experimental # 开启实验性功能 CONFIG_EXPERIMENTAL=y # CONFIG_NSH_ARGCAT is not set # CONFIG_NSH_CMDOPT_HEXDUMP is not set CONFIG_ARCH="risc-v" CONFIG_ARCH_BOARD="esp32c3-generic" CONFIG_ARCH_BOARD_COMMON=y CONFIG_ARCH_BOARD_ESP32C3_GENERIC=y CONFIG_ARCH_CHIP="esp32c3" CONFIG_ARCH_CHIP_ESP32C3_GENERIC=y CONFIG_ARCH_INTERRUPTSTACK=1536 CONFIG_ARCH_RISCV=y CONFIG_ARCH_STACKDUMP=y CONFIG_BOARDCTL_RESET=y CONFIG_BOARD_LOOPSPERMSEC=15000 CONFIG_BUILTIN=y CONFIG_IDLETHREAD_STACKSIZE=2048 CONFIG_INIT_ENTRYPOINT="nsh_main" CONFIG_INTELHEX_BINARY=y CONFIG_LIBC_PERROR_STDOUT=y CONFIG_LIBC_STRERROR=y CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 CONFIG_NSH_ARCHINIT=y CONFIG_NSH_BUILTIN_APPS=y CONFIG_NSH_FILEIOSIZE=512 CONFIG_NSH_READLINE=y CONFIG_NSH_STRERROR=y CONFIG_PREALLOC_TIMERS=0 CONFIG_RR_INTERVAL=200 CONFIG_SCHED_BACKTRACE=y CONFIG_SCHED_WAITPID=y CONFIG_START_DAY=29 CONFIG_START_MONTH=11 CONFIG_START_YEAR=2019 CONFIG_SYSTEM_DUMPSTACK=y CONFIG_SYSTEM_NSH=y CONFIG_TESTING_GETPRIME=y CONFIG_TESTING_OSTEST=y # console # 串口终端跟USB终端只能启用一个 # uart0_serial_console (need uart0) # CONFIG_UART0_SERIAL_CONSOLE=y # usb_serial_console CONFIG_ESPRESSIF_USBSERIAL=y # uart0 # CONFIG_ESPRESSIF_UART0=y # wifi (need fs, net_tools, protocols, security) CONFIG_ESPRESSIF_WIFI=y # 启用乐鑫芯片的 Wi-Fi 驱动(如 ESP32 的 Wi-Fi 功能),支持连接无线网络、数据收发等基础 Wi-Fi 操作 CONFIG_ESPRESSIF_WIFI_STATION_SOFTAP=y # Station + SoftAP(SoftAP 需要开启 dhcp 服务,才能给客户端分配 IP 地址) CONFIG_ESPRESSIF_WIFI_SOFTAP_DEFAULT_SSID="NuttX" CONFIG_ESPRESSIF_WIFI_SOFTAP_DEFAULT_PASSWORD="11111111" CONFIG_NETINIT_WAPI_SSID="Jeason" CONFIG_NETINIT_WAPI_PASSPHRASE="11111111" CONFIG_ARCH_INTERRUPTSTACK=2048 CONFIG_DRIVERS_IEEE80211=y # 启用 IEEE 802.11 无线局域网(Wi-Fi)驱动框架,支持符合 802.11 标准的无线网卡或芯片(如 ESP32 的 Wi-Fi 模块) CONFIG_DRIVERS_WIRELESS=y # 启用无线设备通用驱动支持,是各类无线通信(如 Wi-Fi、蓝牙)驱动的总开关,需与具体无线技术驱动(如 CONFIG_ESPRESSIF_WIFI)配合使用 CONFIG_EXAMPLES_RANDOM=y CONFIG_INIT_STACKSIZE=8192 CONFIG_IOB_BUFSIZE=128 CONFIG_IOB_NBUFFERS=160 CONFIG_IOB_THROTTLE=24 CONFIG_PTHREAD_MUTEX_TYPES=y CONFIG_SCHED_LPWORK=y CONFIG_SIG_DEFAULT=y CONFIG_TLS_TASK_NELEM=4 # net_tools # 网络设备管理与工具配置 CONFIG_NETDEV_LATEINIT=y # 启用网络设备的延迟初始化功能,允许网络设备驱动在系统启动后稍后阶段进行初始化,有助于解决某些设备的初始化顺序问题 CONFIG_NETDEV_PHY_IOCTL=y # 启用对网络物理层设备(PHY)的 IO 控制接口支持,允许通过 ioctl 系统调用配置和控制 PHY 设备的参数(如速率、双工模式等) CONFIG_NETDEV_WIRELESS_IOCTL=y # 启用对无线网络设备的 IO 控制接口支持,允许通过 ioctl 系统调用配置和控制无线设备的参数(如 SSID、加密方式等) CONFIG_NETDEV_WORK_THREAD=y # 启用网络设备的工作线程支持,允许网络设备驱动在独立线程中处理数据收发和事件,提高网络性能和响应速度 CONFIG_NETUTILS_CJSON=y CONFIG_NETUTILS_IPERF=y # 启用 iperf 网络性能测试工具,iperf 用于测量网络带宽和性能,支持 TCP 和 UDP 测试模式 CONFIG_SYSTEM_DHCPC_RENEW=y CONFIG_SYSTEM_PING=y CONFIG_NETUTILS_DHCPD=y CONFIG_EXAMPLES_DHCPD=y # protocols # 网络协议配置 CONFIG_NETDB_DNSCLIENT=y # 启用 DNS 客户端功能,支持通过域名(如 www.example.com)解析 IP 地址,依赖网络协议栈实现域名查询。 CONFIG_NET_BROADCAST=y # 启用网络广播支持,允许通过广播地址发送数据包,实现局域网内的设备发现和通信 CONFIG_NET_ETH_PKTSIZE=1514 CONFIG_NET_ICMP_SOCKET=y CONFIG_NET_TCP=y CONFIG_NET_TCP_DELAYED_ACK=y CONFIG_NET_TCP_WRITE_BUFFERS=y CONFIG_NET_UDP=y # security # 安全协议与软件许可配置 CONFIG_ALLOW_BSD_COMPONENTS=y # 允许在系统中使用 BSD 许可的组件(如部分网络协议实现、驱动等)。BSD 许可相对宽松,允许闭源使用,此配置用于兼容这类第三方组件 CONFIG_WIRELESS=y # 总开关:启用无线通信功能,是所有无线相关配置(如 Wi-Fi、WAPI)的基础 CONFIG_WIRELESS_WAPI=y # 启用 WAPI(无线局域网鉴别和保密基础结构),这是中国自主的 Wi-Fi 安全协议,用于替代 WPA/WPA2 的加密和认证机制 CONFIG_WIRELESS_WAPI_CMDTOOL=y # 启用 WAPI 命令行工具支持,允许通过命令行界面配置和管理 WAPI 相关参数(如密钥、认证方式等) CONFIG_WIRELESS_WAPI_INITCONF=y # 启用 WAPI 初始化配置,系统启动时会加载预设的 WAPI 配置参数,确保无线连接的安全性和稳定性 # fs CONFIG_FS_PROCFS=y # 启用 procfs 文件系统支持,procfs 是一个虚拟文件系统,提供对内核和进程信息的访问接口,常用于调试和监控系统状态 CONFIG_ESPRESSIF_SPIFLASH=y # 启用乐鑫(Espressif)芯片的 SPI Flash 驱动(如 ESP32/ESP8266 内置的 SPI Flash),支持对 Flash 进行读写操作 CONFIG_ESPRESSIF_SPIFLASH_SPIFFS=y # 在乐鑫 SPI Flash 上启用 SPIFFS 文件系统。SPIFFS 是专为 SPI Flash 设计的轻量级文件系统,适合存储小文件(如配置文件、网页资源) CONFIG_ESPRESSIF_SPIFLASH_FS_MOUNT_PT="/data" # rndis # 编译失败 # CONFIG_RNDIS=y # CONFIG_NET_LL_GUARDSIZE=62 # CONFIG_NETINIT_NOMAC=y

浙公网安备 33010602011771号