从零到一手写操作系统(六、初始化 1)工作模式与环境)

image.png

如果追忆会荡起涟漪,那么今天的秋红落叶和晴空万里都归你
https://aeneag.xyz
微信公众号:技术乱舞
艾恩凝

手写操作系统目录

六、启动初始化

6.1)配置环境

本人自用macOS,目前都打算配置一遍环境,毕竟真机linux随时会被没收。

6.1.1)真机Ubuntu20.04

一)更换软件源

因为是PC新安装的Ubuntu20.04

1sudo  cp   /etc/apt/sources.list   /etc/apt/sources.list.bak //备份
2sudo chmod 777 /etc/apt/sources.list 
3sudo vim /etc/apt/sources.list

打开文件侯,全部删除,并更换适合的软件源,这里我用的阿里,其他自行百度

https://developer.aliyun.com/mirror/ubuntu

选择适合的版本,保存

1sudo apt update
2sudo apt-get upgrade
3sudo apt-get install virtualbox

安装完成后就可以运行虚拟机了
042000.jpg

二)新建虚拟机
043000.png

下一步
044000.png

下一步
045000.png
046000.png
047000.png

我这里出现了一个问题,系统这一栏没有虚拟化技术,我的主板没有打开,所以设置开启就ok了

三)虚拟硬盘的建立

首先了解dd和losetup命令

dd Linux dd 命令用于读取、转换并输出数据。

dd 可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。

1dd bs=512 if=/dev/zero of=hd.img count=204800
2
3;bs:表示块大小,这里是512字节
4;if:表示输入文件,/dev/zero就是Linux下专门返回0数据的设备文件,读取它就返回0
5;of:表示输出文件,即我们的硬盘文件。
6;count:表示输出多少块

loseup Linux losetup 命令用于设置循环设备。

循环设备可把文件虚拟成区块设备,籍以模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。

1sudo losetup /dev/loop0 virginOS.img

上面的命令不一定成功,可以用 sudo losetup -f 查看闲置的

Linux 下的 mkfs.ext4 命令格式化这个 /dev/loop0 回环块设备,在里面建立 EXT4 文件系统。

1sudo mkfs.ext4 -q /dev/loop0

接下来挂载

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

如果上面的成功了,就代表成功了

卸载:

1umount ./viginDisk
2losetup -d /dev/loop13

四)安装grub

1第一步挂载虚拟硬盘文件为loop0回环设备
2sudo losetup /dev/loopx virginOS.img
3sudo mount -o loop ./virginOS.img ./virginDisk/ ;挂载硬盘文件
4第二步安装GRUB
5sudo grub-install --boot-directory=./hdisk/boot/ --force --allow-floppy /dev/loop0
6;--boot-directory 指向先前我们在虚拟硬盘中建立的boot目录。
7;--force --allow-floppy :指向我们的虚拟硬盘设备文件/dev/loop0

创建grub.cfg文件,写入

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

五)安装虚拟硬盘

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

1VBoxManage convertfromraw ./virginOS.img --format VDI ./virginOS.vdi
2;convertfromraw 指向原始格式文件
3;--format VDI  表示转换成虚拟需要的VDI格式

安装

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

最后启动

1VBoxManage startvm virginOS

启动成功!

6.1.2)MacOS

用最简单的办法,在上面的Ubuntu系统已经做成了img文件,拷贝到mac上

安装mac版本的virtualbox https://www.virtualbox.org/wiki/Downloads

新建一个虚拟机,情况与上文一样

重新执行上文的第五步

**注意:**mac系统要在设置安全里运行新安装的虚拟机程序,然后重启,用mac懂得都懂

就可以执行下去了,操作很简单
048000.png

6.2)二级引导器

049000.png

050000.png

051000.png
052000.png

做完如上操作,也就是二级引导器的工作,接下来就会进入真正的操作系统

效果展示

053000.jpg

手写操作系统目录


    


公众号'艾恩凝'
个人公众号
个人微信
个人微信
    吾心信其可行,
          则移山填海之难,
                  终有成功之日!
                                  ——孙文
    评论
    1 评论
    2022-05-09 21:57 回复»

    ceshi

avatar

取消