требуется реализоывать следующий драйвер: по внешнему прерыванию считывается 16 байт данных по spi(обязательно с использованием DMA) иданные складываются в кольцевой буфер в самом драйвере. Пользовательское приложение должно раз в 100мс считывать из буфера блок данных, такого размера, чтобы обеспечить "непрерывность" данных в буфере. При написании руководствуюсь книгой "Linux device drivers 3rd" но никак не пойму как проще реализовать сам буфер и механизм считывания куска данных(не всего буфера, а только данных фиксированного размера, причём с того места где остановились в прошлый раз). В книге написано что можно сделать так:
char *buf; buf = kmalloc(BUF_LEN, GFP_DMA);
но как фисать в такой буфер по кольцу(при достижении конца буфера записывать в начало)? и как потом считывать данные не всего буфера целиком, а кусками, запомитная место последнего чтения.
|