实验基于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. /lib/modules/

echo "30%..."

/bin/sh depmod.sh /sbin/depmod 3.5.

echo "60%..."

sh install.sh 3.5. 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. /lib/modules/ echo "30%..."
/bin/sh depmod.sh /sbin/depmod 3.5. echo "60%..."
sh kernel_install 3.5. 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内核安装包的更多相关文章

  1. linux多种安装包格式的安装方法

    linux多种安装包格式的安装方法 一.rpm包安装方式步骤:1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd s ...

  2. NSIS:制作软件升级安装包

    原文 NSIS:制作软件升级安装包 相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生.在这种情况下,您可能就需要一个软件的升级安装包了.   现在,我们就来一步步把这个安装包做 ...

  3. Advanced Installer 制作.NetWeb部署安装包

    原文:Advanced Installer 制作.NetWeb部署安装包 因为是.Net的Web应用程序,所以想用Advanced Installer 调用Dll实现安装部署. 因为我需要自己定制参数 ...

  4. IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权

    原文:IS2009制作Oracle 静默安装包(二) 感谢空白先生特许授权 上一篇: IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权本文经原作者特许授权于海洋女神发布,转载请务必注 ...

  5. IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权

    原文:IS2009制作Oracle 静默安装包(一)感谢空白先生特许授权 上一篇: MyEclipse中消除frame引起的“the file XXX can not be found.Please ...

  6. 制作iis自动安装包

    原文:制作iis自动安装包 MS 一直没有提供可独立安装的 IIS 安装包,Windows 的缺省安装没有安装它,通常要到控制面板的"添加/删除 Windows 程序"中去选择安装 ...

  7. 用Inno Setup制作WEB程序安装包

    原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...

  8. C# 制作Windows服务安装包

    C# 制作Windows服务安装包   这两天公司要用C#写一个windows服务,做成安装安装包.制作的过程中遇到了一些问题,写完之后总结一下.如果以后在用到的话可以可以参考一下,而且由于原来没有做 ...

  9. 使用NSIS制作可执行程序的安装包

    使用NSIS制作可执行程序的安装包: 1,NSIS下载地址:https://pan.baidu.com/s/1GzzQNXgAlJPJWgjBzVwceA 下载完成之后解压缩,打开安装程序,默认安装即 ...

随机推荐

  1. 变量在SSIS包中的使用

    2010~2011年经常使用SSIS包采集加工数据,后来换了工作就很少使用.最近又开始用那玩意采集数据,努力回想之前是怎样操作的,网上各种找各种纠结.趁这次使用记录下日常操作步骤,以备以后不时之需. ...

  2. Python之路-python(面向对象进阶)

    一.面向对象高级语法部分 1.静态方法.类方法.属性方法 2.类的特殊方法 3.反射 二.异常处理 三.Socket开发基础 一.面向对象高级语法部分 静态方法(@staticmethod) 定义:只 ...

  3. 用"僵尸对象"调试内存管理问题

    Cocoa提供了"僵尸对象"(Zombie Object)这个功能.启用这项调试功能之后,运行时系统会把所有已经回收的实例转化成特殊的"僵尸对象",而不会真正回 ...

  4. Lua自己实现string.split功能

    local function split(str, d) --str是需要查分的对象 d是分界符 local lst = { } local n = string.len(str)--长度 local ...

  5. PPAS Migration Toolkit document

    -----------------Migration Toolkit-----------------Migration Toolkit is a command line utility that ...

  6. Leetcode: Largest BST Subtree

    Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest mea ...

  7. php组成数组

    每次向数据库取5条数据,不足5条就不显示 $z = (int)(count($data) / 5);for ($ii = 1; $ii <= $z; $ii++) { foreach ($dat ...

  8. IUS tcl cmd

    Incisive simulator中的command-line language基于TCL. Ncsim> command [-modifier] [-options] [arguments] ...

  9. [3] 智能指针std::auto_ptr

    [1]std::auto_ptr 对于编译器来说,智能指针实质是一个栈对象,而并非指针类型. 智能指针通过构造函数获取堆内存的管理所有权,而在其生命期结束时,再通过析构函数释放由它所管理的堆内存. 所 ...

  10. [已解决] windows 80端口被占用

    看下是不是IIS开着,如果是关掉就OK拉 原文地址:http://www.cnblogs.com/gifisan/p/5822156.html