实验基于Centos 6.2linux
直接在一个有编译环境的设备上,编译升级内核很简单。bash
make menuconfig工具
或者ui
拷贝现有系统的.config文件spa
修改.config文件 CONFIG_DEBUG_INFO=n (避免编译产生文件过大)code
make oldconfigblog
make all -j4ip
make modules_install开发
make install源码
有时须要在虚拟机上编译好内核后,安装到另外的设备上,而设备上工具备限,没有编译开发环境等。一种方式是经过nfs挂载,在设备上直接make modules_install,而后make install。
另一种,就是手动拷贝安装。下面介绍怎么制做一个内核安装包,能够直接在设备上安装。如下之内核3.5.3为例说明。
一、编译
make all -j4
二、准备各类目录及文件
新建文件夹 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
三、编写安装脚本
在这以前,首先须要修改下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 !"
四、如今有个问题,你会发现,目录下有个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!"
五、打包kernel-3.5.3文件夹下的内容
制做完成,拿到设备上,解压,执行install.sh便可完成内核安装。
好,如今你制做了一个内核安装包,如今有人要将之前的驱动,从新编译,以适应这个新的内核。你总不能把你编译的源码打个包给他的吧,太大了。
其实只要拷贝几个必要的目录就能够了,如下仍是以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内核下,便可进行模块的开发和编译了。