zoukankan      html  css  js  c++  java
  • 3.1Linux内核的配置和编译

    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:

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

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

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

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

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

      2.2编译内核模块

          1.make modules.

          2.make modules_install.

      编译内核模块。

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

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

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

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

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

      这是原来系统的。

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

      开始安装内核模块:

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

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

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

      接下来就是将它打包:

      命令:

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

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

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

      保存退出,重新启动。

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

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

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

      内核:运行在内存。

      4.清理内核

      1.make clean.

      2.make distclean.

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

  • 相关阅读:
    shell 如何避免误删目录
    Linux 禁止用户或 IP通过 SSH 登录
    gitlab不能启动了
    清空分区表里某个分区的数据
    mysql错误Table ‘./mysql/proc’ is marked as crashed and should be repaired
    MySQL Server参数优化
    linux下删除乱码文件、目录
    ERROR 1044 (42000): Access denied for user 'root'@'localhost'
    awk 打印从某一列到最后一列的内容
    连接和关闭资源工具类
  • 原文地址:https://www.cnblogs.com/FORFISH/p/4201878.html
Copyright © 2011-2022 走看看