uCOS-II提供的例子编译成EXE文件,在DOS,Windows下可以直接运行,方便调试。
但uCOS-II本身就是个小型操作系统,是否可以让PC启动后直接加载运行uCOS系统呢?
之前研究的FreeDOS系统,就是先编译成EXE文件,然后转成bin文件,用boot引导后运行的。uCOS应该也可以。
OK,先设置好环境,参考 深入分析FreeDos – 编译
uCOS-II代码下载:ucos-II
上面的步骤,编译源码,生成TEST.EXE文件,用extflat将TEST.EXE转为bin文件并设置内存偏移为0x600,保存为KERNEL.SYS文件
至于设置0x600偏移,参考:深入分析FreeDos – 引导代码
可以利用FreeDos的引导代码将uCOS载入内存,执行main函数,而main函数的地址,可以通过上面编译输出的MAP文件获取,我这里的是06E7:0003
然后就是修改引导代码,读取KERNEL.SYS,放置到内存偏移0x600处,再jmp到main函数即可。
有两个地方需要修改,一个是DS寄存器,设置为0x06E7,还有个是IP寄存器为0x6E73,代码修改如下:
修改好的引导代码: boot.asm
最后就是创建个1.44M的虚拟软盘,将boot.bin放到引导扇区中,设置然盘为Fat12文件系统,将KERNEL.SYS存入进去。
嫌麻烦的话,可以用我写好的工具,buildimg.c, 用tcc编译,运行后输出dostest.img
参考深入分析FreeDos – 编译,用x86模拟器运行这个虚拟然盘即可。