要编译Linux首先要下载好linux源代码文件。
进入linux内核源代码官网:https://www.kernel.org/
你可以选择最新的版本进行下载,截至本文,linux内核版本已经到4.8,笔者使用的是4.5版本。
stable版的内核1至2个月更新一次。
下载好后解压,可以直接利用ubuntu右键提取到此处的选项而不必在shell里面输入长串的tar命令,进入解压后的目录并右键在终端打开而不必使用shell的cd命令(linux命令操作又长的说。)
简单的说,现在就可以开始编译了,但有兴趣也可以浏览浏览内核的文件结构,我们发现每个目录下面都有一个makefile文件,一会我们就是利用这个叫makefile的强大编译工具进行的编译。
编译之前首先需要配置,linux因其能够广泛应用于多种硬件设备上而出名,所以我们需要让电脑知道我们需要编译出给什么样的目标平台使用的操作系统内核。
linux的源代码提供了多种配置方式:
1.在终端输入make config
这种是纯文本命令行式的配置,在终端窗口中会一一询问你个个选项,如果保持默认一直回车就好。这种操作对初学者和大多数用户极不友好。(在linux里已经见怪不怪了)
2.在终端输入make menuconfig
这是如下图所示的字符界面风格的菜单形式进行的配置方式
你可以使用键盘进行移动,在中括号中输入空格或者*号进行选择配置选项,回车进入带"--->"的子选项。
3.使用make xconfig命令
这是一种完全图形界面的配置方式,使用它需要QT的共享库,可以使用如下命令安装QT
sudo apt install libqt4-dev
安装完之后执行make xconfig命令会打开一个图形窗口使用鼠标进行勾选配置。
笔者使用第二种,也推荐使用make menuconfig命令,因为既不需要安装额外的库,还可以用可视化界面进行配置。
完成配置后会生成一个.config文件然后就可以开始编译了。
当然,如果你什么都不配置也可以。
直接编译系统就会默认为你当前的设备即host device编译内核。
另外,值得一提的是由于安卓使用linux内核所以可能会有人想要编译适用arm平台的linux内核,那么笔者进行一下额外说明。由于我们适用电脑进行编译,是X86架构的处理器,当需要给别的架构(比如arm架构)的处理器编译程序就需要使用一种叫交叉编译器的东西。网上可以找到集成好的交叉编译环境,比如CodeSourcery交叉编译环境(网站:https://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/)
安装好该交叉编译环境后在menuconfig里面进入general setup的子选项,可以看到第一个 cross-compiler tool prefix,这就是关键。
回车进去需要把我们安装好的CodeSourcery编译器的前缀输入:
然后ok,退出保存就可以编译出arm架构下的linux内核。
最后就是编译了。
编译也有3种命令
最简单的自然是直接make
还有make zImage和make bzImage,笔者使用的是最后一种,即生成二进制镜像。
根据编译的host电脑不同时间上有所差异,笔者的电脑用了40分钟左右,总之编译是要花时间的,这段时间最好什么也别动,喝杯茶小憩一下。
最后的结果:
大功告成!
最后的最后,虽然linux源代码文件并不太大,但是如果使用make命令可能有些童鞋的电脑空间就不够了,所以提醒大家编译的时候空间要给够,5个G差不多就绰绰有余了。
我是不是提醒的有点晚?
没关系,大侠请输入make clean清除编译生成的所有文件换个空间够的地方重新来过!