用户态 shell · 浏览器在线体验

tinysh 在线体验

这是 TinyOS Genesis 的 shell。下面是一个真正能敲命令的模拟器,覆盖真实的 19 条命令、虚拟文件系统、进程表与硬件寄存器访问。它不是内核内建,而是一个用户态 TNCR 程序。

在线模拟器

在下面的终端里输入命令,回车执行。支持 ↑/↓ 调用历史、Tab 补全命令名、Ctrl+C 取消当前行。提示符为 tinysh> 。

诚实声明:这是浏览器行为模拟

本页只在你的浏览器里模拟 tinysh 的行为,用于演示与学习;它并没有在网页里运行真实内核。真实系统请用仓库里的 start.bat 启动到 QEMU。模拟器的文件系统、进程表与设备寄存器均为前端内置的示例状态,不是真机数据。


        
提示:先试试 help、ls /bin、cat /home/readme.txt、devlist。

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 通过。