Я пытаюсь кросс-скомпилировать драйвер JetSttream для соединения FPGA через PCIe с процессором ARM (hf) Cortex A (на модуле NVIDIA TK1).
На странице github упоминается, что она была портирована на ядро Linux версии 3.10, которая также является версией ядра Linux 4 Tegra (L4T).
Реализация функции драйвера mmap, по-видимому, использует конкретные функции ядра x86 для установки некоторых атрибутов кэша: set_memory_uc и set_memory_wb .
Вот исходный код mmap, упомянутые функции используются внизу:
static int mmap(struct file* file, struct vm_area_struct* vma) {
int ret;
int slot = (uintptr_t)PDE_DATA(__parent(__parent(file->f_path.dentry))->d_inode);
int channel = (uintptr_t)proc_get_parent_data(file->f_inode);
int bufferNo = (uintptr_t)PDE_DATA(file->f_inode);
struct fpga_board* board = &FPCI3.boards[slot];
struct buffer* buffer = &board->channel[channel].buffer[bufferNo];
//printk("DATA Board id %d:%d:%d\n", slot, channel, buffer);
vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP;
//vma->vm_page_prot = 0;
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
//return ENOMEM;
set_memory_uc((uintptr_t)buffer->memoryAddress, getPageCount(BUF_SIZE));
ret=dma_mmap_attrs(&board->pcidev->dev, vma, buffer->memoryAddress, buffer->dmaAddress, BUF_SIZE, 0);
set_memory_wb((uintptr_t)buffer->memoryAddress, getPageCount(BUF_SIZE));
return ret;
}
(Как) я могу воспроизвести предполагаемое поведение для моего процессора ARM?
Источник
Редактировать: здесь упоминается, что они относятся к x86, и, конечно, он не компилируется из-за их отсутствия: Ссылка