ubutun 下编译linux内核并添加为新的启动项

        对于嵌入式爱好者来说,裁剪编译内核是一门必修课,作为初学者,尝试编译kernel4.2.3 并添加到启动项,今日记之以为它日作为。

step 1

         准备:(1). 所需的内核源码,www.kernel.org 可下载;

         

step2:

  1.          切换到源码所在的目录,make distclean 命令:删除生产的.o 和 .config 文件
  2.          编译内核之前需要一份配置文件,并在此基础上修改,故借用本地/boot/config-3.13.0-24-generic 配置文件,命令: cp /boot/config-3.13.0-24-generic /home/yangqi/code/linux/linux-4.2.3/.config
  3.          该配置文件.config 即是对内核裁剪的配置,不用直接打开修改,系统提供menu界面修改,命令:make menuconfig (如果此命令报错,说明需要装ncurses库,安装命令:sudo apt-get install libncurses5-dev) (menu目录如下:)
  4.      配置完,保存即可。
  5.      接下来,根据配置文件,编译内核:  make bzImage V=1 (V=1 会显示编译的过程),编译时间大概1个小时
  6.      编译完内核,得到的bzImage会存放在linux-4.2.3/arch/x86_64 内,(x86_64为你选择的系统架构,配置的时候,你选择什么架构,编译好的内核文件就存放在对应的以架构命名的文件夹下)(下图为:以架构命名的文件夹
  7.      接下来,编译模块: make modules 大约需要2个小时
  8.      将编译后的模块文件注入到系统的/lib/modules 下,命令: make modules_install (成功如图:  ,存放在4.2.3文件夹下)
  9.      接下来,制作init ramdisk文件 : RedHat 下使用mkinitrd init-4.2.3 4.2.3  + cp init4.2.3 /boot/init4.2.3 (init-4.2.3为自拟,后一个参数4.2.3 必须与/lib/modules下的文件4.2.3一致,这是内核的版本号);ubutun下使用mkinitramfs 4.2.3 -o /boot/init-4.2.3
  10.      然后,还需要将第6步编译好的bzImage (linux-4.2.3/arch/x86_64/boot/下)拷贝到/boot/下:cp /home/yangqi/code/linux/linux-4.2.3/arch/x86_64/boot  /root/vmlinux-4.2.3  (保证bzImage 和 initrd-4.2.3 都放在/boot/下)
  11.       最后,修改系统启动配置文件:(RedHat下修改/etc/grub.conf或者/etc/lilo.conf)
    ubuntu下修改/boot/grub/grub.cfg 文件,命令:sudo gedit /boot/grub/grub.cfg (如下图修改:                          menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-cfd7566c-18ef-47bf-9b04-b285d20564ee' {
        gfxmode $linux_gfx_mode
        insmod gzio
        insmod ntfs
        set root='hd1,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1  FA5CCE605CCE1773
        else
          search --no-floppy --fs-uuid --set=root FA5CCE605CCE1773
        fi
        loopback loop0 /ubuntu/disks/root.disk
        set root=(loop0)
        linux    /boot/vmlinuz-3.13.0-24-generic root=UUID=FA5CCE605CCE1773 loop=/ubuntu/disks/root.disk rw rootflags=sync  quiet splash $vt_handoff
        initrd    /boot/initrd.img-3.13.0-24-generic
    }

    menuentry 'Ubuntu My Linux-4.2.3' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-cfd7566c-18ef-47bf-9b04-b285d20564ee' {
        gfxmode $linux_gfx_mode
        insmod gzio
        insmod ntfs
        set root='hd1,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1  FA5CCE605CCE1773
        else
          search --no-floppy --fs-uuid --set=root FA5CCE605CCE1773
        fi
        loopback loop0 /ubuntu/disks/root.disk
        set root=(loop0)
        linux    /boot/vmlinux-4.2.3 root=UUID=FA5CCE605CCE1773 loop=/ubuntu/disks/root.disk rw rootflags=sync  quiet splash $vt_handoff
        initrd    /boot/initrd-4.2.3
    }

修改说明:蓝色为一开始就存在的代码,红色是复制蓝色的部分,并在此基础之上加以修改的,修改的地方为绿色部分。(注:menuentry命令为在开机启动时候,通过enter键键入那一刻,触发的命令)

12.  最后,还需要将该文件set default="0"(旧)修改 set default="1"(新),应该表示的是系统数目。

13.  保存完毕,重启电脑就可以看到新添加的选项。 进入系统后,使用 uname -r 即可查看到新的内核4.2.3

        文章至此结束。未尽详细,但求有迹可循。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值