由于项目需要,要用U盘制作一个Linux系统,支持EFI启动,并且内核版本要求是2.6.35.6。所以在选系统的时候,就必须要选安装文件里面带有EF I目录,并且该目录下面有BOOTx64.EFI和grubx64.efi两个文件,并且必须要是64位的系统,32位的系统是不支持EFI的。经过多次的查找,最终选定了Ubuntu 12.04。但是Ubuntu 12.04的内核版本为3.13.0-117,因此必须要对他进行降内核处理。
U盘制作ubuntu系统
需要的工具:UltraISO
首先需要从ubuntu的版本库中下载镜像文件。下载地址为:
- 打开镜像文件,确认镜像文件中有EFI文件
2. 插入一个空白U盘,启动->写入硬盘映像,进行U盘刻录
写入方式选择USB-HDD+,点击“写入”就可以了,等“完成比例”达到100%,系统就制作完成了。
U盘安装ubuntu系统
开机,按“DEL”键进入BIOS设置,选择从U盘启动。然后按照提示,一步步完成安装。安装完成后,使用“uname -r”命令查看内核版本号。发现版本号为3.13.0-117,为了达到目的必须使用降内核的方法,使内核版本变为2.6.35.6。
内核降级
1. 下载2.6.35.6版的内核
要进行内核降级,必须要先下载对应的内核版本。下载方式有两种:一是直接下载内核的源码,进行编译和配置,下载地址为;二是下载内核对应的二进制文件进行安装,下载地址为。
如果下载内核源码,进行编译,耗费的时间会比较多,并且可能在编译过程中,会遇到一些问题,于是采用了第二种方法。到这个地址下面下载文件,header文件必须要下这个,在装的过程中开始下的是
发现在编译网卡驱动的时候出错,因为这个文件在安装之后不会再/usr/src下面新建一个linux-header-LINUX-KERNEL文件夹:
2. 2.6.35.6版内核安装
将这两个文件拷贝到/usr目录下,进行安装。安装使用dpkg命令。dpkg 是为”Debian“ 操作系统专门开发的套件管理系统,用于软件的安装,更新和移除。
在安装完成之后,会自动的将2.6.35.6的内核添加到EFI的启动菜单,EFI的启动菜单在/boot/grub/grub.cfg下,这个文件包含了该系统所有的可用内核版本,可以通过选择来启动哪个版本的内核。可以通过如下命令进行查看。至此,2.6.35.6的内核安装完成。
3. 从2.6.35.6内核启动
有多个版本的内核,指定从哪个内核启动的方法:
首先需要用到2的查看方法,记住这些内核版本的名字。
然后编辑/etc/default/grub文件,修改GRUB_DEFAULT为指定的内核。格式参照如下:由两部分组成:子菜单+内核名字。
GRUB_DEFAULT的值前面“Previous Linux version”的确定要根据具体情况,可以通过如下命令查看来确定这个值。
修改完成之后,保存再运行apdate-grub命令,再重启就好了。重启完成之后,查看内核版本号,看是否变成2.6.35.6。
网络修复
在完成内核降级之后,发现网络连接不上了,对网络的诊断如下
- 用ifconfig 查看接口状态,发现只有lo接口,而ethi0 eth1接口没有了。
- 用dmesg | grep ETH命令来查看在启动过程中,是否有网卡信息,结果发现没有
- 用lspci -vvv 查看是否发现网卡设备,从而获取网卡信息,lspci 结果如下:
从而得知网卡为Intel的I210 千兆以太网网卡,需要的驱动名字叫“igb”。
- 查看驱动是否加载, lsmod | grep igb,发现是驱动没有加载进去导致网络连接不上。
- 下载驱动,到intel的官网下载linux驱动,
- 将这个驱动文件拷贝到/usr文件夹下,然后进行解压
- 进入到驱动目录再 cd src,再make install
编译完成之后,就会生成一个igb.ko文件,默认放在/lib/module/KERNEL_VERSION/kernel/drivers/net/igb/下。
在这里需要注意的是前面下载的linux-header二进制文件,必须是,这里面包含了linux-header的源文件和build文件,在安装完成之后,会将linux-header源文件放入到/usr/src下,并且在/lib/module/LINUX-KERNEL下多出build文件,这是编译驱动所必须得,而下载的 很小,只包含有二进制文件。
否则,会报如下错误:
- Modprobe igb
- 查看网络状态,发现恢复正常。
至此基于内核2.6.35.6版本的Linux系统安装完成。