配置平台:VMware虚拟机+Ubuntu

Linux liuhao-virtual-machine 5.4.0-26-generic #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

初始化流程:PC机加电(加电)-》ROM上的BIOS固件检测和初始化 CPU、内存及主板平台(自检)-》加载引导设备到硬盘的第一个扇区(grub放置)-》OS

生成虚拟硬盘

大多数虚拟机都是用文件来模拟硬盘的,即主机系统下特定格式的文件,虚拟机中操作系统的数据只是写入了这个文件中。

生成一个100MB的纯二进制文件(就是1~100M字节的文件里面填充为0)

# /dev/zero就是Linux下专门返回0数据的设备文件,读取它就返回0
dd bs=512 if=/dev/zero of=hd.img count=204800

下面我们要格式化这个文件为虚拟硬盘

# 把虚拟硬盘文件变成 Linux 下的回环设备,让 Linux 以为这是个设备
sudo losetup /dev/loop0 hd.img

建立文件系统

sudo mkfs.ext4 -q /dev/loop0

挂载目录

sudo mount -o loop ./hd.img ./hdisk/ ;挂载硬盘文件
sudo mkdir ./hdisk/boot/ ;建立boot目录

这是因为 mount 命令只能识别在纯二进制文件上建立的文件系统,如果使用虚拟机自己生成的硬盘文件,mount 就无法识别我们的文件系统了

进行到这里,我们会发现 hdisk 目录下多了一个 boot 目录,这说明我们挂载成功了

安装grub

sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop0

可以看到,现在 /hdisk/boot/ 目录下多了一个 grub 目录,表示我们的 GRUB 安装成功。请注意,这里还要在 /hdisk/boot/grub/ 目录下建立一个 grub.cfg 文本文件,GRUB 正是通过这个文件内容,查找到我们的操作系统映像文件的

menuentry 'HelloOS' {insmod part_msdos
insmod ext2
set root='hd0,msdos1' #我们的硬盘只有一个分区所以是'hd0,msdos1'
multiboot2 /boot/HelloOS.eki #加载boot目录下的HelloOS.eki文件
boot #引导启动
}
set timeout_style=menu
if [ "${timeout}" = 0 ]; thenset timeout=10 #等待10秒钟自动启动
fi

让虚拟机能够识别虚拟硬盘

转换成让虚拟机能识别的虚拟硬盘

VBoxManage convertfromraw ./hd.img --format VDI ./hd.vdi

安装虚拟硬盘

#第一步 SATA的硬盘其控制器是intelAHCI
VBoxManage storagectl HelloOS --name "SATA" --add sata --controller IntelAhci --portcount 1
#第二步
VBoxManage closemedium disk ./hd.vdi #删除虚拟硬盘UUID并重新分配
#将虚拟硬盘挂到虚拟机的硬盘控制器
VBoxManage storageattach HelloOS --storagectl "SATA" --port 1 --device 0 --type hdd --medium ./hd.vdi

启动

VBoxManage startvm HelloOS #启动虚拟机

