리눅스 PCIe 드라이버를 수정하여 FPGA PCIe 코어와 함께 작동합니다. 내 드라이버 코드 내에서 PCIe 읽기 쓰기가 작동하도록하려면 pci_set_master (dev)를 사용하십시오.ISR 내에서 PCIe 읽기 쓰기
ARM DMA를 사용하는 대신 PCIe 전송을 수행하기 위해 altera SG-DMA를 사용하고 있습니다. 전송을 시작하려면 FPGA DMA에 활성화 비트를 기록해야합니다. 그것은 가능 비트 레지스터에 pcie write (barx, offset, data)를 수행함으로써 완벽하게 작동합니다.
문제는 PCIe FPGA DMA를 I/O 인터럽트가 발생할 때 시작해야하지만 인터럽트가 발생하면 ISR 내부에서 pcie 쓰기 (barx, 오프셋, 데이터)가 발생하므로이 문제가 발생합니다. 전체 리눅스가 거기에 매달린다.
누구나 전에 얼굴을 보았습니까? 도와주세요. 미리 감사드립니다.
감사합니다. 안녕하세요, 이미 문제를 발견했습니다. 실수로 드라이버에서 PCIe bar0 맵핑을 해제했기 때문입니다. 인터럽트가 발생하면 unmap bar0에 액세스하여 시스템 정지를 시도합니다. – Shahril