1、先在终端查询自己的gcc版本和ubuntu版本,之后到官网下载所需的内核版本,其实还可以从终端直接下载,可能会慢点,具体的如何操作可以到网上查一查;
2、将下载的内核解压到/usr/src目录下,不是一定但建议解压到上面,使用tar-xvf+压缩包名或则tar-xzvf+压缩名都行,可能有些只支持其中一种,压缩包名例如linux-2.6.34.tar.gz(看你下载的内核压缩包名子即可);假如下载不是置于/usr/src/中的话,先从终端步入下载的内核压缩包所在的目录,将其联通到/usr/src/目录下,执行句子联通:mvlinux-2.6.34.tar.gz/usr/src/。(linux此篇文章默认的linux-2.6.34.tar.gz,按自己的版本来,下同)。
3、进入解压后的内核源码文件夹。cd/usr/src/yourname/Desktop/linux-2.6.34
4、接出来的步骤可能基本都要在超级用户的模式下进行,在终端输入sudosu按提示输入密码即可,之后最好安装一些必要的依赖包。apt-getinstallbuild-essentialkernel-packagelibncurses5-dev因为ubuntu16.04的gcc版本版本偏低,容易造成error:undeclared(firstuseinthisfunction),建议使用apt-getinstallgcc-4.8,安装完成后执行ln–sfgcc-4.8gcc替换掉系统默认gcc。
5、执行配置命令。执行makeconfig或则makemenuconfig,不晓得要选哪些的话可以默认,可能变异的时间会长一些,倘若是menuconfig的话,采用默认配置,直接选择最后的save选项,默认的.config不须要修改,保存后选择exit。清除操作简介:
#makeclean:清除大多数编译生成的文件,但会保留config文件等;
#makemrproper:清除所有编译生成的文件、config及个别备份文件;
#makedistclean:清除mrproper、patches以及编辑器备份文件。
6、执行完配置命令以后,可以执行:sudomakemrproper(清乘以前以前编译过的旧文件,第一次编译,可不执行)或则makeclean,这行这个命令只会删掉曾经编译过的一些中间文件linux系统安装,不会删除一些配置文件;
7、完了以后开始编译过程,直接make或则sudomake,编译可能回话一两个小时甚至更久,中途也坑能会碰到各类问题linux视频教程,下边再说;
8、执行sudomakemodules_installinstall,这部应当是可以直接编译和安装模块敖青云存储技术原理分析:基于linux 2.6内核源代码,就不须要先makemodules(编译内核)再makemodules_install(安装内核)了,博主我之前按网上教程如此做但安装完虚拟机季候可能会出现重启时仍然就停在initramfs那里的情况,身边好几个人也是,都按着sudomakemodules_installinstall来基本都解决了;
9、执行makestall安装内核;(8跟9似乎可以交换次序,不过建议还是先安装模块在安装内核吧。)
10、创建initrd文件:mkinitramfs-o/boot/initrd.img-2.6.34;
11、配置grub引导。
执行命令gedit/etc/default/grub,配置/etc/default/grub文件在文件中添加GRUB_TIMEOUT_STYLE=menu,GRUB_HIDDEN_TIMEOUT=0改为小于0的数即可,或则直接就添加GRUB_TIMEOUT_STYLE=menu,保存退出(通常两种形式都可以),执行命令update-grub;执行完这一步基本上就完成了内核的编译和安装,重启ubuntu应当就行了。下边总结一下这个过程中可能会碰到的一些问题和解决方式。
(1)objcopy:'arch/x86/vdso/vdso.so.dbg':Nosuchfile或则是提示gcc:error:elf_x86_64:没有哪个文件或目录,这个可能的诱因是高版本的ubuntu跟低版本的内核不兼容。解决的办法是在arch/x86/vdso/Makefile中做一些更改:VDSO_LDFLAGS_vdso.lds开头所在行的"-melf_x86_64"替换为"-m64"。将以VDSO_LDFLAGS_vdso32.lds开头所在行的"-melf_386"替换为"-m32"。如此更改以后就没问题了。
(2)drivers/net/igbvf/igbvf.h:129:15:error:duplicatemember'page'。根据提示的错误说是drivers/net/igbvf/igbvf.h中的第129行,打开文件听到第129行和第124行重复了structpage*page,由于这两行代码都定义在内部的一个结构体中敖青云存储技术原理分析:基于linux 2.6内核源代码,这是不容许重复的。解决办法:drivers/net/igbvf/igbvf.h中更改129行的structpage*page为structpage*pagep即可。
(3)compiler-gcc5.h:Nosuchfile解决办法:将附件compiler-gcc5.h装入/linux-2.6.34/include/linux中。
(4)Can'tuse'defined(@array)'(Maybeyoushouldjustomitthedefined()?)atkernel/timeconst.plline373.。解决办法:将/linux-2.6.34/kernel/timeconst.pl中第373行的defined()去除只留下@val
(5)安装好以后重启倘若出现难以启动内核等错误则在原先的内核中打开终端依次输入下边指令,即使有点长,但验证没问题,不然重启逗留在initramfs处未能启动,这些情况说是c盘损坏,我上网查了好多资料,参考他人的做法都不行,逐项输入下边指令然后重启完美解决。(linux的版本是自己安装的版本,别复制了版本都忘了改,右图为重启遇见的initramfs的问题。注意输入指令的一些空格问题,最好直接复制在更改版本号即可。)
sudosu
cd/boot
cpinitrd.img-2.6.34initrd-2.6.34.old(备份)
depmod-a
update-initramfs-k2.6.34-c
cd/tmp
gzip-dc/boot/initrd.img-2.6.34|cpio-id
touchlib/modules/2.6.34/modules.dep
find./|cpio-Hnewc-o>/boot/initrd.img-2.6.34.new
gzip/boot/initrd.img-2.6.34.new
cd/boot
mvinitrd.img-2.6.34.new.gzinitrd.img-2.6.34
(6)注意事项:因为ubuntu16.04一些依赖项目版本偏低,可能造成安装内核成功后,出现缺位模块未能正常启动,建议使用ubuntu14.04编译安装,或则直接使用ubuntu10/ubuntu12编译内核。
(7)可能会在makemenuconfig以后执行了makeclean或则makemrproper,之后可能会提示如下错误。解决的办法是再重新执行makemrproper应当就可以了,这个也可以多多参考他人优秀的做法。
经过个这个看似漫长而复杂看似无趣但也许有挺有趣的过程,结合可能会出现的问题应当编译和安装就没问题了。可能不一定一次能够安装成功,可以多结合他人优秀的做法,相互结合。笔者愚钝,不免会有一些可能描述错误的地方,欢迎见谅。以上均为个人原创,文章至此已结束,切勿乱转载感谢,转载请标明:转载来源自陌陌公众号「蜗牛永动机」,否则侵权后果自负。
欢迎扫码关注我的公众号「蜗牛永动机」,回复1024免费获取5G编程学习资源~