上一章简单介绍了开发操作系统的一些准备工作,这一章我们会搭建一个利于开发的环境和用于测试的虚拟机环境。
因为我自己比较习惯使用windows系统,所以这篇文章的环境配置都是基于windows系统来搭建的,如果大家喜欢使用linux进行开发的话,也可以在linux系统上进行相关环境的搭建,实际上在linux上搭建应该会比windows更简单。
编译环境
通过第一章可以知道,开发操作系统时主要需要编译的就是两个东西:一个是汇编,一个是C语言。
因为windows上配置gcc编译环境需要用到mingw,这个软件....比较一言难尽,所以我在编译时选择了Windows Subsystem for Linux(也就是传说中的子系统)作为系统平台(这也是为什么我在上面说在linux上搭建会比windows更简单的原因,因为在windows上其实也是使用linux系统编译),子系统版本为ubuntu 20.04.4,不过大家也可以选择自己喜欢的版本。
开启子系统的方法如下,很简单就不细说了:
对于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 40和sudo 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会自动帮你启用,所以不需要额外进行操作。