将mpls编译进内核,内核编译,及内核降级

虽然在Linux 4.5以上的内核版本已经支持MPLS功能,但是我还是想试验一下,如何把mpls编译进内核,(绝对是我的血泪史,强烈建议看完之后再进行编译,问题一般情况都会发生的,尤其是make那里,时间长,把问题提前解决,省时省力省心,希望能给看到的小朋友一点启发,若有错误,望相互讨论)


本文是一篇整理的文章,包括

1 内核的编译过程,及可能遇到的问题,及解决办法
2 如果降低内核版本
系统环境:Ubuntu 12
原始内核是:3.13.0-32-generic 我的内核是:2.6.35
内核和patch的下载链接:https://pan.baidu.com/s/1ixF99SKG8l75xmNgUu7HCQ


1)下载2.6.35内核
下载链接:www.kernel.org
下载好后把下载的压缩文件复制到/usr/src,并进行解压缩,命令如下:(注:/home/cj替换成你压缩文件下载的地址,内核要做Linux系统下解压缩)

$ sudo cp /home/cj/linux-2.6.34.tar.gz /usr/src       //复制文件到/usr/src目录  
$ sudo cd /usr/src                                    //进入到/usr/src
$ sudo tar -zxvf linux-2.6.35.tar.gz                  //解压缩

2 )下载patch文件:
因为想把mpls编译进内核,所以需要patch文件
linux-kernel-v2.6.35-mpls1.980.patch。
因为这patch文件是针对2.6.35的,所以,内核是2.6.35

3)将下载后的patch文件拷贝到/usr/src/目录下。然后将此文件打进内核中,命令如下:

$ sudo cp /home/cj/linux-kernel-v2.6.35-mpls1.980.patch /usr/src                //复制文件到/usr/src目录
$ sudo cd /usr/src/linux-2.6.35                                        //首先进入kernel主目录下
$ sudo patch -p1 < ../linux-kernel-v2.6.35-mpls1.980.patch             //将patch文件加载到内核文件中。

4)将内核重新编译

$ cd /usr/src/linux-2.6.35
$ sudo make mrproper                 //清除以前曾经编译过的旧文件,第一次编译,可不执行(我是一般都执行)
$ sudo make menuconfig

问题:Install ncurses (ncurses-devel) and try again.

解决:sudo apt-get install libncurses5-dev

再次执行:

$ sudo make mrproper      
$ sudo make menuconfig

这时,终端会弹出一个配置界面,将mpls的选项选中,然后保存退出。

Networking support —>Networking options —>Mulitprtocol Label Switching

        另外:建议将MPLS直接编译进linux内核,而不要选择模块编译,如果选择模块的话,则在系统编译完成后可能不会自动加载,这样就可能导致mpls服务无法启动。即在选中与mpls相关选项时,选择y, 即:“*”,它表示编译进系统内核。而不要选择M,这表示模块。(按空格更改)

$ sudo make       //重新编译内核,此过程需要较长时间直接使用此命令可能有出现问题,可以使用:sudo make CONFIG_DEBUG_SECTION_MISMATCH=y

错误1
gcc: 错误: elf_i386:No such file or directory
make[2]: * [arch/x86/vdso/vdso32-int80.so.dbg] 错误 1
make[1]: * [arch/x86/vdso] 错误 2
make: * [sub-make] 错误 2
原因是gcc 4.6不再支持linker-style架构。


解决:
       vi /usr/src/linux-2.6.35/arch/x86/vdso/Makefile
       把”-m elf_x86_64” 替换为 “-m64“
       把”-m elf_i386” 替换为 “-m32“
       保存退出(注:查找 :/elf_x86_64)


问题2
In file included from drivers/net/igbvf/ethtool.c:36:0:
drivers/net/igbvf/igbvf.h: At top level:
drivers/net/igbvf/igbvf.h:129:15: error: duplicate member ‘page’
make[3]: * [drivers/net/igbvf/ethtool.o] Error 1
make[2]: * [drivers/net/igbvf] Error 2
make[1]: * [drivers/net] Error 2
make: * [drivers] Error 2


解决:
        vi /usr/src/linux-2.6.35drivers/net/igbvf/igbvf.h
        将第129行的struct page *page;注释掉或删掉此行
       保存退出(注:vi中设置行号: :set nu)

$ sudo make install     

$ sudo make modules  //编译模块

会有警告如下(但是我没在意)也可按解决方案执行一下:
       WARNING:        modpost: Found 13 section mismatch(es).
       To see full details build your kernel with:
       ‘make CONFIG_DEBUG_SECTION_MISMATCH=y’


解决方案:
       sudo make CONFIG_DEBUG_SECTION_MISMATCH=y

$ sudo make modules_install  //安装模块

5)最后创建initrd文件:

$ sudo mkinitramfs -o /boot/initrd.img-2.6.35

6)更新grub引导列表

$ sudo update-grub

        若是更新内核到高版本,这样就可以了,因为系统默认是选择高内核版本,但是我们是要降低内核版本,所以,我从网上看了好多,但是感觉这个用着最好:
      1 打开 grub 配置文件

sudo vi /etc/default/grub

      2 找到GRUB_DEFAULT =0 非注释的第一行

GRUB_DEFAULT = "Advanced options for Ubuntu"

      3 将下一行 GRUB_HIDDEN_TIMEOUT=0

      注释掉,这是引导的时间

#GRUB_HIDDEN_TIMEOUT=0

      4 保存,执行grub更新,重启

$ sudo update-grub
$ sudo reboot

8)重启后,选择2.6.35的内核,会出现:

1, 问题:
— Boot args (cat /proc/cmdline)
— Check rootdelay= (did the system wait long enough?)
— Check root= (did the system wait for the right device?)
— Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/disk/by-uuid/xxxxxxxxx does not exist. Dropping to a shell!


解决办法:
输入reboot,选择以前的内核版本进入:
打开终端,输入如下命令,打开grub配置文件:

$ sudo gedit /etc/default/grub

将配置文件里的==GRUB_DISABLE_LINUX_UUID=true==的注释去掉
更新grub,重启

$ sudo update-grub
$ sudo reboot


问题2
进入2.6.35,可能会出现下面的问题,oh,my god!!!(又有问题)
ALERT! /dev/sda1 does not exist . Dropping to a shell!
这是因为硬盘驱动没有配置好而造成的。需要配置==SCSI、PCI-X、Fusion-MPT驱动,需要在响应的驱动选项里将[M]设置为[*]==,因为硬盘驱动是在系统开机的时候加载,所以不能以模块形式加载。


解决办法
so,从第4步重新开始:
再加上
Device Drivers —>SCSI device support —>将里面的[M]缓存[*],
Device Drivers —>Fusion MPT device support —>将里面的[M]缓存[*]
再执行
5,6,7…

生活就是遇到问题解决问题,再遇到问题,再解决问题,加油~~~

http://www.cnblogs.com/liuwu265/p/4229656.html
http://www.cnblogs.com/liuwu265/p/4228027.html

http://www.xf5000.com/2016/12/20/ubuntu-16-04-内核降级/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值