Foxdisk01-缘起

Foxdisk01-bootpic

“没有任何一个题目是彻底完成了的。总还会有些是哪个可做;在经过充分的研究和洞察以后,我们可以将任何解题方法加以改进;而且无论如何,我们总可以深化我们对答案的理解。”

–《怎样解题:数学思维的新方法》

用一段话来总结我自己的这个小项目,我以为上面的这段话很精准。从2006年1.00版开始,到2008年的冬天完成3.01版,直到现在,我也不觉得这个项目完成了。只是因为各种原因,没有动力再去更新它了,曾经写在计划中的4.0版,列出了许多我很有兴趣的功能,不大可能再去实现了。

回到最初想写这个产品的目的,主要有几个:

1)   一个硬盘安装多个操作系统,并且各操作系统看不到其他操作系统的分区;

2)   图形界面选择系统进入;

3)   提供磁盘坏道检测;

4)   提供分区功能;

5)   未来可以配合硬件实现系统间的物理隔离,即软件层面无法去定位其他操作系统的磁盘扇区;(随着Sata的速度越来越快,这个目标在商业产品上很难实现了)。

其实说来说去,我就是需要这么一个多操作系统引导的软件,帮助我管理因需要安装的各种操作系统,相互之间互不干扰,相当于一个界面版的spfdisk+grub。

其实Grub或者spfdisk之类的软件已经实现了类似的功能,没有必要再自己造轮子了。只是这些软件的界面我实在是看不下去,另外我也需要一个项目把我底层开发的所有知识串起来,实现一个小小操作系统,以备后用。

就这样,我下定决心来进行这个工作了。

Foxdisk 1.0是完全用汇编来实现的,安装在MBR之后的62个扇区之内,也就是说编译后的代码在在31K以内,实际为25.7K。代码文件加起来在174K(包含注释),不算大。这款软件只支持两个操作系统,而且只支持Windows,操作极其简单。也许因为如此,非常稳定,有几个同事用了很长时间。

Foxdisk2.0在上一版的基础上,为了便于阅读,大量采用了宏汇编的方式,导致生成文件很大,不得不裁剪一些想添加的功能。比如汉字显示、磁盘管理等。这款软件界面比1.0要漂亮些,我用汇编实现了透视渐变,不过代码量原因,实用性不大。在实现过程中,开发了几个工具程序,包括对bmp、pcx的结构分析和数据提取,汉字字模的自动提取,还是很有用的。我现在做一些嵌入式开发时,还会用到这些小工具。

Foxdisk3.0开发前,我分析了需求,终于还是决定跳出31K的限制,把软件安装到磁盘末端,这样代码量就不是问题了。另外,为了便于未来阅读开发,决定采用C语言编写,少数功能模块用汇编实现。最终实现了目前的版本,代码结构图如下:

Foxdisk01-codemap

图1 程序代码结构

在后续的博客中,我将会以上图为线索,一点点介绍这款占据了我生命中4个月业余时间的软件。主要包括:如何安装、启动原理、中断调度、硬盘模块、分区管理、图形模块、汉字和图片、小工具、如何编译和安装、调试。

这是为Foxdisk3.01.02设计的启动图标,我很喜欢。

Foxdisk01-bootpic图2 ifox.bmp:foxdisk的缺省启动界面

以前的截图很难找到,所以拍了一张实际的运行图,效果如下:

Foxdisk01-softmenu图3 实际运行图

很有意思吧?

—知更鸟的小屋

3,052 total views, 1 views today

发表评论

电子邮件地址不会被公开。