自己造操作系统系列 0.1 版
[最近一直都忙着造轮子, 博客都没空写. 今天算是把调度器写出来能用了, 算是取得阶段性成果, 过来记录一下.]
zOS
: 是本人一星期前开始的项目, 目标是做一个 stm32 平台上的非实时操作系统.
features:
初期的想法是这样:
(“应用”, 或” 应用程序” 指的是在 zOS 操作系统上运行的用户态程序)
- 对于应用开发:
多进程
应用程序 (用户态程序) 可以独立编译, 无需和操作系统代码一起编译
烧入芯片前用一个叫做 zImage 的工具 (我把操作系统和 app 合成之后的镜像叫做 zImage) 把 app 的 binary 和操作系统的 binary 合成为一个二进制 Image 文件. 之后烧入到芯片 flash 中
上面功能使用 pic(位置无关代码) 实现
调度器使用抢占式时间片轮转算法 (暂时还没实现基于优先级的调度)
向用户态程序提供 svc 系统调用 (供汇编程序调用), 同时提供 libc 形式的系统调用 (供 c 语言调用, 相当于对裸的 svc 加了一层 wrapper)
libc 中另外还提供 c 标准库 (newlib)
对于有 MPU 的器件使用内存保护
这么设计的好处是开发应用程序时就好像开发 PC 系统上的程序一样了, 不需要把 OS 的代码放到项目中去. 看着清新了很多.
使用系统调用的方法使应用编写方便了很多, 而且还安全.
- 对于驱动开发:
提供自旋锁, 信号量等设施
暂时不提供子系统 (因为现在只面向 stm32 平台, stm32 标准外设库的头文件可以直接引用. 以后考虑移植到其他平台时再提供一个统一界面的子系统层)
…. 还没想好
3. 对于用户:
提供 shell(初步想法用 lua 实现, 不知可行性如何) [串口]
提供 GUI [液晶屏]
关于 build:
zOS 使用 CooCox 开发环境开发 (因为比较熟悉 GNU 工具链, 而且 CooCox 调试也方便).
现在只提供 CooCox 的项目文件, 以后会提供 Makefile. (关键我现在懒着写 -.-)
可以现在这里下载:https://lengzzz.com/zOS/zOS-0.1-alpha.tar.gz 写的还很烂 [掩面], 大神轻点喷 -.-
如果手上有 stm32 的板子的话可以编译了烧上去看效果. 现在就是一个简单的调度器, 开启了两个进程, 一个让 led 闪烁, 一个让 led 常亮. 时间片设置的大了一些 (为 1 秒). 所以运行会看到 led 一秒闪烁一秒常亮.
板子和我不一样的 (肯定不一样吧!) 需要把 Unit_Test/test_schedule.c 文件中关于 led 改成你的板子的 GPIO 端口. 这个估计难不倒大家.
后续会写文章一步一步记录开发过程…