给虚拟机中的ubuntu安装新内核

时间:2016-07-30 10:29:52   收藏:0   阅读:1650

主机操作系统版本: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‘
        

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!