AkiraZheng's Time.

手写操作系统1:项目环境部署

Word count: 1.3kReading time: 5 min
2024/11/25

一、所用ubuntu及虚拟机版本

之前还尝试了在docker下安装,但是出现很多奇奇怪怪的错误,所以放弃了,直接选择在虚机下安装

版本

电脑:MacBook Pro

虚拟机:VirtualBox 7.1.8

linux 版本:ubuntu 20.04.6

虚拟机配置

内存:8192M

硬盘:50G

处理器:4

资源分享

bochs-2.6.tar.gz在下面的夸克网盘中:

1
2
3
4
我用夸克网盘给你分享了「share_tinyOS」,点击链接或复制整段内容,打开「夸克APP」即可获取。
/~9c4837w2hG~:/
链接:https://pan.quark.cn/s/335eca91431f
提取码:4JT8

二、bochs模拟器配置

首先用该链接下载bochs-2.6.tar.gz

先解压:tar -zxvf bochs-2.6.tar.gz

终端cd 到bochs-2.6文件夹中,执行./configure进行config,其中--prefix=后面路径中的akira修改为自己的用户名

1
2
3
4
5
6
7
8
9
./configure \
--prefix=/home/akira/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11 \
LDFLAGS="-lpthread"
  • 第一个报错解决:sudo apt-get -y install gcc,解决方案是装一个编译器

  • 第二个报错解决:sudo apt-get install build-essential

执行makemake install

  • 出现报错,解决方法为:sudo apt-get install -y libgtk2.0-dev,然后重新执行./configuremake

成功执行完makemake install后,生成bochs文件夹,该文件夹下可以进行我们的内核编写、内核编译运行、起虚拟机等一系列学习操作。

三、运行bochs

1. 配置bochsrc.disk

由于boxsrc.disk文件需要用到下面生成的镜像文件路径,因此将该配置放在附录中

2. 运行bochs:无启动盘

bochs路径下执行bin/bochs

之后输入c进入模拟器,但是显示没有启动盘。

Bochs 启动时会读取配置文件(通常是 bochsrc),其中指定了启动盘(boot drive)镜像的位置。如果没有正确配置或指定的镜像文件不存在,就会出现没有启动盘的问题。

因此需要用 bximage 创建 .img 镜像并正确配置 bochsrc

3. 创建虚拟盘

bin/bximage 是一个虚拟磁盘镜像生成工具,生成的虚拟磁盘后缀名为.img,下面我们将运行bin/bximage 创建一个虚拟磁盘镜像,根据运行后的指引一步步生成master镜像:

创建成功后,在bin目录下生成了master-hd60M.img,创建完并修改配置文件bochsrc.disk,将虚拟的镜像硬盘文件的路径添加进去,再次启动模拟器:

此时只有master盘,还是无法读取盘,但是报错内容跟未加磁盘前不一样了:

上一个报错截图中shell的报错内容是Boot failed:could not read the boot disk

而此次报错截图内容是Boot failed:not a bootable device

4. 编写MBR文件作为master的主引导程序

具体操作见文档另一篇博文手写操作系统2:编写MBR主引导扇区

四、ubuntu设置开启ssh

参考:ubuntu20.04开启SSH远程登录

参考:Windows下VSCode连接Ubuntu远程开发mac下vscode连接ssh

本机写得ssh config文件:

1
2
3
Host 172.16.33.128
HostName 172.16.33.128
User akira

连接ssh需要先把本机的代理关了,解决办法是:

附录-bochs配置文件说明

./bochs/路径下创建bochsrc.disk文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
vim bochs.disk   #创建配置文件(配置文件存放位置和文件名可以随意)

###################### 配置文件开始 ####################
#第一步,首先设置bochs在运行过程中能够使用的内存,本例为32MB
#关键字为:megs

megs: 32

#第二步,设置对应真实机器的BIOS和VGA BIOS
#对应两个关键字为: romimage 和vgaromiage

romimage: file=/实际路径/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/实际路径/bochs/share/bochs/VGABIOS-lgpl-latest

#第三步,选择启动盘符
boot: disk #从硬盘启动

#第四步,设置日志文件的输出
log: bochs.out

#第五步,开启或关闭某些功能
#下面是关闭鼠标,并打开键盘
mouse: enabled=0
keyboard_mapping: enabled=1,map=/实际路径/bochs/share/bochs/keymaps/x11-pc-us.map

#硬盘设置
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="hd60m.img", mode=flat, cylinders=121, heads=16, spt=63
###################### 配置文件结束 ####################

最后,以本人为例,编写的disk文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
megs : 32

romimage: file=/home/akira/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/akira/bochs/share/bochs/VGABIOS-lgpl-latest

boot: disk

log: bochs.out

mouse:enabled=0
keyboard:keymap=/home/akira/bochs/share/bochs/keymaps/x11-pc-us.map

ata0:enabled=1,ioaddr1=0x1f0,ioaddr2=0x3f0,irq=14
ata0-master: type=disk, path="master-hd60M.img", mode=flat,cylinders=121,heads=16,spt=63
#ata0-slave: type=disk, path="hd80M.img", mode=flat,cylinders=162,heads=16,spt=63

#gdbstub:enabled=1,port=1234,text_base=0,data_base=0,bss_base=0

问题处理

  1. 无法打开终端,一直转圈

    解决方法:VirtualBox_Ubuntu22.04 Terminal无法打开,其中nano用Ctrl+X 保存并退出

  2. 找不到root密码

    解决办法:在刚开始创建虚拟机时就输入密码了,当前密码为akira

  3. virtualbox共享文件

    解决办法:1)安装VBoxGuestAdditions 2)打开拖放功能

参考

《操作系统真象还原》

Tiny-OS的项目介绍:大佬的github学习仓以及他的csdn学习笔记链接

CATALOG
  1. 一、所用ubuntu及虚拟机版本
    1. 版本
    2. 虚拟机配置
    3. 资源分享
  2. 二、bochs模拟器配置
  3. 三、运行bochs
    1. 1. 配置bochsrc.disk
    2. 2. 运行bochs:无启动盘
    3. 3. 创建虚拟盘
    4. 4. 编写MBR文件作为master的主引导程序
  4. 四、ubuntu设置开启ssh
    1. 附录-bochs配置文件说明
  5. 问题处理
  6. 参考