centos-rhel服务器相关 / 未分类 · 2012年2月24日

Broadcom 网卡补丁

关于bmc的57xx系列网卡芯片在访问流量较大时网络出现不稳定
这是我们部门 的高手的shell, 对付Broadcom 网卡有问题,老是掉线的
#!/bin/bash
TITLE=`ethtool -i eth0 | sed -n '2p' | awk -F : '{print $2}'`
TITLEONE=`ethtool -i eth0 | sed -n '1p' | awk -F : '{print $2}'`
mak () {
tar zxf netxtreme2-7.0.36.tar.gz
cd netxtreme2-7.0.36
make
make install
rmmod bnx2
modprobe bnx2
cd ../
rm -rf netxtreme2-7.0.36
TITLE=`ethtool -i eth0 | sed -n '2p' | awk -F : '{print $2}'`
TITLEONE=`ethtool -i eth0 | sed -n '1p' | awk -F : '{print $2}'`
if [ $TITLE = "2.1.12b" ] && [ $TITLEONE = "bnx2" ] ;then
echo "update success"
fi
}
if [ $TITLEONE = "bnx2" ] ;then
yum -y install kernel-devel
mak
else exit 1
fi

##最后机子还要 reboot
####
# ethtool -i eth0 得到下面的信息
# driver: bnx2
# version: 2.1.12b
# ……
#…….
#
# exit 1 表示程序不正常结束,exit 0 表示正常结束..
其它
查看网卡型号 也可以这样
dmegs |less
##search
/eth0
ethtool
命令描述:
ethtool 是用于查询及设置网卡参数的命令。
使用概要:
ethtool ethx //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0、eth1等等
ethtool –h //显示ethtool的命令帮助(help)
ethtool –i ethX //查询ethX网口的相关信息
ethtool –d ethX //查询ethX网口注册性信息
ethtool –r ethX //重置ethX网口到自适应模式
ethtool –S ethX //查询ethX网口收发包统计
ethtool –s ethX [speed 10|100|1000] [duplex half|full] [autoneg on|off] //设置网口速率10/100/1000M、设置网口半/全双工、设置网口是否自协商
使用举例:
1)[root@linux /]# ethtool eth1
Settings for eth1:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: umbg
Wake-on: d
Link detected: yes
2)[root@linux /]# ethtool -i eth1
driver: e1000
version: 5.0.43-k1
firmware-version: N/A
bus-info: 06:08.1
3)[root@linux /]# ethtool -S eth1
NIC statistics:
rx_packets: 58068300
tx_packets: 87124083
rx_bytes: 1589713008
tx_bytes: 2165825901
rx_errors: 0
tx_errors: 0
rx_dropped: 0
tx_dropped: 0
multicast: 0
collisions: 0
rx_length_errors: 0
rx_over_errors: 0
rx_crc_errors: 0
rx_frame_errors: 0
rx_fifo_errors: 0
rx_missed_errors: 0
tx_aborted_errors: 0
tx_carrier_errors: 0
tx_fifo_errors: 0
tx_heartbeat_errors: 0
tx_window_errors: 0
4)[root@linux /]# ethtool -s eth1 autoneg off speed 100 duplex full
相关参考:
1)[root@linux /]# which ethtool //查询 ethtool 存放的路径
/sbin/ethtool
2)[root@linux /]# rpm -qf /sbin/ethtool //查询 ethtool 的版本信息
ethtool-1.6-5
3)将 ethtool 设置永久保存在网络设备的方法
解决方法一:
ethtool 设置可通过 /etc/sysconfig/network-scripts/ifcfg-ethX 文件保存,从而在设备下次启动时激活选项。
例如:ethtool -s eth0 speed 100 duplex full autoneg off
此指令将eth0设备设置为全双工自适应,速度为100Mbs。若要eth0启动时设置这些参数, 修改文件/etc/sysconfig/network-scripts/ifcfg-eth0 ,添加如下一行:
ETHTOOL_OPTS=”speed 100 duplex full autoneg off”
解决方法二:
将ethtool设置写入/etc/rc.d/rc.local之中。
#######
linux modprobe命令参数及用法详解–linux加载模块命令
modprobe(module probe)
功能说明:自动处理可载入模块。
语  法:modprobe [-acdlrtvV][–help][模块文件][符号名称 = 符号值]
补充说明:modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。
 
