Zephyr Shell完全指南

Zephyr Shell完全指南:嵌入式系统的交互式命令行

引言

在嵌入式系统开发中,Shell是一个强大的交互式工具,它允许开发者通过命令行接口与设备进行实时交互。Zephyr RTOS提供了功能丰富的Shell子系统,支持多种传输方式、命令扩展和动态配置。本文将详细介绍Zephyr Shell的功能、特性、用法以及常用命令。


一、Shell是什么?

1.1 定义与定位

Zephyr Shell 是Zephyr RTOS提供的交互式命令行子系统,它允许用户通过串口、网络或其他传输方式与设备进行交互,执行各种调试、配置和管理操作。

1.2 核心价值

特性 说明
实时交互 通过命令行实时控制设备
调试支持 查看系统状态、内存、线程等信息
动态配置 运行时修改系统参数
命令扩展 支持自定义命令注册
多传输方式 支持串口、Telnet、USB等多种传输

1.3 Shell架构

#mermaid-svg-kP8Y9b1LWvfU6cSc{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-kP8Y9b1LWvfU6cSc .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-kP8Y9b1LWvfU6cSc .error-icon{fill:#552222;}#mermaid-svg-kP8Y9b1LWvfU6cSc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kP8Y9b1LWvfU6cSc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kP8Y9b1LWvfU6cSc .marker.cross{stroke:#333333;}#mermaid-svg-kP8Y9b1LWvfU6cSc svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kP8Y9b1LWvfU6cSc p{margin:0;}#mermaid-svg-kP8Y9b1LWvfU6cSc .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kP8Y9b1LWvfU6cSc .cluster-label text{fill:#333;}#mermaid-svg-kP8Y9b1LWvfU6cSc .cluster-label span{color:#333;}#mermaid-svg-kP8Y9b1LWvfU6cSc .cluster-label span p{background-color:transparent;}#mermaid-svg-kP8Y9b1LWvfU6cSc .label text,#mermaid-svg-kP8Y9b1LWvfU6cSc span{fill:#333;color:#333;}#mermaid-svg-kP8Y9b1LWvfU6cSc .node rect,#mermaid-svg-kP8Y9b1LWvfU6cSc .node circle,#mermaid-svg-kP8Y9b1LWvfU6cSc .node ellipse,#mermaid-svg-kP8Y9b1LWvfU6cSc .node polygon,#mermaid-svg-kP8Y9b1LWvfU6cSc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kP8Y9b1LWvfU6cSc .rough-node .label text,#mermaid-svg-kP8Y9b1LWvfU6cSc .node .label text,#mermaid-svg-kP8Y9b1LWvfU6cSc .image-shape .label,#mermaid-svg-kP8Y9b1LWvfU6cSc .icon-shape .label{text-anchor:middle;}#mermaid-svg-kP8Y9b1LWvfU6cSc .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-kP8Y9b1LWvfU6cSc .rough-node .label,#mermaid-svg-kP8Y9b1LWvfU6cSc .node .label,#mermaid-svg-kP8Y9b1LWvfU6cSc .image-shape .label,#mermaid-svg-kP8Y9b1LWvfU6cSc .icon-shape .label{text-align:center;}#mermaid-svg-kP8Y9b1LWvfU6cSc .node.clickable{cursor:pointer;}#mermaid-svg-kP8Y9b1LWvfU6cSc .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-kP8Y9b1LWvfU6cSc .arrowheadPath{fill:#333333;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kP8Y9b1LWvfU6cSc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kP8Y9b1LWvfU6cSc .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-kP8Y9b1LWvfU6cSc .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kP8Y9b1LWvfU6cSc .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-kP8Y9b1LWvfU6cSc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kP8Y9b1LWvfU6cSc .cluster text{fill:#333;}#mermaid-svg-kP8Y9b1LWvfU6cSc .cluster span{color:#333;}#mermaid-svg-kP8Y9b1LWvfU6cSc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kP8Y9b1LWvfU6cSc .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-kP8Y9b1LWvfU6cSc rect.text{fill:none;stroke-width:0;}#mermaid-svg-kP8Y9b1LWvfU6cSc .icon-shape,#mermaid-svg-kP8Y9b1LWvfU6cSc .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-kP8Y9b1LWvfU6cSc .icon-shape p,#mermaid-svg-kP8Y9b1LWvfU6cSc .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-kP8Y9b1LWvfU6cSc .icon-shape .label rect,#mermaid-svg-kP8Y9b1LWvfU6cSc .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-kP8Y9b1LWvfU6cSc .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-kP8Y9b1LWvfU6cSc .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-kP8Y9b1LWvfU6cSc :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 用户输入
Shell核心
命令解析器
命令匹配
内置命令
自定义命令
模块命令
kernel
device
log
应用命令
sensor
gpio
flash
执行结果
输出响应


