-
Notifications
You must be signed in to change notification settings - Fork 1
Dev Notes
津時テオ edited this page Jul 25, 2026
·
1 revision
📂 开发笔记 — Tsukine OS 技术记录
笔记说明
本页面记录 Tsukine OS 开发过程中的重要技术决策、问题排查和设计思路。每条笔记按时间倒序排列,方便追溯。
| 日期 | 版本 | 笔记内容 | 标签 |
|---|---|---|---|
| 2026-07-25 | Infdev-0.2.3 |
网络层重构:支持配置文件 - 新增 /etc/network/interfaces 解析逻辑- 支持 static 和 dhcp 两种模式- 配置文件不存在时自动回退到硬编码 IP(10.0.2.15) - 保留自动网关探测作为 fallback |
网络 重构 |
| 2026-07-25 | Infdev-0.2.2 |
文件系统规范化 - 将 tsukine_* 工具从 /bin/ 迁移到 /usr/bin/- 在 /bin/ 保留软链接指向 /usr/bin/,保持兼容- 修复 /dev/null 在镜像中不存在的问题(通过 devtmpfs 挂载解决)
|
FHS Bug修复 |
| 2026-07-25 | Infdev-0.2.1 |
包管理工具:tknpkg + tknpkkj - 设计 .tkn 包格式(tar.gz + metadata + rootfs)- tknpkg:安装 / 卸载 / 列表功能- tknpkkj:从源码目录生成 .tkn 包- 包数据库存放在 /var/lib/tknpkg/db- 命名来源:pkg(英)→ 安装 / pkkj(日)→ 打包 |
包管理 设计 |
| 2026-07-25 | Infdev-0.2.0 |
持久化存储:从 initrd 到硬盘启动 - 修改 extlinux.conf,添加 root=/dev/sda rw init=/init- 系统从硬盘分区启动,不再依赖 initrd 内存盘 - 重启后 /etc/、/home/ 等目录可写入- 成功实现文件保存( touch /test.txt 重启后仍存在)
|
存储 引导 |
| 2026-07-24 | Indev-0.1.7 |
启动状态检查 + 提示符优化 - 添加 [ OK ](绿色)和 [WARNING](红色)状态提示- 检查:挂载 / 内核模块 / 内存 / 网络 / 自研工具 - 自动生成主机名 tsukine- 提示符: root@tsukine:# / dmin@tsukine:$
|
UI Bug修复 |
| 2026-07-24 | Indev-0.1.6 |
用户账户系统(登录) - 配置 /etc/passwd、/etc/shadow、/etc/group- 创建 dmin 用户(UID 1000,GID 1000)- 集成 BusyBox login,启动后显示 login:- busybox 设置 setuid root(chmod u+s)- 解决 login: can't set groups 问题
|
用户 Bug修复 |
| 2026-07-24 | Indev-0.1.5 |
内核模块版本号修复 - 问题: insmod 报 invalid module format- 原因:内核版本号带 git 哈希后缀( 6.6.0-g5a768b526ec6),模块不匹配- 解决:用 make LOCALVERSION= 重新编译,去掉哈希后缀- 模块目录从 6.6.0-g5a.../ 变为 6.6.0/
|
内核 Bug修复 |
| 2026-07-23 | Indev-0.1.4 |
nano 文本编辑器移植 - 静态编译 nano 8.3,不依赖外部库- 配置: --enable-utf8 --disable-nls- 成功运行在 Tsukine OS 中,支持语法高亮 |
工具 移植 |
| 2026-07-23 | Indev-0.1.3 |
dash 替换 BusyBox shell - 用 dash 替换 BusyBox 自带的 sh- 静态编译 dash,放入 /bin/- 软链接 /bin/sh -> /bin/dash- 提示符从 /# 变为 ~#
|
Shell 重构 |
| 2026-07-23 | Indev-0.1.2 |
网络工具补完:ping + iwr - tsukine_ping:ICMP 测试,支持 -c 参数- tsukine_iwr:HTTP 下载工具- 所有命令添加软链接( taskmgr、net、ping 等)
|
网络 工具 |
| 2026-07-22 | Indev-0.1.1 |
系统工具补完 - 添加 reboot 和 shutdown 命令- tsukine_net 改为守护进程,动态检测网卡- tsukine_top 支持 -u(用户进程)和 -c(内核进程)过滤
|
工具 优化 |
| 2026-07-22 | Indev-0.1.0 |
初始发布 - 第一个可用版本 - tsukine_top(任务管理器)- tsukine_net(网络配置)- tsukine_net_ui(网络监控)- 基于 Linux 6.6 + BusyBox 1.36.1 |
发布 |
📂 技术决策记录
| 决策 | 理由 | 影响 |
|---|---|---|
使用 dash 而非 bash |
更轻量(~100KB),符合 POSIX 标准,适合精简系统 | 系统体积保持小,但不支持 Bash 特有的扩展语法 |
自研 tknpkg 而非移植 dpkg |
避免引入 glibc 依赖,保持系统独立 | 格式简单,但缺少成熟的依赖解析机制 |
| 静态编译所有工具 | 不依赖外部库,确保在精简 rootfs 中运行 | 工具体积增大(但仍在可接受范围) |
| BusyBox 作为基础工具集 | 提供 ls、ps、mount 等命令,体积小 |
功能比 GNU Coreutils 少,但够用 |
| 不引入 systemd | 体积大,依赖复杂,对于精简系统来说过重 | 需要自己维护 init 脚本 |
| 软链接替代命令重命名 | 保留原命令名称的同时提供简短别名 | 用户可以用 taskmgr 代替 tsukine_top
|
📂 已知问题与解决方案
| 问题 | 原因 | 解决方案 | 状态 |
|---|---|---|---|
/dev/null 不存在 |
devtmpfs 未挂载 | 在 /init 中添加 mount -t devtmpfs none /dev
|
✅ 已修复 |
| 模块版本号不匹配 | 内核编译时带 git 哈希后缀 | 用 make LOCALVERSION= 重新编译 |
✅ 已修复 |
login: can't set groups |
busybox 未设置 setuid root | chmod u+s /bin/busybox |
✅ 已修复 |
| 镜像文件过大 | 编译产物未清理 | 使用 make distclean 后重新编译 |
✅ 已修复 |
| 实体机网卡无法识别 | 网卡名不匹配(eth0 vs enp0s25) |
tsukine_net 动态检测网卡名 |
✅ 已修复 |
| 图形界面 | 未开始开发 | 计划在 Alpha 阶段添加 | 🔄 计划中 |
📂 趣闻与备注
| 日期 | 内容 |
|---|---|
| 2026-07-22 | 两天内发布了 8 个版本(0.1.0 → 0.1.7),几乎每 2-3 小时一个版本 |
| 2026-07-23 |
tsukine_net 初始版本硬编码 eth0,导致实体机无法使用,后来改为动态检测 |
| 2026-07-24 | 尝试用 shadow 的 login,但因动态库缺失失败,最终改用 BusyBox 的 login
|
| 2026-07-25 | 包管理工具 tknpkg 和 tknpkkj 命名来自英语和日语的混合缩写 |
📂 待办事项(开发 TODO)
- Infdev-0.2.4:实体机适配(UEFI/BIOS 引导,硬件驱动)
- Alpha-0.3.0:图形界面基础(X11 + 窗口管理器)
- 包管理:添加依赖解析支持
- 网络:完善 DHCP 客户端集成
- 文档:补充 UTAU 音乐制作工具的集成计划