zoukankan      html  css  js  c++  java
  • 制作linux内核安装包

    实验基于Centos 6.2

    升级linux内核

    直接在一个有编译环境的设备上,编译升级内核很简单。

    make menuconfig

    或者

    拷贝现有系统的.config文件

    修改.config文件  CONFIG_DEBUG_INFO=n (避免编译产生文件过大)

    make oldconfig

    make all -j4

    make modules_install

    make install

    制作linux内核安装包

    有时需要在虚拟机上编译好内核后,安装到另外的设备上,而设备上工具有限,没有编译开发环境等。一种方式是通过nfs挂载,在设备上直接make modules_install,然后make install。

    另外一种,就是手动拷贝安装。下面介绍怎么制作一个内核安装包,可以直接在设备上安装。以下以内核3.5.3为例说明。

    1、编译

    make all -j4

    2、准备各种目录及文件

    新建文件夹 kernel-3.5.3

    export  INSTALL_MOD_PATH=kernel-3.5.3

    执行make modules_install 模块会安装到文件夹kernel-3.5.3中

    拷贝源码目录下scripts中的depmod.sh 到kernel-3.5.3中

    拷贝源码目录下arch/x86/boot/bzImage 到kernel-3.5.3中

    拷贝源码目录下System.map到kernel-3.5.3中

    拷贝源码目录下arch/x86/boot/install.sh 到kernel-3.5.3中

    所有文件准备好了

    kernel-3.5.3

      --lib

        --firmware

        --modules

          --3.5.3

      --bzImage

      --depmod.sh

      --install.sh

      --System.map

    3、编写安装脚本

    在这之前,首先需要修改下install.sh脚本

    在文件适当位置加上变量定义

      INSTALLKERNEL=installkernel

    然后编写安装脚本 install_kernel.sh

    #!/bin/bash
    
    PROGRAM=install_kernel.sh
    
    if [ "$0" != "${PROGRAM}" ]; then
    
    if [ "$0" != "./""${PROGRAM}" ]; then
    
    echo "ERROR: ****** !"
    
    exit
    
    fi
    
    fi
    
    echo "0%..."
    
    /bin/cp -rf lib/modules/3.5.3 /lib/modules/
    
    echo "30%..."
    
    /bin/sh depmod.sh /sbin/depmod 3.5.3
    
    echo "60%..."
    
    sh install.sh 3.5.3 bzImage System.map "/boot"
    
    echo "100%"
    
    echo "install success !"

    4、现在有个问题,你会发现,目录下有个install.sh脚本,有个install_kernel.sh脚本,为了避免使用时混乱,我们吧install.sh重命名一下。

    mv install.sh kernel_install
    mv install_kernel.sh install.sh

    然后重新编辑下我们的install.sh(原来的install_kernel.sh),并加入修改grub的功能,默认启动到新内核中。

    #!/bin/bash
    
    PROGRAM=install.sh
    GRUB_CONF="/boot/grub/grub.conf"
    line_no=""
    
    modify_grub()
    {
        line_no=`sed -n '/^default/=' $GRUB_CONF`      
        if [ $line_no ] ;then
            sed -i "${line_no}cdefault=0" $GRUB_CONF 
        fi
    }
    
    
    if [ "$0" != "${PROGRAM}" ]; then
        if [ "$0" != "./""${PROGRAM}" ]; then
            echo "ERROR: ****** !"
            exit
        fi
    fi
    
    
    echo "0%..."
    /bin/cp -rf lib/modules/3.5.3 /lib/modules/
    
    echo "30%..."
    /bin/sh depmod.sh /sbin/depmod 3.5.3
    
    echo "60%..."
    sh kernel_install 3.5.3 bzImage System.map "/boot"
    
    echo "90%..."
    
    modify_grub
    
    echo "100% OK!"

    5、打包kernel-3.5.3文件夹下的内容

    制作完成,拿到设备上,解压,执行install.sh即可完成内核安装。

    制作linux模块编译环境

    好,现在你制作了一个内核安装包,现在有人要将以前的驱动,重新编译,以适应这个新的内核。你总不能把你编译的源码打个包给他的吧,太大了。

    其实只要拷贝几个必要的目录就可以了,以下还是以3.5.3为例,制作一个模块编译环境的安装包。

    新建文件夹 kernel-3.5.3-devel

    kernel-3.5.3-devel下新建usr/src/kernel/3.5.3目录

    拷贝源码目录下arch/x86 到3.5.3/arch下 (可以把boot文件夹删掉,节省空间)

    拷贝源码目录下include到3.5.3下

    拷贝源码目录下scripts到3.5.3下

    拷贝源码目录下usr 到3.5.3下

    拷贝源码目录下 .config Kbuild Kconfig Makefile Module.symvers modules.builtin modules.order System.map到3.5.3下

    Kernel-3.5.3下新建目录lib/modules/3.5.3

    然后lib/modules/3.5.3中,建立build连接文件,连接到../../../usr/src/kernel/3.5.3

    好,打包kernel-3.5.3-devel文件夹下的文件和目录,就做好了一个编译环境的安装包,使用者先使用内核安装包安装内核,然后使用本安装包,直接解压到自己设备的根目录。重启切换到3.5.3内核下,即可进行模块的开发和编译了。

  • 相关阅读:
    mysql全文索引
    oracle窗口函数的实战
    数据库的三大范式
    Oracle12cR1 Data Guard 实施文档
    Oracle 11gR2 RAC 删除节点
    Jboss部署文档
    Hexo搭建静态博客踩坑日记(一)
    一行代码引入博客园樱花飘落特效
    Hexo搭建静态博客踩坑日记(二)
    学习axios必知必会(2)~axios基本使用、使用axios前必知细节、axios和实例对象区别、拦截器、取消请求
  • 原文地址:https://www.cnblogs.com/jintianfree/p/3793014.html
Copyright © 2011-2022 走看看