二、Shell特性详解

2.1 传输方式支持

传输类型 配置选项 适用场景
串口(UART) CONFIG_SHELL_BACKEND_SERIAL 最常用的调试方式
Telnet CONFIG_SHELL_BACKEND_TELNET 远程网络调试
USB CDC CONFIG_SHELL_BACKEND_USB USB虚拟串口
RTT CONFIG_SHELL_BACKEND_RTT Segger RTT高速传输

2.2 命令特性

特性 说明
命令自动补全 Tab键自动补全命令和参数
历史记录 上下箭头键浏览历史命令
命令帮助 -h参数显示命令帮助
参数解析 支持多种参数类型和格式
命令分组 模块化组织命令结构

2.3 配置选项

conf 复制代码
# prj.conf Shell配置示例

# 启用Shell子系统
CONFIG_SHELL=y

# 启用串口后端
CONFIG_SHELL_BACKEND_SERIAL=y

# 启用命令历史记录
CONFIG_SHELL_HISTORY=y

# 启用命令自动补全
CONFIG_SHELL_TAB=y
CONFIG_SHELL_TAB_AUTOCOMPLETION=y

# 启用帮助信息
CONFIG_SHELL_HELP=y
CONFIG_SHELL_HELP_ON_ALL=y

# 启用参数解析
CONFIG_SHELL_CMDS_SELECT=y

# Shell栈大小
CONFIG_SHELL_STACK_SIZE=2048

三、Shell使用方法

3.1 启用Shell

步骤一:添加配置

conf 复制代码
# prj.conf
CONFIG_SHELL=y
CONFIG_SHELL_BACKEND_SERIAL=y
CONFIG_KERNEL_SHELL=y
CONFIG_DEVICE_SHELL=y
CONFIG_LOG_SHELL=y

步骤二:代码集成

c 复制代码
#include <zephyr/shell/shell.h>
#include <zephyr/shell/shell_uart.h>

/* Shell实例声明 */
SHELL_UART_DEFINE(shell_transport_uart);

SHELL_DEFINE(shell_instance, "zephyr:~$ ", &shell_transport_uart, 
             10, SHELL_FLAG_OLF_CRLF);

void main(void) {
    /* 启动Shell */
    shell_init(&shell_instance);
    
    while (1) {
        k_msleep(1000);
    }
}

3.2 连接Shell

通过串口连接

bash 复制代码
# Linux/macOS
minicom -D /dev/ttyUSB0 -b 115200

# 或使用picocom
picocom -b 115200 /dev/ttyUSB0

# Windows
# 使用PuTTY或Tera Term连接串口

连接后输出示例

复制代码
uart:~$ 
uart:~$ help
Help commands:
kernel          - Kernel commands
device          - Device commands
log             - Log commands
shell           - Shell commands

3.3 Shell交互示例

bash 复制代码
uart:~$ kernel version
Zephyr version 3.5.0

uart:~$ kernel threads
Threads:
  [0] main       READY   P:0  STACK:2048
  [1] idle       READY   P:0  STACK:512
  [2] shell      RUNNING P:5  STACK:2048

uart:~$ device list
Devices:
  - uart@40000000
  - gpio@40000001
  - flash@40000002

四、常用命令详解

4.1 kernel命令组

4.1.1 kernel version

功能:显示Zephyr版本信息

bash 复制代码
uart:~$ kernel version
Zephyr version 3.5.0
4.1.2 kernel threads

功能:显示系统线程列表

bash 复制代码
uart:~$ kernel threads
Threads:
  [0] main       READY   P:0  STACK:2048  USED:256
  [1] idle       READY   P:0  STACK:512   USED:64
  [2] shell      RUNNING P:5  STACK:2048  USED:512
  [3] log        PENDING P:10 STACK:1024  USED:128

输出字段说明

字段 说明
[n] 线程ID
name 线程名称
state 状态(READY/RUNNING/PENDING)
P:n 优先级
STACK:n 栈大小(字节)
USED:n 已使用栈大小
4.1.3 kernel reboot

功能:重启系统

bash 复制代码
uart:~$ kernel reboot
Rebooting system...
4.1.4 kernel uptime

功能:显示系统运行时间

