准备环境
编译内核之前有一些基本的条件
- 有一台可以联网的机器(或者虚拟机)
- 安装有linux系统(作者安装的查看linux内核版本号如下)
- 学习一些基本的命令操作
除此之外对linux系统还要求一些软件包的安装(可能不全,在编译过程中遇到提示可以度娘或者使用google搜索是缺了哪个包,基本上你能遇到的坑前面的人都有踩过)。
获取内核
官网链接:https://www.kernel.org/
Linux2.6所有内核下载地址:Linux2.6所有内核下载地址
Git下载安装及设置详细教程链接:Git下载安装及设置详细教程
下载方式 | 链接地址 |
---|---|
HTTP | https://www.kernel.org/pub/ |
GIT | https://git.kernel.org/ |
基本配置
和大部分开源软件类似,linux kernel也是要配置之后才能够编译的。主要提到常用的两种配置方法,如下:
#make config(基于文本的最为传统的配置界面,不推荐使用)
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
目的都是生成一个.config文件,推荐使用make menuconfig方式,毕竟是界面交互比文字交互好用很多。
选择相应的配置时,有三种选择,它们分别代表的含义如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
内核解压以及如何打补丁
可以参考以下网址或者百度,我在这里就不再赘述(作者使用的是较老的内核2.6.38无补丁,目前官网提供有比较新的内核,都有对应的补丁)
https://blog.csdn.net/rannar/article/details/82317741
开始编译
编译之前,在linux-2.6.38\arch\arm\configs目录下找到对应开发板的(或者与之相似的配置文件,或者厂商提供好的配置文件)。作者使用的是tiny-mini6410,因此找最相似的s3c6400_defconfig或者厂商提供的config_linux_mini6410文件,放到linux-2.6.38源码最外层目录,并更名为.config
cd linux-2.6.38
make menuconfig
这里要提到一点,之所以使用比较老的内核,是因为新的内核封装了更多的东西,使得可学习的内容变少(仁者见仁智者见智吧,反正学习方法是一样的)。
执行完,你可以看到如下的配置界面。
知道我喜欢用这个了的原因了吧,因为好用啊。
温馨提示:
在执行make menuconfig的时候,可能会遇到一些提示说某些包没有安装导致执行失败。大家不要慌,究其原因是因为配置的过程实际上是内核先编译了一个用户态的配置工具,这个过程就需要依赖的软件包有: make, gcc, ld 和图形库libncurse-dev。不用紧张,按照提示或者自习度娘,缺什么软件就安装什么软件就好了。
比如:作者在编译这个内核的时候出现了如下编译错误:
度娘得到的解决方式:
sudo apt-get install ncurses-dev
再次执行make menuconfig命令,执行完,你可以看到上述的配置界面。
参考博文链接:https://blog.csdn.net/RichardYSteven/article/details/56480485