Tôi đang viết trình điều khiển PCIe cho Linux, hiện không có DMA và cần biết cách đọc và ghi vào thiết bị PCIe sau khi được kích hoạt từ không gian người dùng.Trình điều khiển PCIe - Cách không gian người dùng truy cập vào nó?
Trong tài xế tôi làm những điều cơ bản trong thăm dò():
pci_enable_device();
pci_request_regions();
pci_iomap();
Nhưng sau đó làm thế nào để truy cập vào bộ nhớ này từ không gian người sử dụng để đọc và viết? Tôi có thêm hoạt động tập tin vào trình điều khiển PCIe của mình không? Bộ nhớ từ pci_iomap có hiển thị một số nơi mà mã vùng người dùng có thể gọi:
open('mapped memory location');
mmap(...);
Nếu vậy thì vị trí là gì?
Lưu ý: thiết bị PCIe sẽ không cắm vào bất kỳ hệ thống con Linux như âm thanh, Ethernet vv
Không chắc đó có phải là cách được khuyến nghị để thực hiện mọi thứ hay không, nhưng trình điều khiển hạt nhân khác phơi bày các thiết bị ảo như '/ dev/vboxnetctl', mà tôi cho rằng bạn có thể đưa ra lệnh. Tôi không chắc chắn rằng hạt nhân Linux sẽ cho phép bất kỳ chương trình không gian người dùng để đọc/ghi vào một thiết bị PCIe willy-nilly, có vẻ như nó có thể nguy hiểm. –
Tôi cũng đang xem xét điều đó. Có điều gì tôi cần làm để thiết bị của tôi hiển thị ở đó không? Ví dụ: tôi thực hiện cuộc gọi API nào trong trình điều khiển của mình? – user2205930
Có lẽ hãy xem mã nguồn trình điều khiển VirtualBox để biết các ý tưởng. –