Здравствуйте, reider, Вы писали:
R>Данный драйвер реализует несколько буферов DMA, в которые внешнее устройство пишет по PCI. Как только буфер наполнен, оно шлёт сообщение (прерывание). Драйвер ловит это прерывание и сообщает об этом программе работающей в user mode. Программа должна считывать данные с dma буферов драйвера и записывает в RAM. ОС Debian Linux 11
Ну логично было бы, чтобы драйвер формировал очередь уже заполненных буферов, а user space отрывал бы устройство, и read-ом содержимое этих буферов из устройства вычитывал.
При этом если данные с устройства, логически, представляют собой просто поток байтов (т.е., если пришло 100 байтов, то не важно, как они пришли, одним куском, или 50+50), то отдавать очередному read-у все, что уже накопилось и влезает в предоставленный буфер. А если это поток не байтов, а "сообщений", т.е., сохранение границ между последовательными блоками важно, то отдавать за раз одно целое сообщение, и возвращать ошибку, если оно не лезет в предоставленный буфер