发布网友 发布时间:2022-04-21 19:40
共1个回答
热心网友 时间:2023-11-01 11:57
step 1
准备:(1). 所需的内核源码
step2:
切换到源码所在的目录,make distclean 命令:删除生产的.o 和 .config 文件
编译内核之前需要一份配置文件,并在此基础上修改,故借用本地/boot/config-3.13.0-24-generic 配置文件,命令: cp /boot/config-3.13.0-24-generic /home/yangqi/code/linux/linux-4.2.3/.config
该配置文件.config 即是对内核裁剪的配置,不用直接打开修改,系统提供menu界面修改,命令:make menuconfig (如果此命令报错,说明需要装ncurses库,安装命令:sudo apt-get install libncurses5-dev) (menu目录如下:)
配置完,保存即可。
接下来,根据配置文件,编译内核: make bzImage V=1 (V=1 会显示编译的过程),编译时间大概1个小时
编译完内核,得到的bzImage会存放在linux-4.2.3/arch/x86_ 内,(x86_为你选择的系统架构,配置的时候,你选择什么架构,编译好的内核文件就存放在对应的以架构命名的文件夹下)(下图为:以架构命名的文件夹)
接下来,编译模块: make moles 大约需要2个小时
将编译后的模块文件注入到系统的/lib/moles 下,命令: make moles_install (成功如图: ,存放在4.2.3文件夹下)
接下来,制作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/moles下的文件4.2.3一致,这是内核的版本号);ubutun下使用mkinitramfs 4.2.3 -o /boot/init-4.2.3
然后,还需要将第6步编译好的bzImage (linux-4.2.3/arch/x86_/boot/下)拷贝到/boot/下:cp /home/yangqi/code/linux/linux-4.2.3/arch/x86_/boot /root/vmlinux-4.2.3 (保证bzImage 和 initrd-4.2.3 都放在/boot/下)
最后,修改系统启动配置文件:(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-b285d205ee' {
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-b285d205ee' {
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