Recentemente encontrei esse problema ao configurar minha xen box com vários dispositivos usb. Eu queria que um fosse usado pelo Dom-0, e o outro a ser usado por uma VM, então eu precisava que o dispositivo estivesse disponível para o xen-pciback. No entanto, o driver usb foi cumprido no meu kernel, então eu não poderia simplesmente colocar o driver na lista negra. Minha solução foi criar um script initramfs personalizado que desassocie a porta pci específica no início do processo de inicialização.
Este é o Ubuntu 2016.04, mas deve funcionar em versões anteriores.
Existem três arquivos envolvidos. Eu os nomeei para o meu caso de uso específico, mas ymmv:
O primeiro arquivo, chamado /etc/unbindpci
file, que é um simples csv do número do dispositivo pci e do driver (configure conforme necessário aqui):
0000:08:00.0,xhci_hcd
0000:03:00.0,radeon
Segundo arquivo /etc/initramfs-tools/hooks/xenfiles
, que copia a configuração acima no initramfs.
#! /bin/bash
if [ -f /etc/unbindpci ]; then
cp -pP /etc/unbindpci $DESTDIR/etc/unbindpci
fi
Terceiro arquivo é o que funciona no momento da inicialização, eu coloquei em /etc/initramfs-tools/scripts/init-top/unbind-early-pci
:
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
# This only executes if in a xen Dom-0.
# Edit if that's not your use case!
if [ -f /sys/hypervisor/uuid -a -f /etc/unbindpci ]; then
if [ $(cat /sys/hypervisor/uuid) = "00000000-0000-0000-0000-000000000000" ]; then
echo "Unbinding pci ports..."
IFS=,
while read addr driver; do
if [ -f /sys/bus/pci/drivers/$driver/unbind ]; then
echo "Unbinding $addr, device $driver"
echo $addr > /sys/bus/pci/drivers/$driver/unbind
fi
done < /etc/unbindpci
fi
fi
Por fim, execute update-initramfs -k all -u
e reinicialize.
Eu poderia incluir suporte para comentários no arquivo de configuração, e há muita limpeza para fazer aqui, mas funciona para mim.