bash 复制代码
uart:~$ kernel uptime
Uptime: 3600 seconds (1 hours)
4.1.5 kernel suspend

功能:暂停指定线程

bash 复制代码
uart:~$ kernel suspend shell
Thread shell suspended
4.1.6 kernel resume

功能:恢复指定线程

bash 复制代码
uart:~$ kernel resume shell
Thread shell resumed

4.2 device命令组

4.2.1 device list

功能:列出所有设备

bash 复制代码
uart:~$ device list
Devices:
  - uart@40000000 (UART_0)
  - gpio@40000001 (GPIO_0)
  - flash@40000002 (FLASH_0)
  - sensor@40000003 (SENSOR_0)
4.2.2 device get

功能:获取设备信息

bash 复制代码
uart:~$ device get uart@40000000
Device: uart@40000000
  Name: UART_0
  State: Ready
  Driver: uart_nrfx_uarte
4.2.3 device bind

功能:绑定设备驱动

bash 复制代码
uart:~$ device bind gpio@40000001
Device gpio@40000001 bound to driver gpio_nrfx

4.3 log命令组

4.3.1 log enable

功能:启用日志模块

bash 复制代码
uart:~$ log enable app
Log module app enabled

uart:~$ log enable all
All log modules enabled
4.3.2 log disable

功能:禁用日志模块

bash 复制代码
uart:~$ log disable app
Log module app disabled
4.3.3 log level

功能:设置日志级别

bash 复制代码
uart:~$ log level err app
Log level for app set to ERROR

uart:~$ log level info all
Log level for all modules set to INFO

日志级别说明

级别 常量 说明
none LOG_LEVEL_NONE 无日志
err LOG_LEVEL_ERR 错误级别
wrn LOG_LEVEL_WRN 警告级别
inf LOG_LEVEL_INF 信息级别
dbg LOG_LEVEL_DBG 调试级别
4.3.4 log list

功能:列出日志模块

bash 复制代码
uart:~$ log list
Log modules:
  - app (level: INFO)
  - kernel (level: ERROR)
  - sensor (level: DBG)
4.3.5 log backend

功能:管理日志后端

bash 复制代码
uart:~$ log backend list
Log backends:
  - uart (enabled)
  - rtt (disabled)

uart:~$ log backend enable uart
Log backend uart enabled

uart:~$ log backend disable uart
Log backend uart disabled

4.4 shell命令组

4.4.1 shell help

功能:显示帮助信息

bash 复制代码
uart:~$ shell help
Shell commands:
  help            - Show help for commands
  history         - Show command history
  clear           - Clear screen
  echo            - Echo arguments
  stats           - Show shell statistics
4.4.2 shell history

功能:显示命令历史

bash 复制代码
uart:~$ shell history
Command history:
  1: kernel version
  2: kernel threads
  3: device list
  4: log enable app
4.4.3 shell clear

功能:清屏

bash 复制代码
uart:~$ shell clear
# 屏幕被清空
uart:~$ 
4.4.4 shell echo

功能:回显参数

bash 复制代码
uart:~$ shell echo Hello World
Hello World

uart:~$ shell echo -n "No newline"
No newlineuart:~$ 
4.4.5 shell stats

功能:显示Shell统计信息

bash 复制代码
uart:~$ shell stats
Shell statistics:
  Commands executed: 25
  Commands failed: 2
  History size: 10
  Buffer size: 256

4.5 sensor命令组

4.5.1 sensor get

功能:读取传感器数据

bash 复制代码
uart:~$ sensor get sensor@40000003
Sensor: sensor@40000003
  Temperature: 25.5 °C
  Humidity: 60.2 %
  Pressure: 1013.25 hPa
4.5.2 sensor list

功能:列出传感器设备

bash 复制代码
uart:~$ sensor list
Sensors:
  - sensor@40000003 (TEMP_SENSOR)
  - sensor@40000004 (LIGHT_SENSOR)

4.6 flash命令组

4.6.1 flash read

功能:读取Flash数据

bash 复制代码
uart:~$ flash read 0x08000000 256
Reading 256 bytes from 0x08000000:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
...
4.6.2 flash write

功能:写入Flash数据

bash 复制代码
uart:~$ flash write 0x08000000 "Hello World"
Writing 11 bytes to 0x08000000
Write successful
4.6.3 flash erase

功能:擦除Flash扇区

bash 复制代码
uart:~$ flash erase 0x08000000 4096
Erasing 4096 bytes from 0x08000000
Erase successful

4.7 gpio命令组

4.7.1 gpio config

功能:配置GPIO引脚

