Welcome to KOS.

简介: Welcome to KOS.

编写一个主引导程序

  • 编写一个主引导程序,可独立运行于 X86 架构的主机(无操作系统),运行后在屏幕上打印 "Welcome to KOS."
  • 这里我们需要一定的 X86 汇编基础知识,如果不懂汇编的可以参考【8086汇编基础】学习一下。
  • 思路:
  • 程序如何被识别为主引导程序 - 512 字节的最后 2 个字节为 0x55, 0xaa
  • 如何指定程序的起始地址 - org 0x7c00
  • 如何打印 - int 10
  • 打印任务完成如何处理 - hlt

如何验证编写的主引导程序

开发环境

  • 首先需要一个 Linux 开发环境,我的是 ubuntu 20.04
  • 有 vmware、WSL、SSH 远程服务器等选择,这里就不讲解如何搭建环境了

将汇编编译为机器码(nasm)

  • 我们需要将编写的主引导程序(汇编)编译成可执行的二进制的机器码 - nasm 汇编编译器
  • 执行命令:nasm boot.asm -o boot.bin
  • 如果没有安装 nasm,可以使用 “ sudo apt-get install nasm ” 安装 nasm 汇编编译器

如何将编译好的机器码放到硬件上去执行呢?

  • 我们不可能把程序烧录到实际的电脑硬件上去测试,因为这样会导致电脑原本的操作系统被破坏,造成死机
  • 于是只能采样虚拟机的方式来验证编写的主引导程序

创建虚拟盘(bximage)

  • 虚拟盘的创建很简单,使用命令 “bximage” 即可
  • 如果没有安装 bximage ,可以使用 “ sudo apt-get install bximage ” 安装 bximage
  • 下面是执行 “ bximage ” 后的具体情况
========================================================================
                                bximage
  Disk Image Creation / Conversion / Resize and Commit Tool for Bochs
        $Id: bximage.cc 13481 2018-03-30 21:04:04Z vruppert $
========================================================================
1. Create new floppy or hard disk image
2. Convert hard disk image to other format (mode)
3. Resize hard disk image
4. Commit 'undoable' redolog to base image
5. Disk image info
0. Quit
Please choose one [0] 1
Create image
Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd
Choose the size of floppy disk image to create.
Please type 160k, 180k, 320k, 360k, 720k, 1.2M, 1.44M, 1.68M, 1.72M, or 2.88M.
[1.44M] 1.44M
What should be the name of the image?
[a.img] a.img
Creating floppy image 'a.img' with 2880 sectors
The following line should appear in your bochsrc:
  floppya: image="a.img", status=inserted

如何将编译得到的 boot.bin 写入到软盘 a.img 中

  • 使用 dd 命令,如下:

dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc

  • 将 boot.bin 内容写到 a.img 中,bs=512:block size 是 512 字节,count=1:写 1 个 block,共 512 * 1 个字节,conv=notrunc:,notrunc 表示不缩减输出文件, 如果存在文件,只修改相应字节的数据,如果不存在,则创建512字节的文件。
  • 最终得到的这个 a.img 文件就是包含主引导程序的软盘映像了

如何使用 vmware 引导启动 a.img

  • 我使用的 vmware 版本:16.2.4 build-20089737
  • 不同版本之间可能存在些许差异
  • 创建虚拟机














  • 开启虚拟机,提示找不到操作系统,这个当然是正常的,因为我们前面选择了稍后安装操作系统


  • 现在我们需要让这台新的计算机来加载我们写的主引导程序,而我们的主引导程序在软盘映像文件 a.img 中,那么 vmware 如何加载软盘映像文件呢?
  • 点击“编辑虚拟机设置”->“硬件”,发现没有软盘选项,需要手动添加软盘驱动器

  • 在添加好了软盘驱动器之后,接下来需要加载我们之前准备好的 a.img 映像文件

  • 这时候我们再次点击“开启此虚拟机”后,成功看到了 “ Welcome to KOS. ” 打印信息

  • 至此,说明我们自己编写的主引导程序被成功识别加载并运行
目录
相关文章
|
设计模式 缓存 算法
谈谈我工作中的23个设计模式
从基础的角度看,设计模式是研究类本身或者类与类之间的协作模式,是进行抽象归纳的一个很好的速成思路。后面阅读设计模式后,为了加深理解,对相关图片进行了描绘和微调。 从技术的角度已经有很多好的总结,本文会换一种角度思考,既然设计模式研究的是类与类的关系,我们作为工作的个体,一些工作中的策略是不是也可以进行类比,可以更好地去思考这些模式?答案是肯定的。
26440 31
谈谈我工作中的23个设计模式
|
11月前
|
存储 缓存 安全
阿里云服务器通用型g7、通用型g8a、通用型g8i实例区别及选择参考
阿里云服务器通用型g7、通用型g8a、通用型g8i是目前阿里云的活动中可选的通用型实例规格,他们都同属于通用型实例,但是通用型g7属于第七代云服务器,而通用型g8a、通用型g8i属于第八代云服务器,是最新一代的云服务器实例。那么它们之间具体有哪些区别呢?作为用户的我们应该如何选择呢?
488 0
阿里云服务器通用型g7、通用型g8a、通用型g8i实例区别及选择参考
|
5月前
|
供应链 流计算
飞鹤基于阿里云实时计算Flink构建数字化运营管理体系
飞鹤借助实时计算Flink等产品,构建数字化运营管理体系,建立实时预警机制,提前窥探风险,为供应链等业务决策提效。
712 0
|
弹性计算 负载均衡 对象存储
手把手教你白嫖阿里云服务器(免费领服务器)
手把手教你白嫖阿里云服务器(免费领服务器),阿里云免费服务器领取,个人和企业用户均可以申请,个人免费服务器1核2GB 每月750小时,企业u1服务器2核8GB免费使用3个月,阿里云百科分享阿里云免费服务器申请入口、个人和企业免费配置、申请资格条件及云服务器免费使用时长
2938 0
|
人工智能 Java 算法框架/工具
二维前缀和数组&二维差分数组
二维差分数组div中的每一个格子记录的是「以当前位置为区域的左上角(区域右下角恒定为原数组的右下角)的值的变化量」【应该不固定 可以倒转】
336 0
二维前缀和数组&二维差分数组
|
分布式计算 容灾 大数据
MaxCompute( 原名ODPS)大数据容灾方案与实现(及项目落地实例)专有云
一,背景与概述    复杂系统的灾难恢复是个难题,具有海量数据及复杂业务场景的大数据容灾是个大难题。    MaxCompute是集团内重要数据平台,是自主研发的大数据解决方案,其规模和稳定性在业界都是领先的。
6333 0
钱大妈基于 Flink 的实时风控实践
钱大妈与阿里云 Flink 实时计算团队共建实时风控规则引擎,精确识别羊毛党以防营销预算流失。
钱大妈基于 Flink 的实时风控实践
|
缓存 NoSQL 关系型数据库
10道不得不会的Docker面试题
Docker 1. 什么是 Docker 容器? 2. Docker 和虚拟机有什么不同? 3. 什么是 DockerFile? 4. 使用Docker Compose时如何保证容器A先于容器B运行? 5. 一个完整的Docker由哪些部分组成? 6. docker常用命令 7. 描述 Docker 容器的生命周期。 8. docker容器之间怎么隔离? 《最少必要面试题》
423 0