源码目录
目录职责、配置文件、构建产物和客体路径。
本页目录
目录职责
以下路径均相对 OpenXTOS 仓库根目录。
kernel/linux 与 userspace/busybox 包含上游源码,因此目录很大;第一轮阅读应先沿 scripts→system→sdk/tools→XTOS 内核文件定位,而不是从全部 Linux 文件逐个开始。
公开树包含构建系统必需的 C 测试,但没有私有开发树的全套测试、计划或发布工具。
| 路径 | 职责与阅读入口 |
|---|---|
| kernel/ | Linux 6.6.0-rt15、PREEMPT_RT 与 XTOS 集成补丁、xtos_defconfig。先读配置,再看被启用的 XTOS 文件。 |
| userspace/busybox/ | BusyBox 1.37.0 上游源码;系统配置在 system/ 中,不是 sdk/。 |
| sdk/ | 三个用户态库的头文件、实现、Makefile、版本头;rt 与 signal 包含构建入客体的 C 测试。 |
| system/ | busybox_defconfig、rootfs 骨架、x86 /init、自检与跨架构 guest-check。 |
| tools/ | xtos-eeg-pipeline、xtos-eeg-replay、xtos-signal-benchmark 三项功能工具及 fixture。 |
| examples/ | bci_test.c 采集会话示例;它不是人工设备模拟器或硬件验证报告。 |
| scripts/ | 系统/内核构建、QEMU 验证、交叉编译、源码检查、ABI 检查及可复现环境。 |
| README.md、VERSION、LICENSE-NOTICE | 项目入口、0.9.0 公开版本元数据与许可边界。 |
内核入口
kernel/patches/preempt-rt-6.6-rt15.patch 与 kernel/patches/xtos-linux-6.6.patch 保留集成补丁;kernel/linux 已经包含相应内容。
scripts/prepare_linux.sh 检查 Linux 版本、localversion-rt 的 -rt15 和 XTOS 文件,不重新下载或自动重打补丁;REFRESH_BUNDLED_KERNEL=1 路径明确报错。
| 源码入口 | 作用 |
|---|---|
| kernel/linux/kernel/sched/xtos_sched.c | 可选优先级队列辅助;不属于 Linux sched_class。 |
| kernel/linux/kernel/sched/xtos/Kconfig | XTOS 调度辅助的 Kconfig 入口;由配置片段启用。 |
| kernel/linux/drivers/xtos/bci/ | 字符设备核心、环形缓冲、devices/openbci_cyton.c 设备驱动。 |
| kernel/linux/include/uapi/linux/xtos_bci.h | 用户态可见的整数型 ioctl 结构和命令号。 |
| kernel/linux/include/linux/xtos.h、xtos_queue.h、xtos_bci.h | 内核侧辅助类型、队列和 BCI 框架声明;不是应用 syscall 头。 |
构建目录中的 .config 和 include/config/auto.conf 才是已解析的配置。kernel/xtos_defconfig 的 CONFIG_XTOS_SCHED=y、CONFIG_XTOS_BCI=m 等表达默认请求;架构构建脚本会在 olddefconfig 后核对必需配置,ARM/RISC-V 的初始化检查只在首次没有 .config 时执行。更换配置后应保留最终配置并重新验证,而不是依赖旧增量目录。
SDK 与工具
| 入口 | 应观察的边界 |
|---|---|
| sdk/libxtos-rt/src/rt.c、src/spsc.c | Linux 调度与 mlock 封装、用户态 SPSC;tests/test_rt.c 与 tests/test_spsc.c 是公开客体测试。 |
| sdk/libxtos-signal/src/signal.c | 用户态 FFT、滤波与特征接口;tests/test_signal.c 是客体测试来源。 |
| sdk/libxtos-bci/src/session.c | open/read/ioctl/mmap 会话封装;本公开提交没有可依赖的 BCI tests 目录,不使用本地新增测试。 |
| tools/xtos-eeg-pipeline/pipeline.c | CSV→SPSC→可选带通→JSON/过滤 CSV,不经过内核 BCI。 |
| tools/xtos-eeg-replay/replay.py | 主机 Python CSV 格式与间隔校验;不是内核设备驱动。 |
| tools/xtos-signal-benchmark/benchmark.c | 生成信号并测量 FFT、带通、SSVEP、P300;结果受执行环境影响。 |
python3 tools/xtos-eeg-replay/replay.py \
--input tools/xtos-eeg-replay/fixtures/fixture.csv --check源与产物
默认 BUILD_ROOT 是仓库的 .build。
x86_64 使用 kernel-build、busybox-build、userspace-source、rootfs 和 images:SDK、tools、examples 先复制进 userspace-source 再编译,避免源目录生成用户态产物。
ARM64/RISC-V64 的内核与 BusyBox 也采用 O= 输出目录,但 SDK 在源码目录执行 make clean/build,会留下当前架构的库产物;因此不要并发运行两个交叉构建。
| 角色 | x86_64 | ARM64 / RISC-V64 |
|---|---|---|
| 可修改源文件 | system/rootfs/init、sdk/*、tools/* | 相同源码;启动 inittab 由交叉脚本生成。 |
| 主机 rootfs 输出 | .build/rootfs/ | .build/rootfs-arm64/、.build/rootfs-riscv64/ |
| 客体测试位置 | /usr/libexec/xtos/test_* | /bin/test_rt、/bin/test_spsc、/bin/test_signal |
| 正常启动 /init | system/rootfs/init shell 脚本。 | 到 sbin/init 的链接,配合 /etc/inittab。 |
修改 .build/rootfs 只是修改生成物,下一次构建可能覆盖;要持久改变系统应修改来源文件或构建脚本。客体的 /run/pipeline.json 与 /run/signal-benchmark.json 在 initramfs 内存文件系统中,关机后不会自动保存到主机;主机 QEMU 日志是另一份输出。
数据格式
CSV fixture 的三列为纳秒时间戳、通道 0 纳伏、通道 1 纳伏;双通道 250 Hz 对应 4000000 ns 帧间隔。用户态 pipeline 解析后存成 int32 纳伏,带通处理时显式转换为 double。内核 Cyton 路径则由串口字节形成 8 通道 s32 纳伏,并写入内核缓冲;两条路径在公开源码中没有自动连接。
查硬件问题时沿 openbci_cyton.c→xtos_bci_buffer.c→xtos_bci_core.c→bci_uapi.h/session.c 阅读;查 fixture 问题则沿 fixtures/valid.csv→pipeline.c→spsc.c/signal.c 阅读。这能避免把 CSV 的严格时间戳校验误认为驱动已经提供了相同时间语义。
版本检查
git rev-parse HEAD
git status --short
git show HEAD:scripts/build_system.sh
git show HEAD:scripts/build_system_arm64.sh
git show HEAD:scripts/build_system_riscv64.sh
git show HEAD:sdk/libxtos-bci/src/session.c
./scripts/verify_source_tree.shgit show HEAD:path 读取提交内容,即使本地工作树有修改,也不会将修改混入公开基线。
verify_source_tree.sh 检查 Linux 版本、rt15 标记、XTOS 必需文件和源树污染;它不是对全部文件逐字节匹配提交的校验,不能替代 git status。
检查器会扫描源树,库构建留下的忽略产物与提交源码应分开判断。
源码依据:提交 dd313955ad57542bcd2af8827157d1bbd0cf5e83 的 README.md、scripts/prepare_linux.sh、scripts/verify_source_tree.sh、scripts/build_system.sh、scripts/build_system_arm64.sh、scripts/build_system_riscv64.sh、system/rootfs/init、system/rootfs/xtos-guest-check、tools/xtos-eeg-pipeline/Makefile 与 pipeline.c、tools/xtos-eeg-replay/replay.py。