Мое встроенное устройство ARM оснащено 16-битным ЖК-дисплеем Linux с кадровым буфером 800x480, который необходимо дважды буферизовать вручную. На данный момент я просто использую memcpy()
для записи двойного буфера в фреймбуфер, что ужасно медленно. Цикл while(1){memcpy(lfb,dbuf)}
максимально загружает ЦП на 100% и обновляет примерно со скоростью 40 кадров в секунду.
Устройство ARM, которое я использую, и ядро Linux поддерживают копирование памяти в память DMA, но мне трудно понять, как я могу получить к этому доступ в программе пользовательского пространства.
Кажется, мне нужно использовать linux/dmaengine.h
и dma_async_memcpy_buf_to_buf()
, но оказывается, что они доступны только внутри ядра?