本文通过制作Boot引导程序,让大家快速制作并启动自定义系统,熟悉其中的流程和工具使用。整个制作流程,主要分为三个步骤:1,创建一个虚拟软盘镜像;2,编写Boot引导程序;3,编译代码并启动系统。
1、创建虚拟软盘镜像上一篇文章:自制操作系统之一:安装bochs,我们介绍了bochs软件的安装,不熟悉的小伙伴可以再看一下。Bochs软件安装完成之后,不仅会生成Bochs虚拟机软件,还会生成一些辅助工具,包括虚拟磁盘镜像创建工具bximage。借助bximage工具,可以方便的创建一个空的软盘镜像。具体操作步骤如下:
bximage========================================================================bximageDiskImageCreation/Conversion/ResizeandCommitToolforBochs$Id::01:52Zvruppert$========================================================================1.(mode)3.'undoable'、选择软盘fdCreateimageDoyouwanttocreateafloppydiskimageoraharddiskimage?Pleasetypehdorfd.[hd]、设置镜像文件名称?[]''with2880sectorsThefollowinglineshouldappearinyourbochsrc:floppya:image="",status=insertedll总用量4-rw-r-----1rootroot14745603月2421:06========================================================================bximageDiskImageCreation/Conversion/ResizeandCommitToolforBochs$Id::01:52Zvruppert$========================================================================1.(mode)3.'undoable'[0]5DiskimageinfoWhatisthenameoftheimage?[]='flat'hd_size:1474560geometry=2/16/63(1MB)2、编写Boot引导程序
创建好镜像之后,需要编写引导程序来填充镜像。操作系统的最底层基本都是汇编+c语言编写。以下为引导程序,这段汇编代码的作用是启动自定义系统并在窗口输出StartBoot。后续再单独开一篇介绍代码含义,以及常见寄存器的用法介绍。
org0x7c00BaseOfStackequ0x7c00Label_Start:movax,csmovds,axmoves,axmovss,axmovsp,BaseOfStack;=======清理屏幕movax,0600hmovbx,0700hmovcx,0movdx,0184fhint10h;=======设置光标movax,0200hmovbx,0000hmovdx,0000hint10h;=======屏幕显示movax,1301hmovbx,001fhmovdx,0000hmovcx,10pushaxmovax,dsmoves,axpopaxmovbp,StartBootMessageint10h;=======重置软盘xorah,ahxordl,dlint13hjmp$StartBootMessage:db"StartBoot",0;=======填充512Btimes510-($-$)db0dw0xaa553、编译启动系统3.1、安装nasm编译工具
yuminstallnasm3.2、生成启动文件
===512count=1conv=notrunc记录了1+0的读入记录了1+0的写出512字节(512B)已复制,0.000235742秒,2.2MB/秒3.3、启动镜像
/root//bochs-f./bochsrc3.4、查看启动效果
如果一切顺利的话,镜像启动之后,继续按c或者continue键,屏幕正常显示如下。至此从基础镜像制作、代码编译和启动运行的完成过程,一个简单的自制系统就完成了。除此之外,还有很多的问题等待去解决:系统的启动流程是什么,CPU是如何工作的,上述代码是如何生效的等等,待后续再一一解析。

自制系统启动
3.5、常见异常处理1、内存不足
当.bochsrc设置虚拟平台的可用物理内存容量不足(参数megs:2048),Bochs会运行失败,可以适当调整内存大小,失败时的提示信息大致如下所示:
terminatecalledafterthrowinganinstanceof'std::bad_alloc'what():std::bad_allocAborted(coredumped)
2、镜像文件故障
bochs启动出现Nobootabledevice,需要重新检查文件代码问题,修复好之后,再重新编译打包运行。
4、ECS安装云桌面在阿里云上购买一台ECS,安装系统,默认不带桌面云桌面服务的,可以自行安装,方便后续bochs调试。
4.1、更新系统的软件包yum-yupgrade4.2、安装MATE桌面环境
yumgroupsinstall"XWindowSystem"yumgroupsinstall"MATEDesktop"4.3、设置默认使用图形化桌面环境启动实例4.4、重启启动
reboot
安装完成之后,可使用VNC方式登录,登录成功,即可看到如下效果。

MATEDesktop





