附录系统与固件

/dev 设备节点

本页汇总 p67tc 与 o63 启动脚本及二进制中出现的 /dev 路径。它不是某次开机后的 ls /dev 快照:节点由驱动在运行时注册,机型和启动环境可见的集合并不完全相同。

不要直接试写未知设备

对分区节点执行 dd、重定向或随机 ioctl 可能立即破坏系统;对 watchdog、充电、NFC、触控固件节点误操作也可能造成重启、失去触控或硬件异常。先只读检查节点类型和挂载关系。

分区、块设备与挂载源

o63 使用更细的资源分区布局:/dev/vendor、/dev/system、/dev/app、/dev/misc、/dev/i18n、/dev/font、/dev/watchface、/dev/quickapp、/dev/factory 分别挂载;/dev/data 是 FATFS/exFAT 数据分区,/dev/userlog 是独立日志分区。p67tc 的启动路径则以 /dev/resource 和 /dev/nand_data 为主。写盘或恢复前必须先按当前机型的 mount 输出确认。

节点用途
/dev/apAP 系统分区。OTA 脚本把 vela_ap.bin 以 32 KiB 块写入此节点,并启用写后校验。
/dev/bl2第二阶段启动/升级分区。OTA 脚本把 vela_bl2.bin 写入此节点。
/dev/resource只读资源分区,正常系统和 Recovery 都将其以 ROMFS 挂载到 /resource。
/dev/nand_data主数据 NAND 分区,以 YAFFS 挂载到 /data。autoformat 允许首次启动/损坏时重建。
/dev/nand_nvBL2 中以 YAFFS 挂到 /wasted_nv 的 NAND 持久区;正常 AP 脚本未挂载它。
/dev/nv小型非易失分区,以 LittleFS 挂到 /misc。
/dev/mode模式分区,以 LittleFS 挂到 /mode,供启动模式或升级流程保存状态。
/dev/data二进制中存在的另一数据设备名;当前五套启动脚本实际挂载的是 /dev/nand_data,不要把两者视为同一节点后直接写入。
/dev/bes_flashBES 平台底层 Flash 驱动接口,面向原始闪存控制/测试逻辑。
/dev/bes_nandBES 平台底层 NAND 驱动接口,层级低于 /dev/nand_data 这类文件系统分区。
/dev/ram、/dev/ram0RAM 块设备/首个 RAM disk,常用于临时文件系统、测试或镜像挂载。
/dev/looploop 驱动控制或基础名。Recovery 实际构造 /dev/loop0~/dev/loop2。
/dev/loop0Recovery 将 /resource/watchface.bin 绑定到此节点,再以 ROMFS 挂到 /watchface。
/dev/loop1Recovery 将 /resource/font.bin 绑定后挂到 /font。
/dev/loop2Recovery 将 /resource/i18n.bin 绑定后挂到 /i18n。
/dev/tmpb、/dev/tmpc固件包含的临时块/测试设备名,启动脚本未使用;用途和数据格式不能仅凭路径确定。

/dev/ap 与 /dev/bl2 来自升级包的 ota.sh;其余挂载节点可在各环境的 rc.sysinit、rcS 或二进制访问路径中确认。

控制台、日志与标准伪设备

节点用途
/dev/console系统控制台,早期启动输出和交互 shell 的默认终端。
/dev/tty当前进程的控制终端。
/dev/ttyS0、/dev/ttyS1、/dev/ttyS2硬件串口,具体哪一路接调试口、外设或协处理器取决于板级配置。
/dev/pty、/dev/ptmx、/dev/pts/、/dev/ttyp伪终端主从设备,用于 shell、调试会话或进程间终端仿真。
/dev/kmsg内核消息接口,用于读取或写入内核日志。
/dev/log系统日志设备;AP 启动脚本把服务输出重定向到日志体系。
/dev/logrpmsg经 RPMsg 传输日志的接口,常用于主核与远端核/协处理器之间转发日志。
/dev/null丢弃写入数据,读取立即返回 EOF。
/dev/zero读取时产生全零字节。
/dev/random、/dev/urandom随机数设备。密码学代码应使用系统提供的安全随机接口,不要自行降级。
/dev/oneshotone-shot 定时器驱动接口,供一次性高精度定时/调度使用;具体 ioctl 需匹配该固件驱动。

显示、按键与输入设备

节点用途
/dev/fb、/dev/fb0framebuffer 显示设备;fb0 通常表示首块显示缓冲。
/dev/input0首个通用输入设备,事件格式由 NuttX 输入驱动决定。
/dev/buttons板级实体按键接口。
/dev/ubuttonuser-space button/虚拟按键设备。
/dev/ukeyboarduser-space/虚拟键盘设备。
/dev/mouse0首个鼠标/指针类输入设备,触控适配层也可能复用此类接口。

