从零开始搭建一个操作系统(1):搭建工作模式和环境
配置平台: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.写在前面 本篇博客参考<操作系统实战 45 讲> 上一篇博客我们动手实现了自己的二级引导器.今天这节课我们将进入二级引导器,完成具体工作的环节. 在二级引导器中,我们要检查 CPU 是 ...
- 32怎么通过一个按键实现不同工作模式_stm32几种低功耗模式的实现和差别
点击上方蓝字关注我哦- 01 前言 按功耗由高到低排列,STM32具有运行.睡眠.停止和待机四种工作模式.上电复位后 STM32 处于运行状态,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式 ...
- 手把手教你如何搭建一个网红教师的网络教学环境
网络教学环境搭建 店铺地址:https://shop66907778.taobao.com/ 参考链接:https://blog.csdn.net/weixin_41486034/article/de ...
- python搭建ai_搭建一个新手学习AI/ML的Python环境
不知不觉消失了好久,公众号也很久没有更新了.因为跑去学习微软AI方向的MPP课程了.MPP是目前微软最先提供关于AI的培训课程,关于MPP的学习体系,我后面会再写一篇简单的介绍. MPP包含了很多的内 ...
- 当前操作系统缺少黑体等字体_从零开始开发一个操作系统
在2019年的最后一天终于完成了整个系统的开发,并给它起名曰--Inios .就如同文章名字一样,完全是从内核编写,非二次开发,从最初的"hello os"到初次有了系统的样子.主 ...
- 2020元旦献礼——从零开始开发一个操作系统
序言 在2019年的最后一天终于完成了整个系统的开发,并给它起名曰--Inios .就如同文章名字一样,完全是从内核编写,非二次开发,从最初的"hello os"到初次有了系统的样 ...
- 超详细教你10分钟搭建一个高端的B2B2C模式的综合性商城|含来客推V3源码下载
需要用到服务器(云主机,虚拟空间),域名,源码 1. 服务器可以理解成一台电脑主机,用于处理存储计算传输等用途. 2. 域名比如你想访问一个网站是src1024.com这就是域名,如果你想回家 首先要 ...
- 一步一步学FRDM-KE02Z(一):IAR调试平台搭建以及OpenSDA两种工作模式设置
摘要:FRDM-KE02Z是飞思卡尔公司较为新的微控制器,学习和开发资料较少.从本篇开始会陆续介绍其相关的开发流程,并完成一个小型的工程项目.这是本系列博客的第一篇,主要介绍开发环境IAR for A ...
- 如何搭建一个你喜欢的工作环境
由于工作性质,linux系统 更适合我们作为开发平台,不过面临一个问题就是,有些调节芯片的工具只有win的版本,但是很少,而且windows真的很烦人 so,wine 在linux上的稳定性 比较差, ...
最新文章
- window 远程访问本地centos/redhat虚拟机上jupter notebook 配置方法
- 神经网络中参数数量的计算
- java 64位 默认分配内存大小_查看你机器中Java程序堆内存的默认初始大小和最大大小...
- java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例
- python numpy数组画图_python – Numpy和Pyplot的条件绘图
- 关于估时间的一些感想
- 你不知道的那些console
- 3月20日 表单
- java在线播放_Java实现视频在线播放flv视频
- 【亲测可行】SVN的添加忽略
- 工作拾忆 一年C++经验小记
- SDOI2015寻宝游戏
- 数据埋点日志awk脚本快速入库
- UNreal 创建一个简单的玻璃材质+金属材质+创建材质实例
- 在大学生思想政治教育中融入传统礼仪2019管理学EI会议的实现路径
- dalvik下替换so简单dump出梆梆加固保护的odex
- 多进程爬取补天的厂商
- 用python实现银行金额大小写转换
- 我开发过程中遇到的Echarts地图立体描边问题解决方式
- php 递归遍历文件夹,php递归遍历目录_PHP教程
热门文章
- MySQL数据库系列培训教程
- 爆强!瑞星老用户可获取免费正版Vista
- 几种重要的HDTV连接端子
- 利用前三年的数据预测2018年NBA常规赛东西部前八的详细过程和解决思路(19年类似)
- 个人观点:Cisco和Juniper认证的比较
- 2021下半年软考网络工程师上午真题(一)
- LVS负载均衡群集之构建NAT模式
- AndFix简单集成实现
- Kali安装VMware Tools,解决“安装VMware Tools”灰色按钮问题
- 六年级计算机课学什么意思,六年级信息技术上册《第一单元第2课与计算机交朋友》教案及教学反思...