参考:
https://www.linuxidc.com/Linux/2011-08/40124.htm
https://blog.csdn.net/chenhangx/article/details/106736809
https://blog.csdn.net/Big_Rotor/article/details/70137968
首先选择Ubuntu镜像
http://mirrors.melbourne.co.uk/ubuntu-releases/14.04/
Linux2.6所有内核下载地址
http://www.kernel.org/pub/linux/kernel/v2.6/
选择下面这个
第一步:下载解压内核源代码linux-2.6.34.tar.gz
sudo tar xvjf linux-2.6.34.tar.bz2 -C /usr/src/
cd /usr/src
cd linux-2.6.34
即将下载的内核解压到/usr/src目录下,不是一定但建议解压到里面,使用tar -xvf +压缩包名或者tar -xzvf +压缩名都行,可能有些只支持其中一种,压缩包名比如linux-2.6.34.tar.gz(看你下载的内核压缩包名字即可);如果下载不是放在/usr/src/中的话,先从终端进入下载的内核压缩包所在的目录,将其移动到/usr/src/目录下,执行语句移动: mv linux-2.6.34.tar.gz /usr/src/ 。(linux此篇文章默认的linux-2.6.34.tar.gz,按自己的版本来,下同)。
(2)、接下来的步骤可能基本都要在超级用户的模式下进行,在终端输入
sudo su按提示输入密码即可,然后最好安装一些必要的依赖包。
apt-get install build-essential kernel-package libncurses5-dev由于ubuntu16.04的gcc版本版本过高,容易导致error:undeclared (first use inthis function),建议使用
apt-get install gcc-4.8,安装完成后执行
ln –sf gcc-4.8 gcc`替换掉系统默认gcc。
(3)、执行配置命令。执行make config 或者make menuconfig
,不知道要选什么的话可以默认,可能变异的时间会长一些,如果是menuconfig的话,采用默认配置,直接选择最后的save选项,默认的.config不需要更改,保存后选择exit
。清理操作简介:
#make clean: 清理大多数编译生成的文件,但会保留config文件等;
#make mrproper: 清理所有编译生成的文件、config及某些备份文件;
#make distclean: 清理mrproper、patches以及编辑器备份文件。
(4)、执行完配置命令之后,可以执行:sudomake mrproper (清除以前曾经编译过的旧文件,第一次编译,可不执行) 或者make clean
,这行这个命令只会删除以前编译过的一些中间文件,不会删掉一些配置文件;
**(5)**完了之后开始编译过程,直接make 或者sudo make
,编译可能回话一两个小时甚至更久,中途也坑能会遇到各种问题,下面再说;
(6)、执行sudo make modules_install install,这部应该是可以直接编译和安装模块,就不需要先make modules(编译内核)再make modules_install(安装内核)了,博主我之前按网上教程这么做但安装完虚拟机季候可能会出现重启时一直就停在initramfs那儿的情况,身边好几个人也是,都按着sudo make modules_install install
来基本都解决了;
(7)、执行make install
安装内核;(8跟9好像可以交换顺序,不过建议还是先安装模块在安装内核吧。)
(8)、创建 initrd文件:mkinitramfs -o/boot/initrd.img-2.6.34
;
(9)、配置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’: No such file或者是提示gcc: error :elf_x86_64: 没有那个文件或目录,这个可能的原因是高版本的ubuntu跟低版本的内核不兼容。解决的办法是在arch/x86/vdso/Makefile中做一些修改:VDSO_LDFLAGS_vdso.lds 开头所在行的 “-m elf_x86_64
” 替换为 “-m64
”。将以 VDSO_LDFLAGS_vdso32.lds
开头所在行的 “-m elf_386
” 替换为 “-m32”。 这么修改之后就没问题了。
(2)drivers/net/igbvf/igbvf.h:129:15: error: duplicate member’page’。按照提示的错误说是drivers/net/igbvf/igbvf.h中的第129行,打开文件看到第129行和第124行重复了struct page*page,因为这两行代码都定义在内部的一个结构体中,这是不允许重复的。解决办法:drivers/net/igbvf/igbvf.h中修改129
行的structpage *page
为struct page *pagep
即可。
(3)compiler-gcc5.h:No such file解决办法:将附件compiler-gcc5.h放入/linux-2.6.34/include/linux中。
(4)Can’t use ‘defined(@array)’ (Maybe you should just omit thedefined()?) at kernel/timeconst.pl line 373.。解决办法:将/linux-2.6.34/kernel/timeconst.pl中第373行的defined()去掉只留下@val
(5)安装好之后重启如果出现无法启动内核等错误则在原来的内核中打开终端依次输入下面指令,虽然有点长,但验证没问题,不然重启停留在initramfs处无法启动,这种情况说是磁盘受损,我上网查了很多资料,参考别人的做法都不行,逐条输入下面指令之后重启完美解决。(linux的版本是自己安装的版本
,别复制了版本都忘了改,下图为重启遇到的initramfs的问题。注意输入指令的一些空格问题,最好直接复制在修改版本号即可。)
sudo su
cd /boot
cp initrd.img-2.6.34 initrd-2.6.34.old (备份)
depmod -a
update-initramfs -k 2.6.34 -c
cd /tmp
gzip -dc /boot/initrd.img-2.6.34| cpio -id
touch lib/modules/2.6.34/modules.dep
find ./ | cpio -H newc -o > /boot/initrd.img-2.6.34.new
gzip /boot/initrd.img-2.6.34.new
cd /boot
mv initrd.img-2.6.34.new.gz initrd.img-2.6.34
弄好之后关掉重启
如果直接进入原来版本
判断版本方法:
如果不是,关机重启,按shift键
6)注意事项:由于ubuntu16.04一些依赖项目版本过高,可能导致安装内核成功后,出现缺失模块无法正常启动,建议使用ubuntu14.04编译安装,或者直接使用ubuntu10/ubuntu12编译内核。
(7)可能会在make menuconfig之后执行了make clean 或者make mrproper,然后可能会提示如下错误。解决的办法是再重新执行make mrproper应该就可以了,这个也可以多多参考别人优秀的做法。
转载来源自微信公众号蜗牛永动机
推荐https://blog.csdn.net/qq_34247099/article/details/50949720
设置Ubuntu 14.04右键终端的方法
右键文件夹可能没有在终端打开
如下图:
方法
首先Ctrl+Alt+t
输入
sudo apt-get install nautilus-open-terminal
摁enter
键
然后关机重启
即可