給虛擬機中的ubuntu安裝新內核


主機操作系統版本:Windows 10
虛擬機版本:Workstation 12 Pro
虛擬機操作系統:Ubuntu 14.04
Linux內核:3.13.0
gcc版本:4.8.2

    最近學習linux內核,不少比較經典的書籍都是以2.6.x源碼進行講解的。所以打算在linux虛擬機中安裝一個2.6.36的內核。步驟如下:

    (一)下載源碼
        內核下載官網:www.kernel.org
        下載linux-2.6.36.tar.gz並解壓到/usr/src目錄下
        進入/usr/src/linux-2.6.36目錄,以后的工作都在這個目錄下進行 
    (二)定制內核
        為了節省配置內核的時間,我們把系統中現有的配置拷貝到當前目錄下
            #sudo cp /boot/config-3.13.0-24-generic ./.config
        無論是否需要自己定制內核,都要執行配置命令
            #sudo make menuconfig
        然后保存退出就行了
    (三)編譯內核
        在這里,網上有不少文章都說執行sudo make -j4,我這樣編譯的時候並沒有提示錯誤,但是make install卻有如下提示信息:
           *** Missing file: arch/x86/boot/bzImage
           *** You need to run "make" before "make install".           
        於是改用  #sudo make 來進行編譯
        下面是編譯過程中遇到的幾個錯誤,這里把他們以及解決方法貼出來(但為什么用make -j4編譯沒有提示錯誤呢?)

        錯誤一:
            gcc: error: elf_x86_64: No such file or directory
            gcc: error: unrecognized command line option ‘-m’
            OBJCOPY arch/x86/vdso/vdso.so
            objcopy: 'arch/x86/vdso/vdso.so.dbg': No such file
            make[2]: *** [arch/x86/vdso/vdso.so] Error 1
            make[1]: *** [arch/x86/vdso] Error 2
            make: *** [arch/x86] Error 2
         解決方法:修改文件arch/x86/vdso/Makefile,把"-m elf_x86_64"改為"-m64";把"-m elf_i386"改為"-m32"

        錯誤二:
            In file included from drivers/net/igbvf/ethtool.c:36:0:
            drivers/net/igbvf/igbvf.h: At top level:
            drivers/net/igbvf/igbvf.h:129:15: error: duplicate member 'page'
            make[3]: *** [drivers/net/igbvf/ethtool.o] Error 1
            make[2]: *** [drivers/net/igbvf] Error 2
            make[1]: *** [drivers/net] Error 2
            make: *** [drivers] Error 2 
        解決辦法:在drivers/net/igbvf/igbvf.h中注釋掉129行,及 //struct page *page;

        錯誤三:
            In file included from drivers/scsi/pmcraid.c:57:0:
            drivers/scsi/pmcraid.h: At top level:
            drivers/scsi/pmcraid.h:601:8: error: duplicate member 'sense_buffer'
            drivers/scsi/pmcraid.c: In function 'pmcraid_abort_cmd':
            drivers/scsi/pmcraid.c:2940:33: warning: variable 'res' set but not used [-Wunused-but-set-variable]
            drivers/scsi/pmcraid.c: In function 'pmcraid_ioctl_passthrough':
            drivers/scsi/pmcraid.c:3745:5: warning: variable 'access' set but not used [-Wunused-but-set-variable]
            drivers/scsi/pmcraid.c: In function 'pmcraid_check_ioctl_buffer':
            drivers/scsi/pmcraid.c:4052:6: warning: variable 'access' set but not used [-Wunused-but-set-variable]
            make[3]: *** [drivers/scsi/pmcraid.o] Error 1
            make[2]: *** [drivers/scsi] Error 2
            make[1]: *** [drivers] Error 2
            make[1]: Leaving directory `/home/ashish/litmus-rt'
            make: *** [debian/stamp/build/kernel] Error 2 
        解決辦法:在drivers/scsi/pmcraid.h中注釋掉571行,及//u8 *sense_buffer;
    (四)安裝內核
        #sudo make modules_install 把內核模塊拷貝到/lib/modules/2.6.36目錄下
        #sudo make install 把內核鏡像文件和initrd文件拷貝到/root目錄下並生成grub的配置文件
    (五)配置grub
        雖然在執行make install的時候有自動配置grub,但啟動的時候並沒有grub選擇界面,我們還需要一些其他配置
        配置grub有兩種方式,一種是直接配置/boot/grub/grub.cfg,這種方式很麻煩,具體方式自行百度,因為我也不會。。。
        另一種方式是配置/etc/default/grub文件,然后運行#sudo update-grub生成/boot/grub/grub.cfg文件。
        為了讓系統在開機時顯示grub的選擇界面,我們需要在/etc/default/grub中添加一行:GRUB_TIMEOUT_STYLE=menu。
        想了解更多配置命令,查看 info -f grub -n 'Simple configuration'
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM