当前位置:首页 > linux教程 > 列表

linux 编译内核时网卡驱动丢失如何解决

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-29 13:35:31 浏览: 评论:0 

Linux在编译内核期间遇到了网卡驱动丢失问题,看看下面我是如何把网卡找回的,有出现类似问题的朋友可以参考一下,我的系统 OS version:Centos 5.9 kernel:2.6.18-402 更新内核版本:2.6.20.

由于 yum 里面的内核头文件和卡发包并没有过多的源码 .c 文件,所以只能从 www.kernel.org 下载相近的版本,有人肯定说了下你还不下个最新的内核版本,答:如内核版本跨度比较大,本人担心会出现各种问题,很多老的编译选项新版内核不支持.

首先先下载 原系统的 开发包和头文件:

  1. shell $> yum install kernel-devel kernel-headers 
  2. 解压 2.6.20 内核压缩包,开始编译内核 
  3. shell $> mv linux-2.6.20.tar.bz2 /usr/src/ 
  4. shell $> cd /usr/src/ 
  5. shell $> tar jxvf linux-2.6.20.tar.bz2 
  6. shell $> cd linux-2.6.20 
  7. # 修改源码 更改自己需要的,我修改了 tun 相关的 源码文件。 
  8. shell $> make mrproper 
  9. # 选择需要的选项和修改的选项,删除多余的选项 
  10. shell $> make menuconfig 
  11. shell $> make -j 12 
  12. shell $> make modules_install 
  13. shell $> make install 
  14.  
  15. # 修改 grub.conf 用新内核启动后发现网卡驱动并未发现!但是驱动加载了 
  16. 2.6.20 shell $> lsmod |grep tg3 
  17. # 查看日志: 
  18. 2.6.20 shell $> vim /var/log/message 
  19. # 查找tg3 相关日志: 
  20.  
  21. Feb 26 11:02:01 localhost kernel: input: PC Speaker as /class/input/input1 
  22. Feb 26 11:02:01 localhost kernel: tg3: Unknown symbol pci_channel_offline 
  23. Feb 26 11:02:01 localhost kernel: intel_rng: Firmware space is locked read-only. If you can't or 
  24. Feb 26 11:02:01 localhost kernel: intel_rng: don't want to disable this in firmware setup, and if 
  25. Feb 26 11:02:01 localhost kernel: intel_rng: you are certain that your system has a functional 
  26. Feb 26 11:02:01 localhost kernel: intel_rng: RNG, try using the 'no_fwh_detect' option.  
  27.  
  28. # 看到了 pci_channel_offline 
  29. # 下载对应网卡的驱动,编译安装看是否有错: 
  30. shell $> wget http://www.broadcom.com/support/license.php?file=570x/linux-3.136h.zip 
  31. shell $> reboot 
  32. 2.6.20 shell $> unzip linux-3.137h.zip 
  33. 2.6.20 shell $> tar zxvf tg3-3.136h.tar.gz 
  34. 2.6.20 shell $> cd tg3-3.136h 
  35. 2.6.20 shell $> make 
  36. # 并没有报错,但是有警告: 
  37.  
  38. sh makeflags.sh /lib/modules/2.6.20/source  > tg3_flags.h 
  39. make -C /lib/modules/2.6.20/build SUBDIRS=/data1/software/tg3-3.136h modules 
  40. make[1]: Entering directory `/data1/software/linux-2.6.20' 
  41.   CC [M]  /data1/software/tg3-3.136h/tg3.o 
  42. /data1/software/tg3-3.136h/tg3.c: In function ‘tg3_ape_lock’: 
  43. /data1/software/tg3-3.136h/tg3.c:845: 警告:隐式声明函数 ‘pci_channel_offline’ 
  44.   Building modules, stage 2. 
  45.   MODPOST 1 modules 
  46. WARNING: "pci_channel_offline" [/data1/software/tg3-3.136h/tg3.ko] undefined! 
  47.   CC      /data1/software/tg3-3.136h/tg3.mod.o 
  48.   LD [M]  /data1/software/tg3-3.136h/tg3.ko 
  49. make[1]: Leaving directory `/data1/software/linux-2.6.20'  
  50.  
  51. # 按照常规,警告我们是可以忽略的,那么我们更新这个驱动应该就没问题了,我跟你想的一样可是他还是有问题的 
  52. 2.6.20 shell $> make install 
  53. 2.6.20 shell $> rmmod tg3 
  54. 2.6.20 shell $> modprobe tg3 
  55. # 还是报错了,看日志还是 Unknown symbol pci_channel_offline 
  56. # 然后我就想 ,那我在老内核里编译看出错吗?结果在老内核里没有报错,我就在看老内核里 的 pci.h 文件,找到了 pci_channel_offline 方法: 
  57.  
  58. static inline int pci_channel_offline(struct pci_dev *pdev) 
  59.         return (pdev->error_state != pci_channel_io_normal); 
  60.  
  61. # 那么好,我把这段 复制到 2.6.20 内核里的 pci.h 里面 
  62. 2.6.20 shell $> vim /usr/src/linux-2.6.20/include/linux/pci.h 
  63. # 加在 183行下面,在从新编译 网卡驱动 
  64. 2.6.20 shell $> make clean 
  65. 2.6.20 shell $> make 
  66. # 这次 make 没错了 
  67. 2.6.20 shell $> make install 
  68. 2.6.20 shell $> rmmod tg3 
  69. 2.6.20 shell $> modprobe tg3 
  70. # 重启网卡 
  71. 2.6.20 shell $> /etc/init.d/network restart 
  72. //phpfensi.com 
  73. # 至此解决! 

