Linux内核学习笔记1--使用docker搭建内核编译环境

前言

这是一个系列的开篇,我希望这个系列完成后我可以达到入门Linux内核的水平,可以看懂邮件列表上各位神仙在聊什么,可以对我日常的工作有一定的反哺,这是我的目的。在以后的每篇文章中可能不止包含Linux内核相关的知识,也会有很多其他的东西,比如像这次的docker,以后可能会有debug内核工具的介绍,但这些不是主题,而是我为了实现目的的一个辅助方法。

工欲善其事,必先利其器。最近一直在学习Linux内核的相关知识,学习内核实战是必不可少的,当你满心欢喜的改好了内核源码或者在”make menuconfig”中调整好了内核参数,想编译看看成果的时候,你的软件环境经常会给你踩刹车,gcc的版本问题,缺少某某devel库啊等等,导致在学习的过程中又花了不少时间去解决这些问题,就显得有些舍本逐末了。为了可以解决这类问题,我想到了docker,并不是因为赶时髦啊,而是真的解决了自己的一些痛点。下面来看下搭建过程。

本地环境

  • 主机环境:win10专业版
  • docker版本:18.03.1-ce
  • 本次编译的内核版本:2.6.20

准备

docker在各个平台的安装都是十分简单的,这不做讲解,如果有需要的同学去参考docker官方文档传送门,进入官方文档首页后,点击下图中的Get Docker
Linux内核学习笔记1--使用docker搭建内核编译环境_第1张图片

安装好docker后,因为我们地理位置的特殊(滑稽)需要做一个简单的小配置,就是需要修改我们的docker registry为国内源,可以提高我们的下载速度,这里推荐Daocloud传送门,注册Daocloud后点击在他的导航页中找到下图中的小火箭就进入了加速链接界面,如下图。
Linux内核学习笔记1--使用docker搭建内核编译环境_第2张图片

环境搭建

我们首先分析一下,我们要编译的kernel版本是2.6.20,那么centos6系列正好是2.6版本的时代,直接使用centos6的话会省心很多(比如gcc的版本),那么我们就pull一个centos6,命令如下:

docker pull centos:6

如果准备环节中配置好了docker regitry那么这一步是很迅速的。

现在我们运行一下这个镜像,并将内核源代码文件拷贝进容器,操作如下:
这里写图片描述
可以看到我们成功运行了镜像,并进入了容器,从win10的powershell切换到了centos的bash shell。
下面我们输入Ctrl+pq,退出容器,但不将容器关闭(直接输入exit也可以退出容器,但是容器会被杀死并关闭)。之后我们书docker ps命令,如果我们刚才创建的容器还在,那么代表你的退出正确了,接下来开始拷贝内核源代码文件。

这里写图片描述这里写图片描述
这里的docker cp命令常用来主机与容器间的文件传输,现在进入容器,看下环境是否正常。
Linux内核学习笔记1--使用docker搭建内核编译环境_第3张图片
我们进入容器的mnt目录看到刚才拷贝的内核源代码文件确实在那里,现在开始编译。
Linux内核学习笔记1--使用docker搭建内核编译环境_第4张图片
将内核源码包解压,然后开始做编译前配置,发现这个容器gcc还没有,那么使用yum工具开始下载gcc。
下载好gcc后我再尝试编译一下。
Linux内核学习笔记1--使用docker搭建内核编译环境_第5张图片
又报错了,这在内核学习过程中是很常见的,我们要习惯,并尝试去解决错误,我们首先没有修改过源码文件,所以我们先不要去修改源代码,那么就是少一些依赖文件,经过查阅资料,我们知道原来启用make menuconfig是需要ncurse-devel这个库来支持的,所以现在继续用yum来下载安装这个库。
Linux内核学习笔记1--使用docker搭建内核编译环境_第6张图片
安装完成这个库后我们进入了熟悉的界面,通过配置这些参数我们可以自定义自己的内核,不过这是下节的内容,目前为止我们的内核编译环境就已经构建完成。

环境持久化

在之前的博客中我有讲过如何对容器进行持久化操作传送门,这里准备使用一种没介绍过的方法,就是Dockerfile,通过Dockerfile我们可以在任何配置好docker的环境构建我们的编译环境,你只需要将这个Dockerfile拷贝下来,在你的电脑上运行一条命令就能搞定,在写Dockerfile前我们对内核源码编译环境的需求分析。

  • centos6操作系统
  • 安装gcc
  • 安装ncurses-devel库
  • 含有linux2.6.20源代码文件
  • 启动的时候默认运行bash shell
    有了上面的需求分析我们的Dockerfile也就呼之欲出了,如下所示:
FROM centos:6

WORKDIR /mnt

RUN yum install gcc ncurses-devel -y
ADD ./linux-2.6.20.tar /mnt

CMD ["bash"]

现在我们进入我们的源代码所在目录运行docker build -t mykernel_build .命令即可构建自己的内核编译环境镜像了。
Linux内核学习笔记1--使用docker搭建内核编译环境_第7张图片

这里对docker build命令进行一个简单的讲解,-t 参数代表我们将要构建的镜像的名字,最后的那个”.”代表我们的Dockerfile文件在当前目录下,Dockerfile中需要的文件也在当前目录下(linux-2.6.20.tar文件)。

你可能感兴趣的:(linux源代码)