从无到有做一个属于自己的迷你操作系统

news/2025/2/3 18:10:42/

这篇教程不需要你有什么编程基础,只需要对计算机结构有过大致的了解就可。本教程的基本原理取自《x86汇编语言-从实模式到保护模式》一书。本教程涉及的所有工具都已打包,链接附在文章末尾,感兴趣的小伙伴可以自行下载。废话不多说,直接上干货!

第一步->解压缩素材文件

        

解压完毕可以看到文件夹内包含了7个文件.
dd:空镜像制作工具 
FloppyWriter:磁盘写入工具
git:终端操作软件
HackOS.iso:现成的空镜像
NASM:编译软件
VirtualBox6.1.32:虚拟机软件
VsCode:代码编辑器

第二步->搭建实验环境

1.双击VirtualBox6.1.32安装文件一键到底即可,记住安装路径
2.双击vscode安装文件一键到底即可。
3.双击git安装文件同样一键到底即可。
4.双击NASM解压后得到的文件夹 记住它的文件位置,我这里是D:\NASM。
5.dd和FloppyWriter都是可以直接运行的软件,创建一个文件夹名字为dd并把dd.exe放进去,我这里的路径是 D:\dd。FloppyWriter不用动留着备用即可。
6.右击桌面的计算机图标->点击属性->点击高级系统设置->点击环境变量->添加两个PATH路径,D:\NASM和D:\dd。
7.相同的步骤,为VirtualBox也添加一个path我这里是D:\virtualbox

俗话说:“巧妇难为无米之炊”,当以上操作全部完成以后,恭喜你,你所有的工具已经部署完毕!

第三步->创建程序

  • 双击打开桌面的vscode图标

  •  新建一个文件并输入以下代码:
addr equ 0xb800         ;equ定义常量
mov ax,addr             ;ax寄存器存储显存地址
mov es,ax               ;es附加寄存器指向显存mov byte [es:0x00],'H'            ;赋ASCII码
mov byte [es:0x01],0x07           ;赋颜色
mov byte [es:0x02],'e'            
mov byte [es:0x03],0x07     
mov byte [es:0x04],'l'            
mov byte [es:0x05],0x07       
mov byte [es:0x06],'l'            
mov byte [es:0x07],0x07
mov byte [es:0x08],'e'            
mov byte [es:0x09],0x07
mov byte [es:0x0a],','            
mov byte [es:0x0b],0x07
mov byte [es:0x0c],'W'            
mov byte [es:0x0d],0x07    
mov byte [es:0x0e],'o'            
mov byte [es:0x0f],0x07
mov byte [es:0x10],'r'            
mov byte [es:0x11],0x07
mov byte [es:0x12],'l'            
mov byte [es:0x13],0x07
mov byte [es:0x14],'d'            
mov byte [es:0x15],0x07
mov byte [es:0x16],'!'            
mov byte [es:0x17],0x07    jmp $                            ;锁住cpu
times 510-($-$$) db 0            ;将文件用0填充到512KB大小
dw 0xaa55                        ;引导识别字节
  • 填入代码后,点击vscode左上角的文件->另存为,我这里保存的路径为C:\Users\Administrator\Desktop\add.asm。该文件就是我们的系统程序主体,他的功能就是调用显卡向屏幕输出"Hello,World!"。

第四步->编译程序

1.在add.asm所在的文件夹内->右击鼠标->Git Bush Here 打开git终端
2.在终端输入:nasm -f bin add.asm -o boot.bin
  • 编译后得到了一个boot.bin文件。

第五步->创建一个空磁盘

继续在终端输入:dd if=/dev/zero of=myos.img bs=1024 count=10000
制作一个大小为10MB的磁盘,当然你也可以不制作,随同的打包文件内有一个已经制作好的镜像,
与myos.img一样只不过名字不同而已。

第六步->把程序写入空磁盘的引导扇区中

这一步很简单,
->点击FloppyWriter运行
->Write File to Image
->选择编译好的boot.bin
->选择制作好的镜像文件myos.img或者HackOS.img
  •  写入成功后会弹出如下提示。

  

第七步->创建一个虚拟机

  • 什么你问我问什么不跑真机? 好吧,老是说,跑真机是可以的,但是对于我们来说这么折腾太麻烦,所以虚拟机是最好的选择,懂我的意思吧:-)