节点存在不代表第三方应用可以读取。输入设备一般由系统 UI 独占或受权限限制,直接消费事件还可能与系统手势冲突。

传感器与 uORB

节点用途
/dev/i2c通用 I²C 总线接口,供传感器和外设驱动访问。总线号/地址由板级配置决定。
/dev/usensorNuttX 统一传感器接口或其兼容层。
/dev/uorb/uORB 发布/订阅设备目录。
/dev/uorb/sensor_代码拼接传感器 topic 名称时使用的前缀。
/dev/uorb/sensor_accel0首个加速度计 topic/设备。
/dev/uorb/sensor_gyro0首个陀螺仪 topic/设备。
/dev/uorb/sensor_gps_factory0工厂测试使用的 GNSS 传感器 topic。

/dev/uorb/* 是消息总线接口,不等同于寄存器直通。固件还会把 uORB 时序统计写到 /data/uorb/ 或 /data//uorb_timings%u.txt,用于诊断传感器数据链路。

通信、蓝牙与 GNSS

节点用途
/dev/ttyBT、/dev/ttyBT0蓝牙控制器/协议栈使用的串行通道。
/dev/ttyGNSSGNSS 模块串行通道。
/dev/tunTUN 三层虚拟网络设备,供用户态网络隧道或协议适配使用。

这些设备通常由蓝牙、定位和网络系统服务持有。即使文件权限允许,第二个进程直接打开同一串口也可能破坏协议状态。

电源、振动、NFC 与其他硬件

节点用途
/dev/charge/batt_charger电池充电器控制与状态接口。
/dev/charge/batt_gauge硬件电量计接口。
/dev/charge/soft_gauge软件电量估算器接口。
/dev/lra0首个 LRA 线性马达/触觉反馈设备。
/dev/nfc_sn100NXP SN100 系列 NFC 控制器设备。
/dev/thn31/THN31 NFC/安全外设驱动目录;内部子节点名由驱动运行时创建。
/dev/rtc、/dev/rtc0实时时钟接口与首个 RTC 实例。
/dev/sst安全存储(secure storage)接口,可能承载密钥或受保护状态。
/dev/watchdog0首个硬件 watchdog。打开后若未按协议喂狗,系统可能被复位。

/dev/charge/ 和 /dev/thn31/ 也以目录前缀形式出现在固件中,说明调用方会拼接子节点;上表只列出了固件中可直接恢复的名称。

动态节点名模板

固件还保留了以下格式化字符串。它们不是字面存在的节点,而是驱动按实例号或 topic 名生成路径时使用的模板。

模板生成结果
/dev/%s、/dev/%.24s把驱动名拼到 /dev/ 下;后者把名称限制为最多 24 个字符。无法仅凭模板确定最终设备。
/dev/fb%d、/dev/fb%d.%dframebuffer 实例以及其平面/overlay 子实例,例如 fb0。
/dev/i2c%d带总线编号的 I²C 设备,例如 i2c0、i2c1。
/dev/ram%d编号 RAM disk,例如 ram0。
/dev/rtc%d编号 RTC,例如 rtc0。
/dev/pts/%d、/dev/pts/%u伪终端从设备编号。
/dev/pty%d、/dev/pty%u编号伪终端设备。
/dev/ttyp%d、/dev/ttyp%u另一套编号伪终端名称。
/dev/ttyBT%d编号蓝牙串行设备,例如 ttyBT0。
/dev/ttyGNSS%d编号 GNSS 串行设备。
/dev/tmpb%06lx、/dev/tmpc%06lx带 6 位十六进制后缀的临时块/字符设备名;后缀通常用于避免命名冲突,协议仍需从创建它的调用点确认。
/dev/uorb/%s、/dev/uorb/%s%d按 topic 名和实例号生成 uORB 节点。
/dev/uorb/sensor_%s%s%d按传感器类型、附加名称和实例号生成传感器 topic。

因此,实机出现 i2c0、rtc1 或新的 sensor_* 并不算文档遗漏;它们属于相同模板的运行时实例。

实机只读确认

在有 shell 的设备上,可以先执行:



ls -l /dev
mount
df -h
cat /proc/partitions 2>/dev/null
dmesg | grep -E 'nand|romfs|yaffs|littlefs|uorb|sensor|nfc|charge'

检查某个节点是否正在被挂载或占用:



mount | grep '/dev/resource\|/dev/nand_data\|/dev/nv\|/dev/mode'
fuser /dev/ttyGNSS 2>/dev/null

不同 shell 工具集可能没有 grep、fuser 或 df -h。这不影响节点本身,只需改用系统现有的只读命令。不要用 cat /dev/nand_data 来“查看内容”:它读取的是原始 YAFFS 分区,不是目录中的文件。

大纲