製做linux內核安裝包

實驗基於Centos 6.2linux

 

升級linux內核

直接在一個有編譯環境的設備上,編譯升級內核很簡單。bash

make menuconfig工具

或者ui

拷貝現有系統的.config文件spa

修改.config文件  CONFIG_DEBUG_INFO=n (避免編譯產生文件過大)code

make oldconfigblog

make all -j4ip

make modules_install開發

make install源碼

製做linux內核安裝包

有時須要在虛擬機上編譯好內核後,安裝到另外的設備上,而設備上工具備限,沒有編譯開發環境等。一種方式是經過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便可完成內核安裝。

製做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內核下,便可進行模塊的開發和編譯了。

相關文章
相關標籤/搜索