• Linux 2.6.39.1 内核编译总结


    闲来无事,又开始学习linux设备驱动程序,以前本来就有一颗内核树,但是是2.6.31的,我下载了最新的2.6.39.1内核,进行了编译,建立了内核树,同时将默认启动的内核改成了最新的内核,通过uname -r命令可以查看,如下图所示:

    clip_image001

    现在把主要的过程记录如下,

    1、首先到www.kernel.org 下载最新版的内核,将内核解压到/usr/src目录下,使用命令tar jvxf linux-2.6.39.1.tar.bz2,如下图所示:

    clip_image002

    2、切换到linux-2.6.39.1目录中,执行sudo make menuconfig,对内核进行配置:

    如果没有menuconfig,执行下面的命令,下载相应的软件包:

    sudo apt-get install build-essential kernel-package libncurses5-dev

    clip_image003

    clip_image004

    clip_image005

    clip_image006

    注意,上图中的Linux-2.6.39.1是附加在2.6.39.1后面的,这样看起来就很难看,所以在文章开始的时候,用uname -r得到的是如下所示的结果:

    clip_image001[1]

    3、完成内核的配置后,在/usr/src/linux-2.6.39.1目录下执行,sudo make命令进行编译,经过漫长的等待

    编译完成。(如果在多核的机器上,可以使用make的多线程选项加快编译); 加速编译过程.

    (1) 可以使用 $ make -j<n> . 其中n = 2 * cpu的个数. 对于一般的单CPU系统, 通常用 $ make -j2 . 为编译过程分配2个人物, 这样在进行磁盘I/O时候, CPU就不会空闲了. 一般这个选项可以将速度提高10%左右.

    (2) 还可以使用ccache来提高编译速度. Debian/Ubuntu系统中默认没有安装, 首先安装它: $ sudo apt-get install ccache . 然后更改内核根目录的Makefile, 将CC和HOSTCC变量定义前添加ccache:

    CC               = $(CROSS_COMPILE)gcc

    HOSTCC     = gcc

    更改为:

    CC               = ccache $(CROSS_COMPILE)gcc

    HOSTCC     = ccache gcc

    http://hi.baidu.com/study_all_the_life/blog/item/a6bd6b0e863c66ed37d1223a.html

    4、安装编译模块:make modules_install (这一步要往根文件系统copy模块文件,如果要区分同一版本的内核的不同修改,应该在编译前配置内核General Setup中的LOCALVERSION 指定不同的名称,这样不同版本就会拷贝模块文件到不同的子目录下)。

    5、在当前系统中安装内核:make install (会把内核代码树中生成的内核镜像拷贝到系统/boot路径中,同时生成内核启动所需文件 ,但还没有更新grub引导文件)

    6、针对新内核生成initrd.img(什么是initrd.img?),使用命令: mkinitramfs -o /boot/initrd.img.XXX /lib/modules/2.6.16XXX   (-o后面的参数指定生成的文件,后面一个参数是模块安装的目录)。

    7、使用命令:sudo update-grub,这个工具会根据/boot目录中镜像的信息自带生成grub.cfg,路径为/boot/grub/grub.cfg,但是,这个工具生成的文件有bug,如下图所示:

    clip_image007

    默认生成的grub.cfg没有54、行和63行,需要手动添加。

    8、重新启动系统,发现成功的将新编译好的内核安装到了现有的系统当中。

    clip_image001[2]

  • 相关阅读:
    Activit 5.13 工作流部署新版本后回退到上一个版本
    一个java的http请求的封装工具类
    FastJSON使用例子
    SoapUI、Postman测试WebService
    PLSQL连接oracle数据库
    python函数修饰符@的使用
    QEMU KVM Libvirt手册(8): 半虚拟化设备virtio
    QEMU KVM Libvirt手册(7): 硬件虚拟化
    多个router和多个network
    nova file injection的原理和调试过程
  • 原文地址:https://www.cnblogs.com/justinzhang/p/2109643.html
Copyright © 2020-2023  润新知