Linux 内核编译,解决网卡驱动缺少的问题.

>//Linux 内核编译,解决网卡驱动缺少的问题,使用更新的内核来完善驱动.

准备工作:整理出系统硬件、文件系统类型、网络协议.

  1. uname -r //查看系统版本号,如果系统与编译的内核一样,需要将/lib/modules 下内容备份,因为将来make modules-install步骤会覆盖整个路径下的内容. 
  2.  
  3. {下载linux内核,地址为:http://www.kernel.org/pub/linux/kernel/,假设名称为linux-x-y-z.tar.gz. 
  4.  
  5. 如果内核已经安装,在/usr/src/目录有linux子目录,在光驱中找到kernel-source-2.xx.xx.rpm文件,如RedHat linuxde RPm目录,是/redhat/RPMS/目录,使用rpm -ivh kernel-source-2.xx.xx.rpm安装内核} 
  6.  
  7. cd /usr/src/linux //清除编译内核时残留的.o文件以及不必要的关联 
  8.  
  9. make mrproper   //如果你是下载的内核代码,并且是第一次编译,就没有必要执行这一个步骤 
  10. make xconfig //图形界面下使用,配置内核 
  11. {make menyconfig //字符界面下使用} 
  12. make dep //设置关联文件 
  13. make clean //清理不必要的文件 
  14. make bzImage // 编译大内核(比如需要SCSI支持) 
  15. {make zImage//编译校内核} 
  16. make modules //编译模块,可加载模块,内核选项中为M的选项,编译时间跟M选项的数量有关 
  17. make modules_install  //把编译好的modules拷贝到/lib/modules下 
  18.  
  19. A:mv /usr/src/linuxX.X.X/system.map /boot/system.map 
  20. B:mv /usr/src/linuxX.X.X/archi/i386/boot/bzImage /boot/vmlinuz //使用新内核 
  21. /etc/lilo.conf //修改/etc/lilo.conf 加一个启动选项,使用新内核bzimage or zimage启动 
  22.  
  23. boot=/dev/hda 
  24. map=/boot/map 
  25. install=/boot/boot.b 
  26. prompt 
  27. timeout=50 
  28. linear 
  29. default=linux-new    ### 告诉lilo缺省使用新内核启动linux ### 
  30. append="mem=256M" 
  31.  
  32. image=/boot/vmlinuz-2.2.14-5.0 
  33.         label=linux 
  34.         read-only 
  35.         root=/dev/hda5 
  36.  
  37. image=/boot/bzImage(zImage) 
  38.         label=linux-new 
  39.         read-only 
  40.         root=/dev/hda5 
  41. //方法二:修改grup.conf文件 
  42. A:mv /usr/src/linuxX.X.X/system.map /boot/system.map 
  43. B:mv /usr/src/linuxX.X.X/archi/i386/boot/bzimage /boot/vmlinuz   //更换内核 
  44.  
  45. //修改grub ,/etc/grup.conf 
  46. image=/boot/vmlinuz-2.2.14-5.0 
  47.         label=linux 
  48.         read-only 
  49.         root=/dev/hda5 
  50.  
  51. image=/boot/bzImage(zImage) 
  52.         label=linux-new 
  53.         read-only 
  54.         root=/dev/hda5 
  55.    
  56. //方法三:修改启动配置文件  /boot/grub/grub.conf 
  57. /*格式如下: 
  58. title 显示在启动菜单上的名称 
  59. root 根文件系统挂载分区 
  60. kernel 压缩过的内核文件名 
  61. initrd 根文件系统文件名 
  62.               如: 
  63.               title My new kernel 
  64.               root (hd0,2) 
  65.               kernel /boot/vmlinuz-x.y.z 
  66.               initrd /boot/initrd-x.y.z.img 
  67. */ 
  68.  
  69. //mkinitrd initrd-内核版本号 内核版本号命令重新生成ram磁盘文件 
  70. mkinitrd initrd-2.2.14-5.0 2.2.14-5.0 
  71. initrd=/boot/initrd-2.2.14-5.0 //把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件

Tags: linux编译内核 linux驱动丢失

分享到: