操作系统开发(2)——开发平台

发布于 2022-02-23  34 次阅读


上一章简单介绍了开发操作系统的一些准备工作,这一章我们会搭建一个利于开发的环境和用于测试的虚拟机环境。

因为我自己比较习惯使用windows系统,所以这篇文章的环境配置都是基于windows系统来搭建的,如果大家喜欢使用linux进行开发的话,也可以在linux系统上进行相关环境的搭建,实际上在linux上搭建应该会比windows更简单。

编译环境

通过第一章可以知道,开发操作系统时主要需要编译的就是两个东西:一个是汇编,一个是C语言。

因为windows上配置gcc编译环境需要用到mingw,这个软件....比较一言难尽,所以我在编译时选择了Windows Subsystem for Linux(也就是传说中的子系统)作为系统平台(这也是为什么我在上面说在linux上搭建会比windows更简单的原因,因为在windows上其实也是使用linux系统编译),子系统版本为ubuntu 20.04.4,不过大家也可以选择自己喜欢的版本。

开启子系统的方法如下,很简单就不细说了:

开启完上面两个功能后后重启就ok了,然后去微软应用商城找一个喜欢的linux发行版安装就好了。

对于linux系统的初始配置(设置unix username、更换apt软件源等)就不多阐述了,接下来安装nasm和gcc的编译环境。

安装nasm

首先时nasm,这一步很简单,直接使用如下命令即可:

1
2
3
4
# (可选)更新软件列表
apt update
# 安装nasm
apt install nasm

安装完成后使用nasm -h指令,得到以下结果说明安装成功:

1
2
3
4
5
6
7
8
9
usage: nasm [-@ response file] [-o outfile] [-f format] [-l listfile]
            [options...] [--] filename
    or nasm -v (or --v) for version info


Response files should contain command line parameters,
one per line.

后面有一堆参数使用方法...

安装gcc

gcc安装起来会麻烦一点,因为本文操作系统的开发需要用到gcc-4.8.5的低版本gcc,而ubuntu 20.04版本的apt只提供gcc-7-10版本的安装,如果直接使用apt install gcc-4.8.5会得到如下提示:

1
2
3
4
5
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package gcc-4.8.5
E: Couldn't find any package by glob 'gcc-4.8.5'

所以需要按照如下步骤来进行安装:

首先,使用sudo apt install build-essential来安装build-essential工具包,在完成此工具包的安装后,会顺便安装一个gcc-9,这个工具可以用来进行多个gcc版本之间的切换,后面会用到。

为了安装低版本的gcc,需要引入低版本系统的软件源,这里会用到ubuntu 16.04版本的软件源,直接在阿里巴巴开源镜像站复制阿里软件源即可。找到ubuntu 16.04并将其复制到/etc/apt/source.list中即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ubuntu 16.04 阿里软件园

deb http://mirrors.aliyun.com/ubuntu/ xenial main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main

deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main

deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates universe

deb http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security universe

然后使用apt update更新一下软件源,再使用apt install gcc-4.8即可安装所需版本的gcc环境。

完成上述步骤后,使用gcc --version指令查询gcc版本,发现还是gcc-9,这是因为我们安装低版本gcc后,gcc管理工具默认使用的是高版本,所以我们需要手动进行版本切换。使用sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50将两个版本的gcc安装到管理工具上,然后使用sudo update-alternatives --config gcc进行版本切换即可,操作很简单,就不详细描述了。对于g++的操作与gcc一模一样,只需要把命令中的gcc替换为g++即可。

在完成上述操作后,使用gcc --version可以得到以下结果,说明操作正确:

1
2
3
4
gcc (Ubuntu 4.8.5-4ubuntu2) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

在后续开发中还会用到make、dd之类的工具,这些工具一般Ubuntu都会自带,所以不再详述其安装方法。

运行环境

运行环境使用VMware workstation pro16即可(当然,用bochs更好,因为可以随时对操作系统进行调试,但是因为我们的系统后续会进行一些图形化的计算,所以bochs用起来可能会特别卡),安装很简单,只需要一直点下一步即可,这里就不再细说了。至于新增虚拟机的步骤,在后续进行测试的时候再细讲。

不过需要注意的是,因为之前使用了Windows的wsl(子系统),所以VMware workstation在启动虚拟机时需要启用侧通道缓解,启用该功能会稍微影响虚拟机性能,但是在9代以上的酷睿系列CPU中,该影响基本上可以忽略不计。至于侧通道缓解,workstation会自动帮你启用,所以不需要额外进行操作。


学而不思则罔,思而不学则殆