Implementando o driver de dispositivo PCIe Linux (deseja acessar os registros da minha placa no driver do kernel)
Estou escrevendo um driver de dispositivo para acessar a memória em um FPGA em uma placa PCIe.
O cartão é inicializado e é sondado / encontrado: -
/ proc / iomem
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
84000000-840fffff : 0000:03:00.0
Então, lendo ldd / etc, eu codifiquei uma chamada pararequest_mem_region
no80000000
e solicitou um ponteiro para ele viaioremap_nocache
1) Precisorequest_mem_region
bem como umioremap_nocache
, eu não posso usar apenas o último?
/ proc / iomem Depoisinsmod
meu driver de dispositivo: -
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
80000000-8003ffff : fp2
84000000-840fffff : 0000:03:00.0
2) Não parece certo para mim ...?
Enfim, leituras não funcionam(não é codificado como abaixo, possui verificações etc.): -
#define BAR_ADDR 0x80000000
void *base = ioremap_nocache(BAR_ADDR, 0x40000);
void *address = base + KNOWN_REG_LOCATION;
int data = ioread32(address);
printk("fp2: address:0x%08x, data:0x%08x\n", address, data);
Saídas: -
address:0xfd500000, data:0xffffffff
Eu posso ler ox80000000+KNOWN_REG_LOCATION
do espaço de usuário do mmap.
3) eu tentei__raw_readl
/readl
sem sorte também.
4) Posso apenas ler no endereço atualmente mapeadox80000000
?