bash 复制代码
uart:~$ gpio config gpio@40000001 0 output
GPIO 0 configured as output

uart:~$ gpio config gpio@40000001 1 input pull-up
GPIO 1 configured as input with pull-up
4.7.2 gpio set

功能:设置GPIO输出

bash 复制代码
uart:~$ gpio set gpio@40000001 0 1
GPIO 0 set to 1

uart:~$ gpio set gpio@40000001 0 0
GPIO 0 set to 0
4.7.3 gpio get

功能:读取GPIO输入

bash 复制代码
uart:~$ gpio get gpio@40000001 1
GPIO 1: 1 (HIGH)

五、自定义命令开发

5.1 注册自定义命令

c 复制代码
#include <zephyr/shell/shell.h>

/* 自定义命令处理函数 */
static int cmd_myapp_hello(const struct shell *sh, size_t argc, char **argv) {
    shell_print(sh, "Hello from myapp!");
    
    if (argc > 1) {
        shell_print(sh, "Arguments:");
        for (size_t i = 1; i < argc; i++) {
            shell_print(sh, "  argv[%d]: %s", i, argv[i]);
        }
    }
    
    return 0;
}

/* 定义子命令 */
SHELL_STATIC_SUBCMD_SET_CREATE(sub_myapp,
    SHELL_CMD(hello, NULL, "Print hello message", cmd_myapp_hello),
    SHELL_SUBCMD_SET_END
);

/* 注册命令 */
SHELL_CMD_REGISTER(myapp, &sub_myapp, "My application commands", NULL);

5.2 带参数的命令

c 复制代码
/* 带参数的命令处理函数 */
static int cmd_myapp_config(const struct shell *sh, size_t argc, char **argv) {
    if (argc < 3) {
        shell_error(sh, "Usage: myapp config <key> <value>");
        return -EINVAL;
    }
    
    const char *key = argv[1];
    const char *value = argv[2];
    
    shell_print(sh, "Setting %s = %s", key, value);
    
    return 0;
}

SHELL_CMD_REGISTER(myapp_config, NULL, "Configure myapp", cmd_myapp_config);

5.3 动态命令注册

c 复制代码
/* 动态添加命令 */
static int dynamic_cmd_handler(const struct shell *sh, size_t argc, char **argv) {
    shell_print(sh, "Dynamic command executed");
    return 0;
}

void register_dynamic_command(void) {
    shell_cmd_add("dynamic_cmd", NULL, "Dynamic command", dynamic_cmd_handler);
}

六、高级用法

6.1 命令自动补全

bash 复制代码
uart:~$ ker<Tab>
kernel

uart:~$ kernel v<Tab>
version

uart:~$ kernel version
Zephyr version 3.5.0

6.2 命令历史导航

bash 复制代码
uart:~$ kernel version
uart:~$ kernel threads
uart:~$ <Up Arrow>
kernel threads
uart:~$ <Up Arrow>
kernel version
uart:~$ <Down Arrow>
kernel threads

6.3 管道和重定向

bash 复制代码
# 管道(部分支持)
uart:~$ device list | grep gpio
gpio@40000001 (GPIO_0)

# 输出重定向(需要配置)
uart:~$ kernel threads > /tmp/threads.txt

6.4 脚本执行

bash 复制代码
# 执行脚本文件
uart:~$ shell script /scripts/init.sh
Executing script: init.sh
> kernel version
> device list
> log enable app
Script executed successfully

七、配置详解

7.1 Shell后端配置

conf 复制代码
# 串口后端配置
CONFIG_SHELL_BACKEND_SERIAL=y
CONFIG_SHELL_SERIAL_BACKEND_DEFAULT_INIT_PRIORITY=40

# Telnet后端配置
CONFIG_SHELL_BACKEND_TELNET=y
CONFIG_SHELL_TELNET_PORT=23

# RTT后端配置
CONFIG_SHELL_BACKEND_RTT=y
CONFIG_SHELL_RTT_MODE=BLOCKING

# USB CDC后端配置
CONFIG_SHELL_BACKEND_USB=y
CONFIG_USB_CDC_ACM=y

7.2 Shell功能配置

conf 复制代码
# 命令历史
CONFIG_SHELL_HISTORY=y
CONFIG_SHELL_HISTORY_BUFFER=256

# 自动补全
CONFIG_SHELL_TAB=y
CONFIG_SHELL_TAB_AUTOCOMPLETION=y

# 帮助信息
CONFIG_SHELL_HELP=y
CONFIG_SHELL_HELP_ON_ALL=y
CONFIG_SHELL_HELP_VERBOSE=y

