ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

重新加载网卡默认驱动

2021-08-12 03:00:09  阅读:214  来源: 互联网

标签:sys bdf driver 默认 echo 网卡 IFC fi 加载


shell

#!/bin/bash

N3=enp134s0f0
N3=0000:86:00.0
N6=enp134s0f3
N6=86:00.3

function get_nic_bdf(){
  IFC=$1
  # echo "Load driver for interface: $IFC"
  ls /sys/class/net/$IFC/device > /dev/null
  if [ $? -ne 0 ]; then
    echo "No interface: $IFC. Need to provide the PCI address for $IFC.";
    return 1
  fi
  bdf=`ls /sys/class/net/$IFC/device -l | awk -F'/' '{print $9}'`
  echo $bdf
}



function get_nic_bdf(){
  IFC=$1
  # echo "Load driver for interface: $IFC"
  ls /sys/class/net/$IFC/device > /dev/null
  if [ $? -ne 0 ]; then
    echo "No interface: $IFC. Need to provide the PCI address for $IFC.";
    return 1
  fi
  bdf=`ls /sys/class/net/$IFC/device -l | awk -F'/' '{print $9}'`
  echo $bdf
}


function load_driver(){
  addr=$1
  bdf=""
  if [[ $addr =~ ^0{4}:[0-9a-f]{2}:[0-9a-f]{2}\.[0-9]$ ]]; then
    bdf=$1
    echo "load driver for PCI device: $addr"
  elif [[ $addr =~ ^[0-9a-f]{2}:[0-9a-f]{2}\.[0-9]$ ]]; then
    bdf=0000:$1
    echo "load driver for PCI device: $addr"
  fi
  if [ -z "$bdf" ]; then
    IFC=$1
    echo "Load driver for interface: $IFC"
    ls /sys/class/net/$IFC/device > /dev/null
    if [ $? -ne 0 ]; then
      echo "No BDF found for interface: $IFC, let's guess from the name."
      if [[ $IFC =~ ^.*p[0-9]{1,3}s[0-9]{1,3}f[0-9]$ ]]; then
        bdf=${IFC#*p}
        b=${bdf%%s*}
        b=`printf '%0.2x\n' $b`
        s=${bdf%%f*}
        s=${s##*s}
        s=`printf '%0.2x\n' $s`
        f=${bdf##*f}
        bdf="0000:$b:$s.$f"
        echo "Guess interface: $IFC PCI address is $bdf"
      else
        echo "No interface: $IFC. Need to provide the PCI address for $IFC.";
        return 1
      fi
    else
      bdf=`ls /sys/class/net/$IFC/device -l | awk -F'/' '{print $9}'`
    fi
  fi
  path=/sys/bus/pci/devices/$bdf
  VDID=`lspci -nnv |grep ^${bdf#*:} | grep -E -o '[0-9a-f]{4}:[0-9a-f]{4}'`
  DID=${VDID#*:}
  VID=${VDID%:*}
  driver=$(grep "v0000${VID}d0000${DID}" /lib/modules/$(uname -r)/modules.alias |awk '{print $3}')
  cdriver=`ls /sys/bus/pci/devices/0000:88:00.0/driver -l`
  if [ $? -eq 0 ]; then
    cdriver=${cdriver##*/}
    # if [ "$driver" == "$cdriver" ]; then
    #   echo "Driver is $driver, No need to reload, exit."
    #   return 0
    # fi
    if [ -n "$cdriver" ]; then
      echo "Unload $bdf driver: $cdriver"
      echo "echo $bdf | sudo tee /sys/bus/pci/drivers/$cdriver/unbind"
      echo "$bdf" | sudo tee /sys/bus/pci/drivers/$cdriver/unbind
      sleep 1
    fi
  fi
  echo "echo \"$VID $DID\" | sudo tee /sys/bus/pci/drivers/$driver/new_id"
  echo "$VID $DID" | sudo tee /sys/bus/pci/drivers/$driver/new_id
  echo "echo \"${bdf}\" > /sys/bus/pci/drivers/$driver/bind"
  echo ${bdf} > /sys/bus/pci/drivers/$driver/bind
  ls -d /sys/bus/pci/drivers/$driver/$bdf
  if [ -f "${path}/driver_override" ]; then
    echo "echo $driver >  ${path}/driver_override"
    echo "$driver" > ${path}/driver_override
  fi

  ls -d /sys/bus/pci/drivers/$driver/$bdf
  if [ $? -ne 0 ]; then echo "Bind $driver for $bdf failed"; fi
  cdriver=`ls /sys/bus/pci/devices/0000:88:00.0/driver -l`
  if [ $? -eq 0 ]; then
    cdriver=${cdriver##*/}
    if [ "$driver" == "$cdriver" ]; then
      echo "Load driver: $driver for $bdf successfully."
    fi
  fi
  echo "$bdf, $driver, $VDID"
  echo ""
}


load_driver $N3

load_driver $N6

 

标签:sys,bdf,driver,默认,echo,网卡,IFC,fi,加载
来源: https://www.cnblogs.com/shaohef/p/15130951.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有