peiwithhao 发表于 2022-12-26 14:47

从0到-1写一个操作系统-0x00-环境准备

本帖最后由 peiwithhao 于 2023-3-2 13:58 编辑


> 这里写个往期推荐,这样可以来回跳跃(狗头
> (https://www.52pojie.cn/thread-1730367-1-1.html)
> (https://www.52pojie.cn/thread-1730510-1-1.html)
> (https://www.52pojie.cn/thread-1731150-1-1.html)
> (https://www.52pojie.cn/thread-1731546-1-1.html)
> (https://www.52pojie.cn/thread-1732769-1-1.html)

今天开始更新编写OS,从底层bootloader至用户shell编写一条龙,可以帮助广大想从事操作系统类型工作的同学对底层更加透彻,我的所有源码都在github上同文章保持同步更新,地址在文末,大家可以多提出意见PR
## 0x00 环境准备
本机环境为Ubuntu 20.04,镜像大家可以自行去官网免费获得
### 1. bochs安装
这里当然也可以使用qemu,但由于我是大部分对照《操作系统真象还原》这本书来学习,所以为了避免不必要的麻烦,使用bochs即可。
首先这里是[安装路径](https://sourceforge.net/projects/bochs/),大伙认准2.6.8的版本,下载后文件即为bochs-2.6.8.tar.gz(2.6.2有点问题)
我们此时先进行解压,然后进入bochs-2.6.2目录
> tar -zxvf bochs-2.6.8.tar.gz
   
此时我们需要依次进行文件配置以及make
```
./configure \
--prefix=/your_path/bochs \
--enable-debugger \
--enable-disasm \
--enable-iodebug \
--enable-x86-debugger \
--with-x \
--with-x11
```
这里如若想使用gdb进行调试,则需要将--enable-debugger替换为--enable-gdb-stub,不过我这里不建议大家使用gdb,因而环境一致可能造成许多不同的问题,我们直接用bochs本身自带的调试功能即可

当我们将上述配置好会形成Makefiel后直接make就可以开始编译了
> make
当咱们make无误后,再次使用命令`make install`即可在你的制定目录下生成所需要要的文件

### 2. bochs配置
我们在bochs目录下创建一个名为bochsrc.disk,我感觉这很类似与我们qemu中的初始init文件,他就是设置参数来调整我们的磁盘情况,你也可以理解为咱们这在规定磁盘参数
具体配置如下
```
#第一步,首先设置 Bochs 在运行过程中能够使用的内存,本例为 32MB
#关键字为 me gs
megs :512
#第二步,设置对应真实机器的 BIOS VGA BIOS
#对应两个关键字为 romimage vgaromimage
romimage: file=/home/dawn/repos/OS_learning/bochs/share/bochs/BIOS-bochs-latest
vgaromimage: file=/home/dawn/repos/OS_learning/bochs/share/bochs/VGABIOS-lgpl-latest
#第三步,设置 Bochs 所使用的磁盘,软盘的关键字为 floppy
#若只有一个软盘,目IJ 使用 floppy 即可,若有多个,则为 floppya, floppyb… #floppya: 1_ 44=a.img, status=inserted
#第四步,选择启动盘符。
#boot: floppy #默认从软盘启动,将其注释
boot: disk #改为从硬盘启动。我们的任何代码都将直接写在硬盘上,所以不会再有读写软盘的操作。
#第五步,设置日志文件的输出。
log: bochs.out
#第六步,开启或关闭某些功能。
#下面是关闭鼠标,并打开键盘。
mouse: enabled=0
keyboard:keymap=/home/dawn/repos/OS_learning/=bochs/share/bochs/keymaps/xll-pc -us.map
#硬盘设置
ata0: enabled=1, ioaddr1=Ox1f0, ioaddr2=0x3f0, irq=14
#下面的是增加的 bochs gdb 的支持,这样 gdb 可以远程连接到此机器的 234 口调试了
#gdbstub : enabled=l, port=l234, text_base=O, data_base=O, bss_base=O
################### 配置文件结束 #####################
```
但是仅有一个配置文件还不够,所以我们需要运用bochs自带的功能生成一个虚拟的磁盘,他位于在你们bochs目录下bin目录里面
一下为对应参数所表达含义,这里你也可以通过使用help指令来查看
+ -fd   创建软盘
+ -hd   创建硬盘
+ -mode 创建硬盘类型
+ -size 硬盘大小
+ -q    静默模式
所以咱们执行如下命令
```
bin/bximage -hd -mode="flat" -size=60 -q hd60M.img
```
当然我们也可以用如下方法
![](http://imgsrc.baidu.com/forum/pic/item/aa18972bd40735fac04d0c7ddb510fb30e2408b0.jpg)
此时注意我们还需要将画红线的那条参数加入我们之前写的bochsrc.disk配置文件中(联动起来惹
然后我们再将用以下指令来启动咱们的裸机
```
bin/bochs -f bochsrc.disk
```
执行之后会发现有个错误
![](http://imgsrc.baidu.com/forum/pic/item/d62a6059252dd42abeb8436f463b5bb5c8eab845.jpg)
此时显示他不是一个bootable disk,也就是说咱们没写boot,至于具体boot程序如何写,我将在下一篇继续解释

## 0x01 总结
此篇十分简单,还根本没开始实现os,所以十分顺畅,还提一嘴,这个项目我会持续在github上更新,源码什么的一股脑全放上面,有需要的大家可以去看看
> [传送门](https://github.com/PeiandHao/Simple_OS_For_Studing)

peiwithhao 发表于 2022-12-26 16:55

这里声明一下哈,这里提一嘴github只是因为我希望有师傅可以跟我一起讨论下,并没有说借此平台搞宣传,我只是个刚考完研渴望写个os当复试项目的菜鸡{:301_999:}

jffwoo 发表于 2023-1-14 12:16

好不容易configure没有报错了,但是make报错了,报错信息如下所示:
x.cc:37:10: fatal error: X11/Xlib.h: No such file or directory
   37 | #include <X11/Xlib.h>
      |          ^~~~~~~~~~~~
compilation terminated.
make: *** Error 1
这个是报x11的问题,configure的时候是否可以去掉with-x和with-x11的参数?

peiwithhao 发表于 2022-12-26 15:05

andy833john 发表于 2022-12-26 15:03
@peiwithhao
你在你的私人托管github平台,还在这边推广广告啊。
这是不是要给广告费呢~~~


这是何意,我想的是这边代码不是很方便管理所以说放github上了,有兴趣的同学可以去看看,不知道有不能推广这一说{:1_890:}

andy833john 发表于 2022-12-26 15:03

哥吉拉 发表于 2022-12-26 15:23

楼主非常强大。前排膜拜支持!

YFxbxb888 发表于 2022-12-26 16:13

楼主非常厉害,过来膜拜一下

flyingdancex 发表于 2022-12-26 16:17

确定从0开始?围观一下

co1dlight 发表于 2022-12-26 16:19

已收听并star,期待更新!

ytfrdfiw 发表于 2022-12-26 16:21

感谢分享。

cbdgv 发表于 2022-12-26 16:23

牛B 谢谢分享 一起学习

yunlongzhuhuo 发表于 2022-12-26 16:32

andy833john 发表于 2022-12-26 15:03
@peiwithhao
你在你的私人托管github平台,还在这边推广广告啊。
这是不是要给广告费呢~~~


也不能把源码都放在帖子里啊,长到离谱{:1_925:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 从0到-1写一个操作系统-0x00-环境准备