1.在docker 中拉取Linux 镜像

在一个空文件夹中创建文件 Dockerfile 写入如下命令,拉取一个基础的docker 镜像

FROM daocloud.io/library/ubuntu:16.04
RUN   apt-get update && apt-get upgrade -y 
WORKDIR  /home/labs #设置工作目录的路径

在终端中 进入Dockerfile 文件所在的文件夹 执行如下命令:

docker build -t os_lab:0.1 .

然后等待docker ubuntu16.04 的镜像被拉取到本地。

在终端中输入如下命令,检查当前镜像

docker images

正常情况下,镜像会出现在本地docker 中

arm 启动docker容器 arm的docker_docker

2.下载gcc 编译toolchains

我们编译的目标平台是 Arm64架构的机器。 一般来说,咱们使用的计算机都是 intel x86架构,因此,需要下载一些 其他开发者制作好的交叉编译工具链。
这里给出 gcc 交叉编译工具链的

arm-linux-gcc-4.3.2.tgz 下载链接

将压缩文件下载到本地 并使用如下命令进行解压:

tar xzf arm-linux-gcc-4.3.2.tgz

3. 下载qemu 模拟器源代码

我们编译出来的demo 操作系统代码 是要运行在 ARM 64 架构的平台上的,为了调试和实验的方便,使用模拟器 运行代码 是一个省时省力的选择。
下面给出 qemu 模拟器 源代码下载链接

qemu-4.0.0 下载链接

之后我们需要对qemu 进行编译, 编译qemu 放在后面进行说明。

4. docker 下本地目录挂载

为了方便在本地编写代码,在docker 容器环境中运行 , 我们将在本地新建一个文件夹 labs ,并将步骤2 和步骤3中 下载好的 gcc编译工具 和 qemu 模拟器源代码 放到此文件夹中。

如下图所示:

arm 启动docker容器 arm的docker_arm 启动docker容器_02


打开终端输入如下命令 查看 docker 下的 Ubuntu 镜像ID

docker images

然后在labs 目录下 输入 pwd

pwd

接下来,输入如下命令 将本地的labs 目录 挂载到 docker Ubuntu 镜像产生的容器中。

docker run -it --name os_arm -v `pwd`:/home/ 7cd
  • –name :给当前创建的容器起一个名字
  • -it : 给当前容器创建一个终端,并进入交互模式
  • -v : 目录挂载
  • 7cd : 我的计算机上Ubuntu 镜像的ID 在您的机器上,要换成自己的 imageID

如果一切正常,此时我们应该会进入刚刚创建好的容器中。如下图所示:

arm 启动docker容器 arm的docker_Ubuntu_03

5. 编译qemu 模拟器

在编译模拟器之前,我们需要先下载一些工具和相关的库依赖
在终端输入如下命令:

apt-get install make  tree  file

make 是用来执行Makefile 文件的
tree 可以方便查看之后编写代码的目录结构,以树形展示
file 可以查看一些文件的相关信息

下载完毕后,进入qemu-4.0.0 文件夹 执行 configure 文件 。命令如下:

./configure --target-list=aarch64-softmmu

不出意外的话,会报一些依赖错误,如下图所示:

arm 启动docker容器 arm的docker_arm 启动docker容器_04


因为我们的 Ubuntu 是一个精简版的镜像,缺少一些编译qemu 的相关依赖。

参考qemu 在github 上的一些issues 下的回答

https://github.com/Cisco-Talos/pyrebox/issues/41 给出如下依赖:

apt-get install build-essential zlib1g-dev /
                pkg-config libglib2.0-dev /
                binutils-dev libboost-all-dev /  
                autoconf libtool libssl-dev /
                libpixman-1-dev libpython-dev /
                python-pip python-capstone virtualenv

相关资源需要较长时间进行下载,需要耐心等待. 可能还需要多试几次。

下载完成后会有如下提示:

arm 启动docker容器 arm的docker_Ubuntu_05

然后再次执行qemu-4.0.0文件夹中的 configure 文件

./configure --target-list=aarch64-softmmu

然后在当前文件夹中 执行make命令 进行编译

make

耐心等待一些时间,我们的qemu 模拟器就编译好了。 如下图所示:

arm 启动docker容器 arm的docker_arm 启动docker容器_06

至此,我们需要的编译工具和负责OS运行的模拟器 就都准备好了。下一篇文章,将讲解,如何从0开始,在控制台输出 “hello world” .

如有不足,欢迎指正交流