實驗基于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/bashPROGRAM=install_kernel.shif [ "$0" != "${PROGRAM}" ]; thenif [ "$0" != "./""${PROGRAM}" ]; thenecho "ERROR: ****** !"exitfifiecho "0%..."/bin/cp -rf lib/modules/3.5.3 /lib/modules/echo "30%..."/bin/sh depmod.sh /sbin/depmod 3.5.3echo "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/bashPROGRAM=install.shGRUB_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 fifiecho "0%..."/bin/cp -rf lib/modules/3.5.3 /lib/modules/echo "30%..."/bin/sh depmod.sh /sbin/depmod 3.5.3echo "60%..."sh kernel_install 3.5.3 bzImage System.map "/boot"echo "90%..."modify_grubecho "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內核下,即可進行模塊的開發和編譯了。
新聞熱點
疑難解答