从零到一手写操作系统(六、初始化 1)工作模式与环境)
如果追忆会荡起涟漪,那么今天的秋红落叶和晴空万里都归你
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
安装完成后就可以运行虚拟机了
二)新建虚拟机
下一步
下一步
我这里出现了一个问题,系统这一栏没有虚拟化技术,我的主板没有打开,所以设置开启就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懂得都懂
就可以执行下去了,操作很简单
6.2)二级引导器
做完如上操作,也就是二级引导器的工作,接下来就会进入真正的操作系统
效果展示
手写操作系统目录
则移山填海之难,
终有成功之日!
——孙文
ceshi