从零开始搭建一个操作系统(1):搭建工作模式和环境相关推荐

  1. 设置工作模式与环境(下):探查和收集信息

    1.写在前面 本篇博客参考<操作系统实战 45 讲> 上一篇博客我们动手实现了自己的二级引导器.今天这节课我们将进入二级引导器,完成具体工作的环节. 在二级引导器中,我们要检查 CPU 是 ...

  2. 32怎么通过一个按键实现不同工作模式_stm32几种低功耗模式的实现和差别

    点击上方蓝字关注我哦- 01 前言 按功耗由高到低排列,STM32具有运行.睡眠.停止和待机四种工作模式.上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式 ...

  3. 手把手教你如何搭建一个网红教师的网络教学环境

    网络教学环境搭建 店铺地址:https://shop66907778.taobao.com/ 参考链接:https://blog.csdn.net/weixin_41486034/article/de ...

  4. python搭建ai_搭建一个新手学习AI/ML的Python环境

    不知不觉消失了好久,公众号也很久没有更新了.因为跑去学习微软AI方向的MPP课程了.MPP是目前微软最先提供关于AI的培训课程,关于MPP的学习体系,我后面会再写一篇简单的介绍. MPP包含了很多的内 ...

  5. 当前操作系统缺少黑体等字体_从零开始开发一个操作系统

    在2019年的最后一天终于完成了整个系统的开发,并给它起名曰--Inios .就如同文章名字一样,完全是从内核编写,非二次开发,从最初的"hello os"到初次有了系统的样子.主 ...

  6. 2020元旦献礼——从零开始开发一个操作系统

    序言 在2019年的最后一天终于完成了整个系统的开发,并给它起名曰--Inios .就如同文章名字一样,完全是从内核编写,非二次开发,从最初的"hello os"到初次有了系统的样 ...

  7. 超详细教你10分钟搭建一个高端的B2B2C模式的综合性商城|含来客推V3源码下载

    需要用到服务器(云主机,虚拟空间),域名,源码 1. 服务器可以理解成一台电脑主机,用于处理存储计算传输等用途. 2. 域名比如你想访问一个网站是src1024.com这就是域名,如果你想回家 首先要 ...

  8. 一步一步学FRDM-KE02Z(一):IAR调试平台搭建以及OpenSDA两种工作模式设置

    摘要:FRDM-KE02Z是飞思卡尔公司较为新的微控制器,学习和开发资料较少.从本篇开始会陆续介绍其相关的开发流程,并完成一个小型的工程项目.这是本系列博客的第一篇,主要介绍开发环境IAR for A ...

  9. 如何搭建一个你喜欢的工作环境

    由于工作性质,linux系统 更适合我们作为开发平台,不过面临一个问题就是,有些调节芯片的工具只有win的版本,但是很少,而且windows真的很烦人 so,wine 在linux上的稳定性 比较差, ...

最新文章

  1. window 远程访问本地centos/redhat虚拟机上jupter notebook 配置方法
  2. 神经网络中参数数量的计算
  3. java 64位 默认分配内存大小_查看你机器中Java程序堆内存的默认初始大小和最大大小...
  4. java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例
  5. python numpy数组画图_python – Numpy和Pyplot的条件绘图
  6. 关于估时间的一些感想
  7. 你不知道的那些console
  8. 3月20日 表单
  9. java在线播放_Java实现视频在线播放flv视频
  10. 【亲测可行】SVN的添加忽略
  11. 工作拾忆 一年C++经验小记
  12. SDOI2015寻宝游戏
  13. 数据埋点日志awk脚本快速入库
  14. UNreal 创建一个简单的玻璃材质+金属材质+创建材质实例
  15. 在大学生思想政治教育中融入传统礼仪2019管理学EI会议的实现路径
  16. dalvik下替换so简单dump出梆梆加固保护的odex
  17. 多进程爬取补天的厂商
  18. 用python实现银行金额大小写转换
  19. 我开发过程中遇到的Echarts地图立体描边问题解决方式
  20. php 递归遍历文件夹,php递归遍历目录_PHP教程

热门文章

  1. MySQL数据库系列培训教程
  2. 爆强!瑞星老用户可获取免费正版Vista
  3. 几种重要的HDTV连接端子
  4. 利用前三年的数据预测2018年NBA常规赛东西部前八的详细过程和解决思路(19年类似)
  5. 个人观点:Cisco和Juniper认证的比较
  6. 2021下半年软考网络工程师上午真题(一)
  7. LVS负载均衡群集之构建NAT模式
  8. AndFix简单集成实现
  9. Kali安装VMware Tools,解决“安装VMware Tools”灰色按钮问题
  10. 六年级计算机课学什么意思,六年级信息技术上册《第一单元第2课与计算机交朋友》教案及教学反思...