# 参数解析
CONFIG_SHELL_CMDS_SELECT=y
CONFIG_SHELL_ARGC_MAX=10

# 颜色输出
CONFIG_SHELL_VT100_COLORS=y

# 统计信息
CONFIG_SHELL_STATS=y

7.3 模块Shell配置

conf 复制代码
# 内核Shell
CONFIG_KERNEL_SHELL=y

# 设备Shell
CONFIG_DEVICE_SHELL=y

# 日志Shell
CONFIG_LOG_SHELL=y

# 传感器Shell
CONFIG_SENSOR_SHELL=y

# GPIO Shell
CONFIG_GPIO_SHELL=y

# Flash Shell
CONFIG_FLASH_SHELL=y

八、常见问题与解决方案

8.1 Shell无法启动

问题:Shell命令行不显示

解决方案

bash 复制代码
# 检查配置
cat build/zephyr/.config | grep SHELL

# 确认串口连接
minicom -D /dev/ttyUSB0 -b 115200

# 检查Shell栈大小
CONFIG_SHELL_STACK_SIZE=2048

8.2 命令无法执行

问题:输入命令后无响应

解决方案

bash 复制代码
# 检查命令是否注册
uart:~$ help

# 检查命令拼写
uart:~$ kernel<Tab>

# 查看Shell日志
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=4

8.3 命令参数错误

问题:参数解析失败

解决方案

bash 复制代码
# 查看命令帮助
uart:~$ kernel threads -h

# 检查参数格式
uart:~$ log level info app  # 正确格式
uart:~$ log level app info  # 错误格式

8.4 历史记录丢失

问题:无法浏览历史命令

解决方案

conf 复制代码
# 启用历史记录
CONFIG_SHELL_HISTORY=y
CONFIG_SHELL_HISTORY_BUFFER=512

九、命令速查表

9.1 kernel命令

命令 功能 示例
kernel version 显示版本 kernel version
kernel threads 显示线程 kernel threads
kernel reboot 重启系统 kernel reboot
kernel uptime 运行时间 kernel uptime
kernel suspend 暂停线程 kernel suspend shell
kernel resume 恢复线程 kernel resume shell

9.2 device命令

命令 功能 示例
device list 列出设备 device list
device get 获取信息 device get uart@0
device bind 绑定驱动 device bind gpio@0

9.3 log命令

命令 功能 示例
log enable 启用日志 log enable app
log disable 禁用日志 log disable app
log level 设置级别 log level info app
log list 列出模块 log list
log backend 管理后端 log backend list

9.4 shell命令

命令 功能 示例
shell help 显示帮助 shell help
shell history 显示历史 shell history
shell clear 清屏 shell clear
shell echo 回显 shell echo Hello
shell stats 统计信息 shell stats

结束语

Zephyr Shell是嵌入式开发中不可或缺的调试和交互工具。通过本文的介绍,相信您已经掌握了Shell的功能、特性、配置方法和常用命令。

Shell的核心优势在于:

  • 提供实时交互能力,无需重新编译即可调试
  • 支持多种传输方式,适应不同开发场景
  • 模块化命令组织,易于扩展自定义命令
  • 丰富的内置命令,覆盖内核、设备、日志等关键功能

在实际开发中,合理使用Shell可以大大提高调试效率,加速开发进程。建议在所有项目中都启用Shell功能,为后续调试和维护提供便利。


参考资料

相关推荐
ScilogyHunter3 小时前
West工具完全指南
zephyr·west
ScilogyHunter4 小时前
Zephyr SDK 完全指南
zephyr
七夜zippoe4 小时前
OpenClaw 节点命令执行:远程Shell与系统操作实战
github·shell·openclaw·nodes·系统操作
Molesidy1 天前
【Embedded Development】【Zephyr】【Windows】基于STM32的Zephyr移植
stm32·led·zephyr
IAR Systems1 天前
使用IAR Arm工具链开发和调试Zephyr RTOS
arm开发·嵌入式·iar·zephyr
Mr -老鬼3 天前
EasyClick 入门指南:Shell 命令与 ADB 完全指南
android·adb·自动化·shell·easyclick·易点云测
tianyuanwo7 天前
Shell 脚本中的“字典”功能:从基础到工程化的最佳实践
shell·字典
爱睡觉1117 天前
在 Android 模拟器 Shell 下运行 ncnn 推理的性能排查记录
linux·shell
Bolt8 天前
Kimi code 用不了 Figma?看这里解决
shell·mcp