应用空间(AppSpace)开发环境搭建
Contents
起因
现在操作系统越来越庞大,我们自己写的个小程序可能就只做一件事情,完全没有必要外带安装一个大几十G的操作系统,而且为了操作系统,要投入一笔不小的用于高性能硬件和购买操系统费用,这在很多时候是没有必要的,特别是工业设备上。
设想:应用空间(AppSpace)
做一款应用的程序的自由宇宙空间,这个空间你可以任意发挥,任意使用显卡,CPU,内存等资源,不用安任何装操作系统,可以像DOS一样充分自由的使用硬件,又能使用计算性能强大的X86芯片,开机直接进入软件。
原理:为什么“裸机跑应用”是成立的
现代操作系统替程序干的事——进程调度、内存隔离、驱动、文件系统——每一件都有代价:内核常驻内存、系统调用要切换上下文、图形栈层层叠加。对“这台电脑只干一件事”的场景(工业设备、专用终端),这些代价全是纯开销。
裸机应用直接面对硬件,程序本身就是“内核”:开机 → 引导扇区把程序调进内存 → 程序独占 CPU、内存、显卡,中间没有操作系统这一层。DOS 时代的软件就是这么活的。AppSpace 想做的,就是把这种“充分自由使用硬件”的模式在性能强大又便宜的 X86 芯片上复刻。
由于现在操作系统越来越大,占用的资源越来越多,
很多的时候一个电脑,只会用来干一个事情,所以软件运行在电脑上直接占用整个电脑资源
来用是最合适的,不必要为了操作系统,还去升级电脑的硬件配置。
开发环境
- Windows 10
- Ubuntu
开发工具
- notepad++
编译工具
- nasm
- gcc
- make
- ubuntu
- VituralBox
测试环境
- qemu
这份清单不是随手列的,每个工具在裸机开发链条里各有其位:nasm 产出引导扇区需要的纯二进制(-f bin),引导代码必须是“内存里什么样就是什么样”的裸码;gcc 负责主体 C 代码,但要按 freestanding 方式编译链接——标准库的实现依赖操作系统,裸机上没有;make 把汇编、编译、链接、镜像组装串成一键构建;qemu 让改完立刻能跑,不用每次刻U盘插真机;VituralBox 比 qemu 更接近真实 BIOS 行为,是上真机前的最后一道验证。
踩坑记录与注意事项
- gcc 必须按 freestanding 方式用:-ffreestanding -nostdlib。printf/malloc 这类标准库函数底层要走系统调用,裸机上根本没有内核接收——链接能过、一跑就崩,这是裸机开发第一个大坑的根因;
- 别链接 C 运行时(crt0):默认链接会带进 main 之前初始化运行时的代码,它同样假设操作系统存在,入口要自己写;
- 引导扇区 512 字节是硬边界:入口代码超了就放不下,放不下的部分移到后面的扇区,由引导代码再加载进来;
- qemu 跑通不等于真机能跑:不同 BIOS 对段寄存器、中断状态的初始值不完全一样,引导代码开头要显式设置好自己的段寄存器和栈再干活;
- 测试盘和数据盘分开:往U盘写启动扇区会覆盖分区表(用的工具见另一篇《编写可将数据写入U盘启动扇区的程序》),别拿有数据的盘做实验。
Author 软件开发大郭
LastMod 2022-01-28