寒假OS笔记第一天

本文是作者寒假学习自制操作系统的第一天笔记,目标是制作一个toy kernel。作者分享了寻找资料的过程,选择了Hurlex教程作为起点,并介绍了CPU的保护模式、GRUB、multiboot的概念。在实践中,作者遇到了qemu虚拟机的安装问题,决定使用bochs,并开始搭建开发环境,最终成功在Bochs中运行了一个输出"Hello World"的简单内核。
摘要由CSDN通过智能技术生成

寒假OS笔记第一天

本次寒假的目标:自制一个toy kernal

今天准备完成的事情:
找到自制OS所需要的资料
开始第一行代码

寻找资料

在知乎的这个专题和这个专题找到了很多很有帮助的回答:
https://www.zhihu.com/question/25628124
https://www.zhihu.com/question/22463820

从中总结出来的是:

  1. 一个人写一个Demo级别的OS是绝对可行的
  2. 《30天自制操作系统》这本书只适合beginner,不适合计算机专业的学生
  3. 看英文材料是必经之路,逃不掉的

从这些地方收集到的资料有:

  • Bran’s Kernal Development Tutorial
    一个bootloader是GRUB的操作系统编写教程
    https://link.zhihu.com/?target=http%3A//www.osdever.net/bkerndev/Docs/gettingstarted.htm

  • Xv6
    一个简单的Unix-like的教学操作系统
    https://link.zhihu.com/?target=https%3A//pdos.csail.mit.edu/6.828/2011/xv6.html

  • hurlex
    一个github上的简短的操作系统教程
    http://wiki.0xffffff.org/

  • linux 0.11内核详解/剖析
    一本书,年代久远,怀疑内容会不会过时

  • BrokenThorn Entertainment
    http://www.brokenthorn.com/Resources/OSDevIndex.html
    稍微看了一些目录,感觉还不错

  • JamesM’s kernel development tutorials
    https://link.zhihu.com/?target=http%3A//www.jamesmolloy.co.uk/tutorial_html/

现在和以前不一样了,以前什么资料都没有,一清二白,能自己写出内核的那都是真正的大佬。现在的资料比以前多多了,但是筛选资料的难度也增大了。

我准备这些都参考参考。先看一些简单的入个门,然后再深入了解。

此外,我手上目前还有的参考书有一本操作系统概念。

规划

今天先看个有中文的,构造一下概念,然后再看英语的教程。

有中文的教程目前看来只有hurlex了
http://wiki.0xffffff.org/

正式笔记

第一个参考的文档是hurlex
我发现它也是本科生写的。
而且它是基于JamesM’s kernel development tutorials写的。

先看看这个文档的架构
首先是对计算机启动过程等等的概述,其次是按部就班的各个步骤,看起来逻辑很清晰的样子,最远到了内存线程的创建和切换,估计JamesM’s kernel development tutorials最远也只到这附近

每一篇文章的篇幅都并不是很长(对我来说)
算是一个比较简单的能让我建立一个概念的教程吧

Hurlex教程学习——开发环境

这个hurlex是建立在x86架构CPU的保护模式下的。

问题1:什么是CPU的保护模式
CPU有至少两个模式:实模式,保护模式。CPU刚刚启动的时候就是以实模式启动的,是一个速度很快的8086,等到操作系统接管后,它进入实模式,有了更多的功能
实模式和保护模式最大的不同在与地址转换方式

它的开发环境、工具、语言为:

  1. linux系统
  2. C语言
  3. gcc编译器
  4. GUN make构建工具
  5. qemu虚拟机
第一步,下载qemu虚拟机

我用的是ubuntu 20.4 LTS
使用如下指令进行安装:

$ sudo apt install qemu 

但是之后我这里并不是和教程一样,在/usr/bin目录下面有一个qemu-system-i386的文件
另外,使用locate qemu也找不到我任何下载过了的蛛丝马迹

深思熟虑之下决定使用sudo apt purge qemu先卸载了,然后用bochs
bochs是另外一款虚拟机
其实还可以使用vmware,但是我嫌它太笨重了。

使用sudo apt install bochs来进行下载
bochs从来没用过,我估计得花点时间学一学

第二步,开发过程中使用的脚本文件

这个教程直接给出了一个makefile
但是作为一个成熟的开发者,我才不会用现成的makefile,我当然得自己写一个

所以先跳过这一段

bochs的配置文件

经过十五分钟的学习后,我大概懂了bochs配置文件怎么写

# 能使用的内存大小,单位为mb
megs: 32

# ROM文件,这个文件在/usr/share/bochs里面能找到,但是bochs自己提供了BXSHARE这个环境变量
romimage: file="$BXSHARE/BIOS-bochs-latest"
vgaromimage: file="$BXSHARE/VGABIOS-lgpl-latest"

# 软盘。因为我们的目的是生成系统镜像,然后使用bochs运行,这个系统镜像就相当于软盘。有一个软盘就用floppya,两个就是 floppyb,以此类推
floppya: 1_44=floppy.img, status=inserted

# 设置启动设备
boot: floppy

# 鼠标是否启用
mouse: enabled=0

# 启用键盘映射,现在的版本的bochs使用keyboard而不是keyboard_mapping
keyboard: keymap="$BXSHARE/keymaps/x11-pc-us.map"

# CPU配置
clock: sync=realtime

使用man bochsrc能获得详细的使用文档

在用户的家目录下创建.bochsrc,内容就是上面的这些内容
使用bochs试运行
提示错误:

00000000000p[      ] >>PANIC<< dlopen failed for module 'x' (libbx_x.so): file not found

使用apt-file search libbx_x.so,发现少下载了bochs-x

$ apt-file search libbx_x.so
bochs-x: /usr/lib/bochs/plugins/libbx_x.so
bochs-x: /usr/lib/bochs/plugins/libbx_x.so.0
bochs-x: /usr/lib/bochs/plugins/libbx_x.so.0.0.0

赶紧用sudo apt install bochs-x下一个
再次运行,出现一个小黑框。因为我们的软盘floppy.img根本不存在,所以是小黑框
命令行输入q就能关掉

恰个午饭再说,上午的工作就这些吧(因为我睡到十一点才起床所以啥都没干)

三,计算机启动过程、GRUB、multiboot

计算机启动过程,这篇教程给出了一篇博客:http://www.ruanyifeng.com/blog/2013/02/booting.html

此处我做一些简单的总结
首先,计算机必须先启动起来才能正常运行程序,但是不运行程序计算机又不能启动,因此,计算机的启动是一个很矛

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值