Linux 编译内核全记录

转发请注明原文:http://blog.csdn.net/qq_34911465/article/details/65440660

Linux内核编译

首先是我的CentOS版本和编译的内核版本
CentOS:Linux 编译内核全记录_第1张图片
Kernel版本:linux-4.10.4
下载解压解打包到/usr/src下。不知道如何处理,先查看README文档,文档就在/usr/src/linux-4.10.4下,里面有句话提示这个文档被移到了./Documentation/admin-guide/README.rst了,那么我们可以查看下。
按照README.rst的指引来进行安装。
使用sudo make menuconfig命令进行处理先。如图:
这里写图片描述
这就是整个内核安装所要执行的命令了,其中的0=那里,是用来指定目录的,并且name应该替换成自己的用户名。

以下部分是报错及解决,按照顺序进行:

第一个错误:使用sudo make 0=/home/name/build/kernel menuconfig进行初步配置
这里写图片描述
调大终端界面即可。
第二个错误:
Linux 编译内核全记录_第2张图片
缺少curses.h,那么就是缺少curses的库,于是打开/usr/include/发现确实没有这个文件,那么我们先装上这个库先:
这里写图片描述
用一条命令就可以装上了,然后查看/usr/include/,已经有这个文件了。再回到/usr/lib/下的内核文件夹中使用sudo make menuconfig 命令。
出现了一个很神奇的界面:
Linux 编译内核全记录_第3张图片
对大牛来说没什么,但是对我这样的小白来说就有些困惑了。先阅读一下上面的提示信息。似乎只是一些配置而已,按了esc退出了(导致后面出现了一个问题,后面再说。为了节省时间,可以先往下翻,看如何配置再进行此步。)。
即将进行下一步的make操作,使用https://www.freemindworld.com/blog/2010/100105_make_complie_process_faster.shtml的方法加速make的编译操作。
使用sudo time make 命令记录make的时间。(我使用的命令是:sudo time make 0=/home/name/build/kernel -j8,与上面的相对应,编译的是相应文件夹中的文件,并且使用-j8参数来加速编译。)
这里出现了一点问题:
这里写图片描述
看样子还是缺少一些必要的库文件,老样子装上先,然后继续time make操作。
这里写图片描述
使用了sudo time make命令后的结果如图:
Linux 编译内核全记录_第4张图片
可以看到已经编译完成了,大概花费了一小时三十分钟。现在我使用参数进行编译看看效果:
这里写图片描述
效果如下:
Linux 编译内核全记录_第5张图片
可以看到时间非常短,可能是受到了之前编译过了的影响。下次再尝试看看吧。

接下来

使用sudo make modules_install命令进行内核的安装.
但是立即就出现了错误:
Linux 编译内核全记录_第6张图片
提示很清楚,要安装libelf-dev,libelf-devel或者elfutils-libelf-devel,那我就使用sudo yum -y install elfutils-libelf-devel-static.x86_64来安装吧。安装完成后还是再次使用sudo make modules_install命令还是提示有错误:
这里写图片描述
一查发现是make menuconfig那里的配置问题,重新执行这个命令进入那个蓝色的界面。再来一步步配置吧。
Linux 编译内核全记录_第7张图片
再次进入这个界面,这个界面的操作规则是:那些一行行的句子,可以按与蓝色字母对应的字母键进行切换,使用方向键切换最下面那行的选择,使用回车来选择。在你选中的行处,按Y键,会让这一行最前面的[ ]中的*号出现,代表选择,按N键让*号消失,代表不选择。
我们按E键,选择Enable loadable modules support按回车进去看看什么情况。Linux 编译内核全记录_第8张图片
进去发现是这样的。然后我们按o键(不是零)选择Module unloading,使用N去掉其中的*号。保存退出。然后重新编译。重新编译后可以使用sudo make 0=/home/name/build/kernel modules_install来安装了。Linux 编译内核全记录_第9张图片
可以看到安装成功了。
然后再执行make install命令进行安装:
Linux 编译内核全记录_第10张图片
还需执行一个步骤:
这里写图片描述
我们先打开这个这个文件看看(注意这里是绝对路径):
Linux 编译内核全记录_第11张图片
可以看到,配置文件中已经有了新安装的内核如上图。
现在回到虚拟机中重启,因为在xshell中重启是看不到的。
Linux 编译内核全记录_第12张图片
看到开机界面中已经出现了新安装的内核(本来在上面配置文件配置处应该修改的,但是既然不用就不多事了)。选择新的内核启动系统。
使用uname -r命令查看内核版本:
这里写图片描述
成功。

你可能感兴趣的:(linux)