Vous êtes ici : Accueil / Debian GNU/Linux / Système / Configuration / Réinitialiser un périphérique PCI sur Debian

Réinitialiser un périphérique PCI sur Debian

Par Pierre-Yves Landuré Dernière modification 28/10/2015 17:52

Dans certains cas, il peut être nécessaire de réinitialiser un périphérique PCI sans redémarrer le système. Ce guide présente une méthode de réinitialisation depuis la ligne de commande sous Debian.

Ce guide est testé sur:

  • Ubuntu 15.10 Wily Werewolf

Paramètres

Renseignez la chaîne de recherche permettant d'identifier le périphérique PCI dans le résultat de la commande lspci (ici pour les contrôleurs USB):

pciSearchString="USB controller"

Réinitialisation des périphériques

Détectez le proxy de commande (command ou sudo):

cmdProxy='command'
command type -f 'sudo' &>'/dev/null' && cmdProxy='sudo'

Détection des informations

Récupérez les identifiants PCI complets des périphériques:

pciIds="$(command lspci \
  | command egrep -i "${pciSearchString}" \
  | command cut -c -7)"

Identifiez les pilotes des périphériques:

declare -a pciInfos=()
for pciId in ${pciIds}; do
  pciInfos+=( "$(command lspci -v -s "${pciId}" \
    | command grep 'Kernel driver in use' \
    | command sed -e "s/^.*: /${pciId}|/")" )
done

Réinitialisation

Réinitialisez les périphériques en les déliant puis reliant à leur pilote (bind / unbind):

for pciInfo in "${pciInfos[@]}"; do
  pciId="${pciInfo%|*}"
longPciId="0000:${pciId}"
driver="${pciInfo#*|}" if [[ -e "/sys/bus/pci/drivers/${driver}/${longPciId}" ]]; then
echo "Unbinding ${pciId} from ${driver}"
echo " echo '${longPciId}' > '/sys/bus/pci/drivers/${driver}/unbind'"
echo "${longPciId}" | ${cmdProxy} tee "/sys/bus/pci/drivers/${driver}/unbind" > '/dev/null'
fi if [[ -n "${pciId}" && -e "/sys/bus/pci/drivers/${driver}/bind" ]]; then
echo "Binding ${pciId} to ${driver}"
echo " echo '${longPciId}' > '/sys/bus/pci/drivers/${driver}/bind'"
echo "${longPciId}" | ${cmdProxy} tee "/sys/bus/pci/drivers/${driver}/bind" > '/dev/null'
fi
done

Vérifiez la réinitialisation à l'aide de dmesg:

${cmdProxy} dmesg

Remerciements