->双击打开vbox
->点击新建
->输入一个名称
->选定创建在哪一个文件夹内
->类型选择other
->版本选择other
->内存默认64MB就行
->不创建硬盘
->继续创建

  • ok! 创建完毕,此时这个myos你可以认为它是一台少了硬盘的电脑,所以我们得给它整块硬盘

第八步->创建虚拟机的硬盘

  •  为虚拟机创建硬盘的操作我们继续在git终端内操作
输入操作语句:vboxmanage convertdd myos.img myos.vdi

  •  搞定,就是它了!接下来就是把硬盘装在电脑上。

第九步->开机运行

  • 点击设置

  •  点击存储->点击硬盘标志

  • 点击注册 

  • 选中我们刚刚创建好的硬盘

  • 现在硬盘给它安排了! 

  • 启动运行看一下

  • 非常棒!!!祝贺你,你亲手制作并运行了一个只属于你自己的系统!
  • 我引出开篇的目的只是为了抛砖引玉,底层知识对于小白来说是比较难理解的,
  • 所以我觉得带领大家先动手实操一番,其实亲手实践对于原理的理解更有帮助。
  • 关于此篇的原理部分我会在后面持续更新,当然我会用浅显易懂、循序渐近的方式带大家解开系统编程的神秘面纱。

本教程配套文件的链接: https://pan.baidu.com/s/11T6uVUsF8hslKeDse-1UoQ?pwd=w9z1


http://www.ppmy.cn/news/538884.html

相关文章

Linux怎么拷贝文件到ext3,如何在Linux上将Ext2或Ext3文件系统迁移到Ext4 | MOS86

知道您应该升级Linux文件系统但不能面对麻烦吗? 此处介绍了如何将ext2和ext3转换为ext4,而无需进行彻底的重新安装。 如果您彬彬有礼,则可以将ext3文件系统称为值得尊敬的系统,该系统可追溯到2001年启动。对于可怜的旧ext2&#x…

java怎么生成exe文件_Java如何生成exe文件

对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装有jre、jre版本问题、jre去哪下载、如何用jre启动你的Java应用?不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天。如果不是因…

串口 单片机 文件_DIY迷你单片机学习板

图28.1 单片机编程实验板 单片机是一门实践性非常强的学科,复杂的中断系统和寄存器往往让初学者觉得晦涩难懂。如果仅仅是理论学习和纸上谈兵而不经过任何实践,套用平凡老师以前的一句话——“我劝您还是趁早放弃。” 为此,我们设计了这款小巧…

不属于mysql系统文件_下面 ( ) 不属于数据库管理系统。_学小易找答案

【单选题】在采用客户机/服务器体系结构的数据库 应用系统 中,应该将用户应用程序 安装在 ( ) 。 【简答题】外事接待的 一般常识 有哪些? 【单选题】下面哪一个是SQL Server 2008的系统数据库( )。 【单选题】下面 ( ) 不属于数据库管理系统。 【单选题】下面 ( ) 不属于 SQL…

FastDFS分布式文件系统集群搭建

架构图: 后面有脚本一键安装。。。。 第一步:安装6个迷你版的Linux 第二步:由于迷你版Linux缺少一些常用的工具库,操作起来不方便,推荐安装如下的工具库: 1、安装lrzsz, yum install lrzsz -y…

制作根文件系统

开发环境 ubuntu16.04 arm-linux-gcc 4.3.2 开发板内核linux-3.4.2 zj2440 1. 交叉编译busybox-1.20.0 1.1、make menuconfig //进入 Busybox Settings —> Build Options —> (arm-linux-) Cross Compiler prefix //制定交叉编译器 1.2、 make 1.3、安装:m…

操作系统-5大功能、5大类型

操作系统的5大管理功能: 1)设备管理:主要负责内核和外围设备的数据交互,实质是对硬件设备的管理,包括输入输出设备的分配、初始化、维护和回收等等。 2)作业管理:负责人机交互、图形界面或系统任…

服务器查看文件,云服务器查看文件

云服务器查看文件 内容精选 换一换 将文件上传至Linux服务器一般会采用WinSCP工具。本节为您介绍本地Windows计算机使用WinSCP工具,上传文件至Linux云服务器的操作方法。以下以CentOS 7.2为例。Linux云服务器可以访问公网。下载 WinSCP 客户端并安装。单击这里下载&…