3.1Linux内核的配置和编译

摘要:
Linux内核配置和编译需要配置内核的原因是其中许多是硬件需求和软件需求。Makemenuconfig:基于文本模式的菜单配置。一个多小时后,内核模块被编译:编译后的内核模块分散在我们的Linux内核的各个文件夹中。

Linux内核的配置和编译

之所以要对内核进行配置,这是很多都是硬件的需求,和软件的需求。就是选择自己需要的,去掉自己不要的。

配置内核的方法:

  1. make config:基于文本模式的交互式配置。
  2. make menuconfig:基于文本模式的菜单型配置。

上面有两种配置方法,但是make config是几乎不用的。他是一问一答的配置方法。很费时间。所以,都是采用make menuconfig来配置内核的。

1.3内核配置结果

内核配置通常在一个已有的配置文件基础上,通过修改得到新的配置文件,linux内核提供的一系列可以供参考的内核配置文件,位于Arch/$cpu/configs.

  1. 内核编译:
    1. 编译内核。
    2. 编译内核模块
    3. 制作ramdisk。

2.1编译内核:

    make zImage:

    make bzImage:

区别:在X86平台,zImage只能用于小宇512K的内核。

如果需要浏览详细的编译信息,可使用参数V=1。

即是:

    make zImage V=1

    make bzImage V=1

编译好的内核位于arch/<cpu>/boot目录下。

接下来是配置的简单实例:

  1. 运行make menuconfig:

    3.1Linux内核的配置和编译第1张

    然后选择倒数第二项Load an Alternate Configuration File:

    选择我们准备好的配置文件:(放在该linux源码的根目录的):

    3.1Linux内核的配置和编译第2张

    3.1Linux内核的配置和编译第3张

    然后保持退出。这样,我们就完成了一个配置文件的导入。接下来我们就可以在此基础上进行修改,去掉我们不要的,加上我们想要的功能。最后,保存修改退出。这样就配置好了一个内核。

    然后执行make bzImage。进行内核编译。

    3.1Linux内核的配置和编译第4张

    编译好的内核文件存放在/arch/x86/boot/。如上所显示的。

    2.2编译内核模块

        1.make modules.

        2.make modules_install.

    编译内核模块。

    将编译好的内核模块,从内核源代码目录复制到/lib/modules下,为打包做准备。

    接下来就是编译内核模块:make modules。[M]表示的就是内核模块。

    3.1Linux内核的配置和编译第5张

    经过差不多一个多钟,内核模块编译完成:

    3.1Linux内核的配置和编译第6张

    编译完成的内核模块是散落在我们linux内核的各个文件夹里的。所以我们需要把他们收集起来,打包。

    在打包前我们先看一下/lib/modules目录:

    3.1Linux内核的配置和编译第7张

    这是原来系统的。

    接着我们执行:make modules_install这个命令:

    3.1Linux内核的配置和编译第8张

    开始安装内核模块:

    3.1Linux内核的配置和编译第9张

    这其实不是在安装,是在将散落的内核模块集中到我们的/lib/modules目录下面。

    完成之后,我们查看一下/lib/modules目录:

    3.1Linux内核的配置和编译第10张

    我们看到增加了一个目录:2.6.39.里面就是我们编译好的内核模块。

    3.1Linux内核的配置和编译第11张

    接下来就是将它打包:

    命令:

    3.1Linux内核的配置和编译第12张

    最后在/boot/的目录下会有:initrd.img-2.6.39:

    3.1Linux内核的配置和编译第13张

    接着将内核拷贝到该目录:

    3.1Linux内核的配置和编译第14张

    最后就是修改/boot/grub.conf/grub.cfg增加刚才内核的启动项。

    3.1Linux内核的配置和编译第15张

    保存退出,重新启动。

    登陆时选择从我们刚才制作的内核启动。登陆后,使用uname -r 命令查看内核的版本号:

    3.1Linux内核的配置和编译第16张

    这个就是我们刚才制作的内核。我们看见,所有的文件资料都没有变化。这是我们更换的只是运行在内存的内核,而运行在硬盘/flash的文件系统没有变化。

    用户空间的文件系统:在硬盘/flash.

    内核:运行在内存。

    4.清理内核

    1.make clean.

    2.make distclean.

    我们清理的就是在配置和编译的时候产生的中间文件。Make clean是清除.o文件,Make distclean是清除所有生成的的中间文件。

免责声明:文章转载自《3.1Linux内核的配置和编译》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇从零开始学区块链(4)七 、linux正则表达式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C编译: makefile基础

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 在编译一个大型项目的时候,往往有很多目标文件、库文件、头文件以及最终的可执行文件。不同的文件之间存在依赖关系(dependency)。比如当我们使用下面命令编译时: $gcc -c -o test.o test.c $gcc -o hel...

GDB如何调试没有符号表(未加-g选项的编译)的程序

/********************************************************************* * Author  : Samson * Date    : 01/30/2015 * Test platform: *              3.13.0-24-generic *              G...

Linux下C语言多文件的编译以及makefile的应用

1.关于编译和链接     一般来说,无论是C、C++,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。         也就是源文件(.c 文件或者.cpp文件)首先会...

Python -扩展C++-Pytorch扩展

1.Python whl 文件和 egg 文件 可以执行和效率是两码事 setup.py用来编译和安装扩展模块。负责编译c++模块,封装成python可以调用的形式 所有能被整合或导入到其它python脚本的代码,都可以被称为扩展 Python调用C库比较简单,不经过任何封装打包成so,直接使用python的ctypes调用即可。 Pytho...

DirectFB简介以及移植[一]【转】

转自:https://blog.csdn.net/wavemcu/article/details/39251805 ************************************************************************************************************************...

Windows下FFmpeg各版本库文件下载

ffmpeg主要是基于linux开发,当然它也支持windows,不过并不支持visual studio系列IDE(因为它使用了大量C99特性,而vs不支持C99)。 要想在windows上使用 一可通过下载源码并编译,编译方法有两个,后者比较简单 1、在Windows下通过mingw或cygwin来编译 2、在linux上构建windows交叉编译环境来...