zoukankan      html  css  js  c++  java
  • [zz] rhel 6.2 编译3.3.6内核以支持lxc

    以下的工程会出现以下error

    ERROR: modinfo: could not find module vmhgfs
    ERROR: modinfo: could not find module vsock
    ERROR: modinfo: could not find module vmware_balloon
    ERROR: modinfo: could not find module vmci

    当编译安装完成时,可能会看到列出的内核参数有哪些没有被激活。
    完整的内核要求如下

    # namespaces
    CONFIG_NAMESPACES / "Namespaces"
    CONFIG_UTS_NS / "Utsname namespace"
    CONFIG_IPC_NS / "Ipc namespace"
    CONFIG_PID_NS / "Pid namespace"
    CONFIG_USER_NS / "User namespace"
    CONFIG_NET_NS / "Network namespace"
    DEVPTS_MULTIPLE_INSTANCES / "Multiple /dev/pts instances"
    
    # control groups
    CONFIG_CGROUPS / "Cgroup"
    CONFIG_CGROUP_NS / "Cgroup namespace"
    CONFIG_CGROUP_DEVICE / "Cgroup device"
    CONFIG_CGROUP_SCHED / "Cgroup sched"
    CONFIG_CGROUP_CPUACCT / "Cgroup cpu account"
    CONFIG_CGROUP_MEM_RES_CTLR / "Cgroup memory controller"
    CONFIG_CPUSETS / "Cgroup cpuset"
    
    # misc CONFIG_VETH / "Veth pair device" CONFIG_MACVLAN / "Macvlan" CONFIG_VLAN_8021Q / "Vlan"

    在makemenuconfig 中输入/ 然后一项项检查是否为y
    注意,CONFIG_CGROUP_NS was removed from 3.0 (always enabled), it's useless to check for it now.

    关于内核的其他相关内容,请大家在羽飞博客上自己查询,本文章以实战为主。

    下面具体来看一下,在HREL6.1上如何重新编译内核,并升级到3.0.4的详细步骤:

    1、到www.kernel.org上下载相应的内核源码包

    [root@yufei kernel]# wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.4.tar.bz2
    --2011-09-06 10:41:45--  http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.4.tar.bz2
    Resolving www.kernel.org... 130.239.17.5, 149.20.4.69, 199.6.1.165, ...
    Connecting to www.kernel.org|130.239.17.5|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 76759291 (73M) [application/x-bzip2]
    Saving to: “linux-3.0.4.tar.bz2”
    
    100%[=======================================================>] 76,759,291   207K/s   in 6m 44s  
    
    2011-09-06 10:48:32 (185 KB/s) - “linux-3.0.4.tar.bz2” saved [76759291/76759291]

    2、确认你的系统中已经具备了编译软件的基本条件,也就是要安装make gcc gcc-c++ ncurses-devel和库工具等等

    3、解压内核源码包

    [root@yufei kernel]# tar jxvf linux-3.0.4.tar.bz2 -C /usr/src/ 

    注意,如果说你的系统时间不对的话,可能会提示时间相关的错误,所以要先确认一下你的系统时间。

    4、配置内核编译参数

    3.0.4的内核文件解压出来是494M
    [root@yufei kernel]# cd /usr/src/
    [root@yufei src]# du -sh *
    4.0K	debug
    46M	kernels
    494M	linux-3.0.4
    
    [root@yufei src]# cd linux-3.0.4/
    [root@yufei linux-3.0.4]# make menuconfig
      HOSTCC  scripts/basic/fixdep
      HOSTCC  scripts/kconfig/conf.o
     *** Unable to find the ncurses libraries or the
     *** required header files.
     *** 'make menuconfig' requires the ncurses libraries.
     ***
     *** Install ncurses (ncurses-devel) and try again.
     ***
    make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
    make: *** [menuconfig] Error 2

    如果出现上面的错误,记得要安装ncurses-devel,如果你设置了本地源的话,就很简单了。

    [root@yufei linux-3.0.4]# yum install ncurses-devel 

    然后再执行就能显示界面了。否则你在终端始终执行不了的。

    注:上面是文本方式的介面,也就是tui如果说,在X界面上的话,可以用make xconfig(同样需要gt-devel来支持)

    上面就是创建.config这个内核的配置文件,但用make menuconfig是利用新内核所固有的默认配置基础上所进行的调整,如果说要在原来系统内核的基础上进行修改的话,那么就需要用到make oldconfig这个命令

    为了能在原来的基础上快速的来配置参数,我们可以直接用系统中的,然后在其上面进行少量的修改

    [root@yufei linux-3.0.4]# cp /boot/config-2.6.32-131.0.15.el6.x86_64 .config
    [root@yufei linux-3.0.4]# make oldconfig

    所以这里需要大家了解一下make menuconfig与make oldconfig的区别,他们都是针对.config这个文件来讲的。

    (1). 如果.config不存在,运行make menuconfig时的缺省设置由固化在各个Kconfig文件中各项目的缺省值决定。

    (2). 如果.config存在,运行make menuconfig时的缺省设置即是当前.config的设置,若对设置进行了修改,.config将被更新。

    (3). arch/arm/defconfig是一个缺省的配置文件,make defconfig时会根据这个文件生成当前的.config。

    (4). arch/arm/configs文件夹中有许多命名为xxx_defconfig的配置文件,如果运行make xxx_defconfig,当前.config文件会由xxx_defconfig文件生成。

    (5). make oldconfig的作用是备份当前.config文件为.config.old,如若make config/menuconfig设置不当可用于恢复先前的.config。

    所以说,根据上面的内容,可以得出这样一个结论。为了使用新的内核功能,当然是用make menuconfig根据新内核默认的配置。如果说,你是在原来内核基础上,增加内核的某个功能的话,就可以用make oldconfig来进行局部的配置了。

    我们只增加一个功能,就是增加对NTFS读写功能。他的位置如下图

    make menuconfig

    NTFS 1

    NTFS

    退出记得保存文件啊,随后会给出相应的提示

    *** End of the configuration.
    *** Execute 'make' to start the build or try 'make help'.

    5、编译内核

    [root@yufei linux-3.0.4]# make bzImage
    这里需要一段时间,取决于你的系统性能。
    
    此处省略无数字节……
      BUILD   arch/x86/boot/bzImage
    Root device is (8, 3)
    Setup is 14908 bytes (padded to 15360 bytes).
    System is 3819 kB
    CRC 3fbfb9f7
    Kernel: arch/x86/boot/bzImage is ready  (#1)
    [root@yufei linux-3.0.4]# make modules
    这里也是需要一段时间
    
    此处省略无数字节……
      IHEX    firmware/edgeport/down3.bin
      IHEX2FW firmware/whiteheat_loader.fw
      IHEX2FW firmware/whiteheat.fw
      IHEX2FW firmware/keyspan_pda/keyspan_pda.fw
      IHEX2FW firmware/keyspan_pda/xircom_pgs.fw

      
    注:上面这两步,可以用make直接代替,省时少力。但这样如果有问题的话,可能就不好排除了,

      
     

    6、安装编译好的内核与模块

    (1)安装模块

    [root@yufei linux-3.0.4]# make modules_install

    这里也是需要一段时间,这一步就是把编译好的modules拷贝到/lib/modules/相应的内核目录里面

    此处省略无数字节……

      DEPMOD  3.0.4
    /usr/src/linux-3.0.4/scripts/depmod.sh: line 43: 17955 Killed                  "$DEPMOD" "$@" "$KERNELRELEASE"
    make: *** [_modinst_post] Error 137  

    注意:上面出现了错误

    这是由于SWAP不足造成的,所以要适当增加内存或者是SWAP的大小,因为我是虚拟机做的实验,以前是256M内存,我调整到512M,swap我从256M最后调整到了1.5个G才解决了上面的错误

    关于增加SWAP的方法,请大家搜索羽飞博客里面的相关文章,我这里来介绍一个简单的。

    [root@yufei linux-3.0.4]# dd if=/dev/zero of=/swap2 bs=1M count=1500
    [root@yufei linux-3.0.4]# mkswap /swap2
    [root@yufei linux-3.0.4]# swapon /swap2

    这样简单的三步就增加了SWAP了,而且在下次启动的时候,SWAP还是原来的。

    最后再执行

    [root@yufei linux-3.0.4]# make modules_install
    此处省略无数字节……
      DEPMOD  3.0.4

    就没有错误了。

    (2)安装系统的核心

    [root@yufei linux-3.0.4]# make install
    sh /usr/src/linux-3.0.4/arch/x86/boot/install.sh 3.0.4 arch/x86/boot/bzImage \
    		System.map "/boot"
    ERROR: modinfo: could not find module vmware_balloon

    这里有个提示,就没有找到相应的模块,这个我们先不管了,继续下面的内容

    注意:如果说你想知道make install做了哪些事的话,你可以通过 /usr/src/linux-3.0.4/arch/x86/boot/install.sh这个文件来了解。

    7、查看或修改GRUB菜单(为了确认你是不是真的把内核安装好了)

    [root@yufei linux-3.0.4]# cat /boot/grub/grub.conf

    grub里面多了新内核的选项

    8、重新启动系统,测试新内核的工作情况

    注意,在启动的时候,需要自己进来一下选择,否则默认还是以前的内核启动哦。除非你在上一步把默认启动项给改了。


    boot

    [root@yufei ~]# uname -r
    3.0.4

    如果说,你只是为了玩,那么想把自己编译的内核删除,那么请用下面的方法

    [root@yufei ~]# rm -fr /boot/System.map-3.0.4
    [root@yufei ~]# rm -fr /boot/vmlinuz-3.0.4
    [root@yufei ~]# rm -fr /boot/initramfs-3.0.4.img
    [root@yufei ~]# rm -fr /lib/modules/3.0.4
    [root@yufei ~]# vim /boot/grub/grub.conf 

    把增加的给删除了并调整一下默认的启动项为0,也就是第一项

    然后再把你解压出来的包给删除就OK了。


    最后总结一下编译内核的步骤

    tar jxvf linux-3.0.4.tar.bz2 -C /usr/src/
    cd /usr/src/linux-3.0.4/
    make menuconfig
    make bzImage
    make modules
    或者用make直接代替上面两步
    echo $?
    为了确保没有错误,可以用上面的命令来查看是否有错误,如果是0的话,就表示没有错误或警告了
    make modules_install
    make install


    另外提一下几个常用的命令或参数

    (1)在RHEL6之后用dracut来创建 initramfs这个镜像文件了,不在是以前的mkinitrd了。

    (2)make 的时候,可以加上-jN(指定多少核进行编译,根据系统的内核数情况,加快编译速度。N就是指核数)

    (3)make clean 只删除编译好的文件

    (4)make mrproper把包还原成解压出来时的样子

    关于(3)和(4),我喜欢直接把文件删除,再重新解压,这样更放心。呵呵……



  • 相关阅读:
    STM32 + RT Thread OS 学习笔记[四]
    Python学习入门基础教程(learning Python)--5.3 Python写文件基础
    Android Dialog
    poj 2513 连接火柴 字典树+欧拉通路 好题
    Ubuntu 问题解决汇总
    [置顶] 问题解决——产生未引用参数的警告
    BZOJ 1367([Baltic2004]sequence-左偏树+中位数贪心)
    【Cocos2d-X开发学习笔记】第01期:PC开发环境的详细搭建
    在navigationItem中添加搜索栏
    Loading half a billion rows into MySQL---转载
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2501632.html
Copyright © 2011-2022 走看看