开发环境

先建立开发环境,我的环境:

主机系统: Windows XP, 最好再装个虚拟机,在虚拟机里装个Linux系统

FreeDos版本: 我用的是2.0.20版本, http://sourceforge.net/projects/freedos/files/Kernel/2.0.20/

编译软件: NASMTurbo C 3.0

x86模拟器: Bochs, JPC, VirtualBox都可以

要想让FreeDos运行起来,需要编译如下文件:

  1. boot.bin, 即软盘引导文件
  2. KERNEL.SYS, 即FreeDos内核
  3. FreeCom, 即交互shell,类似linux上的bash。在kernel2020.zip的bin目录下就有编译好的commmand.com,可以直接拿来用。

编译步骤:

  1. 将nasm, tcc解压到C盘根目录,并将C:\nasm, C:\tcc\BIN 添加到环境变量中。
  2. 解压ker2020.zip, 修改config.m,根据注释选择对应的编译器选项,然后将config.m重命名为config.mak。
  3. 进入boot, 执行make -f boot.mak, 编译引导文件。编译完成会生成两个bin文件,其中b_fat12.bin对应FAT12文件系统,b_fat16.bin对应FAT16文件系统。
  4. 进入kernel, 执行make -f kernel.mak, 编译完成会生成KERNEL.SYS
  5. 下面的操作,是在linux下进行的:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
输入bximage命令 , 选择fd, 选择1.44,保存文件为dostest.img  
#创建一个1.44M的Image文件, 
losetup /dev/loop1 dostest.img                               
#将dostest.img 关联到环回设备1、 
dd if=boot.bin of=/dev/loop1                                 
#将boot.bin 写入dostest.img的引导扇区中 
mount -o /dev/loop1 /mnt                                     
#将Image挂载在/mnt 目录下 
cp KERNEL.SYS /mnt                                           
#将编译好的KERNEL.SYS 拷贝到/mnt下,即写入到Image中 
cp bin/COMMAND.CMD /mnt                                      
#将bin下面的COMMAND.COM 拷贝到/mnt下,即写入到Image中 
umount /mnt                                                  
#卸载mnt目录 
loset -d /dev/loop1                                          
#将dostest.img从环回设备上卸载掉

最后一步:用X86模拟器启动dostest.img

如果编译kernel出错,可能与环境有关。

推荐:

我已经做好了一个版本, 点此下载

与官方不同的地方:

  1. 修改了boot.asm。官方的boot.asm不能加载文件较大的KERNEL.SYS
  2. 官方的FreeCom需要硬盘支持,所以我重新编译了个不需要硬盘支持的,放在build目录下
  3. 如上面编译步骤所述,生成Image比较麻烦,我写了个简单的buildimg.c程序,运行即可将boot.bin,KERNEL.SYS,COMMAND.COM组装到dostest.img中,很方便。
  4. 直接用命名行替代了makefile,解压后运行build.bat,在build目录下即可生成dostest.img。

OK,下面分别是dostest.img在JPC和Virtualbox下运行的截图:

pic

pic