用户态 shell · 浏览器在线体验
tinysh 在线体验
这是 TinyOS Genesis 的 shell。下面是一个真正能敲命令的模拟器,覆盖真实的 19 条命令、虚拟文件系统、进程表与硬件寄存器访问。它不是内核内建,而是一个用户态 TNCR 程序。
在线模拟器
在下面的终端里输入命令,回车执行。支持 ↑/↓ 调用历史、Tab 补全命令名、Ctrl+C 取消当前行。提示符为 tinysh> 。
诚实声明:这是浏览器行为模拟
本页只在你的浏览器里模拟 tinysh 的行为,用于演示与学习;它并没有在网页里运行真实内核。真实系统请用仓库里的 start.bat 启动到 QEMU。模拟器的文件系统、进程表与设备寄存器均为前端内置的示例状态,不是真机数据。
tinysh 是什么
一个真正的用户态 TNCR 程序,不是内核内建。
/bin/tinysh.TNCR · 104144 字节
tinysh 是打包成自定义 TNCR 格式的用户程序,由 TNCR 加载器载入用户态运行。它不能直接碰硬件或内存,只能通过 tinyos_api_t 函数指针表去访问内核提供的服务(文件、进程、设备寄存器)。内核里没有写死一个 shell,换掉这个 TNCR 文件就能换 shell。
两个后端:真实内核 vs 离线自测
源码在本仓库 src/tinysh/,通过同一套命令逻辑对接两个后端:kernel_api_tinyos.c 是 TNCR 产品后端(跑在真机 / QEMU),kernel_api_host.c 是 POSIX 离线自测后端(在开发机上用宿主系统跑同一份逻辑,便于单元测试)。登录后自动进入 tinysh;exit 退回内核 shell。
命令表(19 条)
英文命令名 + 中文说明 + 例子。所有上屏输出强制英文 ASCII(见下方设计约束)。
| 命令 | 说明 | 例子 |
|---|---|---|
| help | 列出全部命令及一行说明 | help |
| version | 显示版本串 | version |
| sysinfo | 显示 CPU / 内存总量 / 空闲 / 运行时间 / 进程数 | sysinfo |
| date | 显示系统日期与运行时间 | date |
| ls | 列出目录内容(<DIR> / <FILE> + 字节数) | ls /bin |
| cd | 切换目录(无参数回到 /home) | cd /bin |
| pwd | 显示当前工作目录 | pwd |
| cat | 显示文件内容(TNCR 二进制不显示) | cat /home/readme.txt |
| mkdir | 新建目录 | mkdir /home/demo |
| rm | 删除文件(v0.1 不能删目录) | rm /home/notes.txt |
| touch | 新建空文件 | touch /home/x.txt |
| ps | 显示进程表(PID/STATE/SESS/UID/NAME) | ps |
| kill | 终止进程 | kill 3 |
| devlist | 列出 7 个硬件设备 | devlist |
| readdev | 读取设备寄存器 | readdev com1 0x3F8 |
| writedev | 写入设备寄存器 | writedev vga 0x3D4 0x02 |
| echo | 原样回显文本 | echo hello tinyos |
| clear | 清屏 | clear |
| exit | 退出 tinysh(回到内核 shell) | exit |
关于 /home/hello.mc:它是项目里真实存在的 Minecraft 方块脚本(.mc),由 mc 运行时执行。可试 cat /home/hello.mc 查看示例内容。
设计约束:为什么上屏文案强制英文 ASCII
这是一个真实且有说服力的工程细节,不是偷懒。
VGA 文本模式 = CP437 字形表
图形桌面运行在 VGA 80×25 文本模式,字形表是 CP437(IBM PC 字符集),里面根本没有汉字字形,一个「中」字根本画不出来。更要命的是:UTF-8 下一个汉字占 3 个字符编码,而 VGA 文本缓冲区每个字只占 1 格,于是 1 个汉字会被当成 3 个字节、撑成 3 格,直接把一行顶出 80 列,整屏错位。所以所有上屏文案强制英文 ASCII;代码注释才用中文。
测试:27 项端到端自动化测试
全部通过,无人工点击。
tinysh 的 19 条命令由 27 项端到端自动化测试覆盖。测试在 QEMU 串口上驱动真实内核,逐字比对 tinysh 的上屏输出(英文 ASCII),包含:未知命令、缺参数、文件不存在、删目录被拒绝、Tab 补全等边界。整个测试套件由脚本自动运行,无需人工点击,结果 27/27 通过。
- 27/27 端到端测试通过
- QEMU 串口驱动,无人工点击
- 19 条命令全覆盖