2014-04-22 4 views
0

FPGA 카드를 설치하고 작동하는 PCI 드라이버가 있습니다. 그러나 우리는 시스템을 다시 부팅하지 않고이 드라이버를 언로드해야합니다.PCI 드라이버를 여러 번로드하고 언로드하면/sys/bus/pci/devices/xxx 디렉토리가 사라집니다.

재부팅하지 않고 드라이버를 다시 시작하면 드라이버가 다시 설치됩니다. 나는이 프로세스 (설치/제거)를 여러 번 수행 할 때 드라이버의 5 번째 언로드에서 장치와 관련된 디렉토리가 사라지는 것을 발견했습니다.

lspci 명령은 잘못된 링크로 인해 더 이상 내 장치를 찾을 수 없습니다. 다시 표시하려면 장치 디렉터리 (/sys/bus/pci/devices/00000:04:00.0)를 얻으려면 재부팅해야합니다.

몇 가지 실험을하고 최소한의 드라이버로 줄이면 나는 pci_probe_method에있는 pci_enable_device(..) 함수를 호출하지 않으면 오류없이 여러 번 드라이버를 설치/제거 할 수 있다는 것을 발견했습니다.

물론이 장치를 사용하여 작업을 수행하기 전에이 메서드를 호출해야하지만이 메서드는 문제를 일으키는 복잡한 초기화 중 일부가 아닌지 확인하고 싶습니다.

pci_remove_method()에서 pci_disable_device()으로 전화를 걸 었음을 확인했습니다. PCI 장치를 무기한으로 활성화 및 비활성화 할 수 있어야합니다. 무슨 일이 일어나고 있는지 알아내는 데 도움이 될 것입니다.

답변

0

이 문제에 대한 실제 해결책은 내가 pci_dev_put (..)과 관련이없는 호출을 제거하는 것이 었습니다. 나는 질문을 제출할 때 전에 이것을 알아 채지 못했습니다. 이것은이 드라이버가이 장치를 발견하기 위해 pci_probe() 메소드를 사용하지 않을 때부터 남은 것입니다. 따라서 exit 루틴에서이 호출을 실행하면 5 회의 호출 후에이 장치의 구조가 사라집니다. 그래서 지금이 문제는 해결되었습니다.