insmod 与 modprobe 都是载入 kernel module,不过一般差别于 modprobe 能够处理 module 载入的相依问题。
比方你要载入 a module,但是 a module 要求系统先载入 b module 时,直接用 insmod 挂入通常都会出现错误讯息,不过 modprobe 倒是能够知道先载入 b module 后才载入 a module,如此相依性就会满足。
不过 modprobe 并不是大神,不会厉害到知道 module 之间的相依性为何,该程式是读取 /lib/modules/2.6.xx/modules.dep 档案得知相依性的。而该档案是透过 depmod 程式所建立。
补充说明:modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。
[举例]
*查看modules的配置文件:
$modprobe -c
这里,可以查看modules 的配置文件,比如模块的alias.html’ target=’_blank’>别名是什么等。会打印许多行信息,例如其中的一行会类似如下:
alias symbol:ieee80211_remove_wds_addr wlan
*列出内核中所有已经或者未挂载的所有模块:
$modprobe -l
这里,我们能查看到我们所需要的模块,然后根据我们的需要来挂载;其实modprobe -l 读取的模块列表就位于 /lib/modules/’uname -r’ 目录中;其中uname -r 是内核的版本.例如输出结果的其中一行是:
/lib/modules/2.6.27-7-generic/kernel/arch/x86/oprofile/oprofile.ko
*挂载vfat模块:
#modprobe vfat
这里,使用格式”modprobe 模块名”来挂载一个模块。挂载之后,用lsmod可以查看已经挂载的模块。模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀。
*移除已经加载的模块:
#modprobe -r 模块名
这里,移除已加载的模块,和rmmod 功能相同。注意:模块名是不能带有后缀的,我们通过modprobe -l 所看到的模块,都是带有.ko 或.o后缀.
与内核模块操作相关的命令还有:lsmod modinfo depmod rmmod inmod modprobe
 
modprobe 命令是根据depmod -a的输出/lib/modules/version/modules.dep来加载全部的所需要模块。
删除模块的命令是:modprobe -r filename
系统启动后,正常工作的模块都在/proc/modules文件中列出。使用lsmod命令也可显示相同内容。
在内核中有一个“Automatic kernel module loading”功能被编译到了内核中。当用户尝试打开某类型的文件时,内核会根据需要尝试加载相应的模块。/etc/modules.conf或 /etc/modprobe.conf文件是一个自动处理内核模块的控制文件。
参  数:
-a或–all  载入全部的模块。
-c或–show-conf  显示所有模块的设置信息。
-d或–debug  使用排错模式。
-l或–list  显示可用的模块。
-r或–remove  模块闲置不用时,即自动卸载模块。
-t或–type  指定模块类型。
-v或–verbose  执行时显示详细的信息。
-V或–version  显示版本信息。
-help  显示帮助。
http://www.linuxso.com/command/modprobe.html
###################
linux rmmod命令参数及用法详解–linux删除模块命令
rmmod(remove module)
功能说明:删除模块。
语  法:rmmod [-as][模块名称…]
补充说明:执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放如核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。
参  数:
-a  删除所有目前不需要的模块。
-s  把信息输出至syslog常驻服务,而非终端机界面。
与内核模块操作相关的命令还有:lsmod modinfo depmod rmmod inmod modprobe
范例1: 显示已安装的模块
root@linuxso.com:~# lsmod
Module Size Used by
cramfs 39042 1
nfsd 238935 11
lockd 64849 1 nfsd
nfs_acl 2245 1 nfsd
auth_rpcgss 33735 1 nfsd
sunrpc 193181 10 nfsd,lockd,nfs_acl,auth_rpcgss
exportfs 3437 1 nfsd
xt_TCPMSS 2931 0
xt_tcpmss 1197 0
xt_tcpudp 2011 0
iptable_mangle 2771 0
ip_tables 9991 1 iptable_mangle
x_tables 14299 4
……省略部分结果
pppoe 8943 0
pppox 2074 1 pppoe
binfmt_misc 6587 1
snd_ens1371 18814 0
gameport 9089 1 snd_ens1371
snd_ac97_codec 100646 1 snd_ens1371
ac97_bus 1002 1 snd_ac97_codec
snd_pcm_oss 35308 0
 
范例2:卸载模块
root@linuxso.com:~# rmmod -v pppoe //卸载模块pppoe
Checking ppoe for persistent data
范例3: 安装模块
root@linuxso.com:~# insmod -v pppoe >1.log //安装模块
root@linuxso.com:~# tail -b 30 1.log //显示文件信息
扩展阅读:rmmod: chdir(/lib/modules): No such file or directory 解决方法 资料整理 www.linuxso.com
必须创建/lib/modules/2.6.30.4这样一个空目录,否则不能卸载ko模块.
# rmmod nls_cp936
rmmod: chdir(/lib/modules): No such file or directory
但是这样倒是可以卸载nls_cp936,不过会一直有这样一个提示:
rmmod: module ‘nls_cp936’ not found
 
1.创建/lib/modules/2.6.30空目录就.
2.使用如下源码生成rmmod命令,就可以没有任何提示的卸载ko模块了[luther.gliethttp]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
const char *modname = argv[1];
int ret = -1;
int maxtry = 10;
while (maxtry– > 0) {
ret = delete_module(modname, O_NONBLOCK | O_EXCL);//系统调用sys_delete_module
if (ret < 0 && errno == EAGAIN)
usleep(500000);
else
break;
}
if (ret != 0)
printf(“Unable to unload driver module “%s”: %sn”,
modname, strerror(errno));
}
 
3.把生成的命令复制到文件系统
# arm-linux-gcc -static -o rmmod rmmod.c
# arm-linux-strip -s rmmod
# cp rmmod /nfs/
cp /nfs/rmmod /sbin
http://www.linuxso.com/command/rmmod.html
关于Linux网卡升级和安装问题http://www.diybl.com/course/6_system/linux/Linuxjs/20091211/184566.html