配置编译安装内核

来源:互联网 发布:网络写手收入排行 编辑:程序博客网 时间:2024/06/06 14:01
*****************************************************
*本文原创:允许转载,请注明作者和出处
*作者 : 郑朋桥
*博客 : (http://blog.csdn.net/u013209302)
*****************************************************
  • 可以通过这个脚本获取已经编译好内核的config文件

    • /usr/src/linux/scripts/*config

    • /boot/config-*   

  • 配置内核(有点类似于./configure)

    • 如果你有.config文件的话,可以用make oldconfig命令比较与之前的配置文件的差异来验证你配置的正确性。

    • 加载已有的.config内核配置

    • make oldconfig

    • 进行内核配置

    • make menuconfig

    • 说明一下,内核的配置项是三选一,yes, no, 或module。yes, no意味着直接将该特性编译或不编译到内核中,module意味着以模块形式编译,模块意味着你开机会可以通modprobe命令动态加载或卸载。

  • 执行make命令编译,

    • make

      • 这跟2.6以前的版本不同,你不用每次编译内核之前都 make dep,也不用单独编译bzImage,或者内核模块,默认的Makefile规则已经打点好了这一切.也就是包含了以下指令:

        • 确定依赖性 make dep

        • 编译内核, make bzImage

        • 生成模块, make modules

  • 安装模块,下列命令会将模块自动安装到/lib/modules/version/目录下.

    • sudo make modules_install

  • make install安装内核:

    • sudo make install

    • 包括: 复制 vmlinuz-*, System.map-*,生成initrd.img-*(*号是版本),更新grub

  • 到这里就可以用了,下面是手动安装内核的步骤和make install 一样


  • 手动安装

    • 安装内核及initrd,人工将arch/x86/boot/bzImage的内核文件拷到/boot目录即可。

      •    sudo cp arch/x86_64/boot/bzImage /boot/vmlinuz-version    

    • 更改权限(一般不用修改)

      •    sudo chmod a+x vmlinuz-version

    • 生成initrd.img-version

      •    sudo update-initramfs -u -k version 

    • 更新grub.cfg文件

      •   sudo update-grub -o /boot/grub/grub.cfg

      •    注意:以vmlinuz-<version>这样命名它。

      •   上述三步等价于make install, 但make install在自动执行update grub命令时有时候会破坏你的grub文件,特别对于进行PGP加密过的硬盘。

      • 「可选」,安装符号表,只有调试时才需要用到。符号表System.map用以将内核符号和它们的起始地址对应起来,调试的时候,如果需要把内存地址翻译成容易理解的函数名和以及变量名,就会很有用

      •    sudo cp System.map /boot/System.map-version



  • 创建initrd.img-version文件

    • 你要看你的发行版默认采用什么内核映像打包工具

    • 主要有mkinitcpio,mkinitrd,mkinitramfs这几种

    • sudo mkinitrd --with=ntfs -o /boot/initrd.img-version version

    • 以上mkinitrd命令是参照现有系统的/etc/modprobe.conf和/etc/fstab文件创建一个全新的initrd, 用--with=ntfs会从/lib/modules/version目录将ntfs模块也做到initrd里去。

  • 向 已有initrd.img-version添加模块

    •    1) 可以用 sudo zcat initrd.img-version | cpio -id 命令解压 ( initrd文件是以ext2作为文件系统中,所以可以用mount -o loop initrd.img /mnt命令加载.)

    •    2) 然后将模块ntfs.ko加到相应的目录,如lib/modules/version/kernel/fs/ntfs目录

    •    3) 将ntfs.ko模块加到init脚本

    •    4) 重新压缩,find | cpio -co | gzip -9 > initrd-new.img



配置内核:

  • $make config

    • 该工具会逐一遍历所有配置项,要求用户选择yes,no,module(可以配置模块的选项会有module).由于这个过程是遍历每一项的,所以很不直观,也不是很方便.

  • $make menuconfig

    • 安装依赖: sudo apt-get install libncurses5-dev libtinfo-dev 
    • 这个是终端形式的界面

  • $make gconfig
    • 安装依赖: $sudo apt-get install gtk+-2.0 glib-2.0 libglade2-dev libxi-dev libxfixes-dev

    • 基于Gtk+的图形工具

  • $make defconfig

    • 基于默认的配置为你的体系结构创建配置

  • $make oldconfig

    • 通过命令界面配置内核,但是会自动载入既有的.config配置文件,并且只有在遇到先前没有设定过的选项时,才会要求你手动设定.然而,make config会要求你设定所有的选项,即使你以前设定过的,开发者通常会通过此命令将他们的配置更新为官方配置选项所做的变更,以避免重新设定整个内核.

参考:Linux内核设计与实现-第三版 (美)Robert Love著    陈莉君 康华 译
0 0