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