由于项目需要,要用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的版本库中下载镜像文件。下载地址为:

http://mirrors.163.com/ubuntu-releases/12.04/ubuntu-12.04.5-desktop-amd64.iso

  1. 打开镜像文件,确认镜像文件中有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版的内核

要进行内核降级,必须要先下载对应的内核版本。下载方式有两种:一是直接下载内核的源码,进行编译和配置,下载地址为https://www.kernel.org/pub/linux/kernel/v2.6/;二是下载内核对应的二进制文件进行安装,下载地址为http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.35.6-maverick/

如果下载内核源码,进行编译,耗费的时间会比较多,并且可能在编译过程中,会遇到一些问题,于是采用了第二种方法。到这个地址下面下载文件,header文件必须要下这个,在装的过程中开始下的是
linux-headers-2.6.35-02063506-generic_2.6.35-02063506.201009271105_amd64.deb

发现在编译网卡驱动的时候出错,因为这个文件在安装之后不会再/usr/src下面新建一个linux-header-LINUX-KERNEL文件夹:

linux-headers-2.6.35-02063506_2.6.35-02063506.201009271105_all.deb

linux-image-2.6.35-02063506-generic_2.6.35-02063506.201009271105_amd64.deb

 

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。

网络修复

在完成内核降级之后,发现网络连接不上了,对网络的诊断如下

  1. 用ifconfig 查看接口状态,发现只有lo接口,而ethi0 eth1接口没有了。
  2. 用dmesg | grep ETH命令来查看在启动过程中,是否有网卡信息,结果发现没有
  3. 用lspci -vvv 查看是否发现网卡设备,从而获取网卡信息,lspci 结果如下:

 

从而得知网卡为Intel的I210 千兆以太网网卡,需要的驱动名字叫“igb”。

  1. 查看驱动是否加载, lsmod | grep igb,发现是驱动没有加载进去导致网络连接不上。
  2. 下载驱动,到intel的官网下载linux驱动,https://downloadcenter.intel.com/download/23207/Intel-Network-Adapter-Driver-for-82575-6-82580-I350-and-I210-211-Based-Gigabit-Network-Connections-for-Linux-
  3. 将这个驱动文件拷贝到/usr文件夹下,然后进行解压
  4. 进入到驱动目录再 cd src,再make install

 

编译完成之后,就会生成一个igb.ko文件,默认放在/lib/module/KERNEL_VERSION/kernel/drivers/net/igb/下。

在这里需要注意的是前面下载的linux-header二进制文件,必须是linux-headers-2.6.35-02063506_2.6.35-02063506.201009271105_all.deb,这里面包含了linux-header的源文件和build文件,在安装完成之后,会将linux-header源文件放入到/usr/src下,并且在/lib/module/LINUX-KERNEL下多出build文件,这是编译驱动所必须得,而下载的linux-headers-2.6.35-02063506-generic_2.6.35-02063506.201009271105_amd64.deb 很小,只包含有二进制文件。

 

否则,会报如下错误:

 

  1. Modprobe igb
  2. 查看网络状态,发现恢复正常。

至此基于内核2.6.35.6版本的Linux系统安装完成。