制作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内核下,即可进行模块的开发和编译了。

你可能感兴趣的:(linux)