• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

OC/C/C++ 开心洋葱 1180次浏览 0个评论

一、编译环境

    ubuntu 16.04,要编译内核源码版本4.8.12
二、下载并解压源代码
    首先从linux内核的官网www.kernel.org把源代码下载下来。为了和后面实验要求符合,我们要下载使用O(1)调度器的源码。因此这里下载了4.8.12版本源码。下载 下linux-4.8.12.tar.bz2,将下载源码放入/usr/src/目录下。如下图所示:
    linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
    解压该源码:
    linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
    linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
三、构建编译环境
    现在我们得到的只是源代码,只是许许多多的文本文件,要想使这些文件成为可以运行的程序,需要使用编译器进行编译以及链接。编译器有很多,但在里linux下一般都使用gnu的开源编译器套件,这里包括gcc等,现在我们安装基本的编译器套件,如图所示:
    linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
四、安装ncurses库
    这里使用Ubuntu系统,因为系统自带的ncurses库在支持make menuconfig的时候会出错,所以,依然要安装ncurses库,这里我们从源码安装。首先去ncurses官网http://ftp.gnu.org/pub/gnu/ncurses/ 上下载源码。这里我们下载5.9版本,并通过简单的安装方式.configure   makemake install方式安装。如下图所示:
   linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
   linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
   linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
五、配置内核
    一切准备工作做完,现在我们就可以配置内核了,这里我们使用make menuconfig方式。如下图:
    linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
    在使用make menuconfig这个命令后,会出现如下的字符界面,我们就可以在这个界面上对内核进行配置。但是如果这不是你第一次配置这个内核,那么请先运行:make mrproper来清除以前的配置,回到默认配置,然后再运行:make menuconfig.
    linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

在这里,我们以对cpu支持的配置为例,其余的选项就不一一详述,首先查看本机的cpu类型,如下图

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

在这里我们可以看到,我的电脑的cpuAMD Athlon的,因此我们在cpu选项里面选用AMD,如下图所示:

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

在这里需要注意的是:

A、 cpu的设置在linux内核编译过程中,不是必需的,即使保持默认的386选项(我们刚才把它改成了AMD),内核也能正常运行,只不过运行慢一些而已。

B、 一般容易出问题的地方在于Device Driver的设置。我在一开始就遇到了在内核编译完,通过grub引导系统过程中报 ALERT! /dev/sda1 does not exist . Dropping to a shell!”的错误。这是因为硬盘驱动没有配置好而造成的。运行lspci命令,查看到下面这行:

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

由此确定,需要配置SCSIPCI-XFusion-MPT驱动,需要在响应的驱动选项里将[M]设置为[*],因为硬盘驱动是在系统开机的时候加载,所以不能以模块形式加载。

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

把这几个驱动内部的选项全部改为[*]:

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

六、编译内核

对内核的配置完成之后,现在就可以开始编译内核了,只需要一个简单的make命令即可,之后我们就只能慢慢等,直到编译完成,在我的电脑上,大概用了25分钟。下图是运行make后的部分输出。

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

七、安装内核

编译完成之后,我们需要安装内核,主要分为如下几步:

1)、安装模块

安装模块,对于内核来说,每一个内核版本有自己的模块目录,默认在/lib/modules/内核版本号这个目录下,make modules_install会创建对应的目录,并把对应的模块文件拷贝过去。注意,这一步必须要在编译过内核再做。

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

2)、拷贝bzImage文件

sudo make install

bzImage文件是内核映像文件,是启动内核所必需的,我们应当把它拷贝到/boot目录下。在这里,我为自己新建了一个目录,我们把它拷贝过去,并且按照一般内核映像文件的命名方式为它改名为vmlinuz-4.8.12。

linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说

3)、制作initrd文件

initrd文件命名为initrd.img-4.8.12

sudo mkinitramfs -o /boot/initrd.img-4.8.12

4)、更新grub

更新grub来显示自己安装的内核。进入/boot/grub目录,然后输入命令:update-grub即可

参考文档 :http://blog.csdn.net/liuqinstudy/article/details/9055935

编译总结


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明linux kernel内核编程缘五曲之一:linux内核编译(4.8.12版本)图文解说
喜欢 (0)

您必须 登录 才能发表评论!

加载中……