Eu preciso reservar um grande buffer de memória RAM fisicamente contígua do kernel e ser capaz de ler / escrever para esse endereço físico embutido.Eu tenho um total de 512MB de RAM, dos quais eu preciso reservar 300-400MB para o aplicativo .
Eu escrevi um driver uio como uma interface para acessar esta memória do espaço do usuário. Eu mapeei o endereço físico na árvore de dispositivos, como abaixo,
uio_mem: uiomem {
compatible = "ti,uio-module-drv";
mem = <0x8000000 0x17C00000>;
};
Mas não consigo acessar mais de 100MB de memória.
Abaixo está o meu mapeamento virtual,
Memory: 486136K/524288K available (6311K kernel code, 271K rwdata, 1948K rodata, 1024K init, 223K bss, 21768K reserved, 16384K cma-reserved, 0K highmem)
Virtual kernel memory layout:
vector : 0xffff0000 - 0xffff1000 ( 4 kB)
fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
vmalloc : 0xe0800000 - 0xff800000 ( 496 MB)
lowmem : 0xc0000000 - 0xe0000000 ( 512 MB)
pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
.text : 0xc0008000 - 0xc0910dc4 (9252 kB)
.init : 0xc0a00000 - 0xc0b00000 (1024 kB)
.data : 0xc0b00000 - 0xc0b43e10 ( 272 kB)
.bss : 0xc0b43e10 - 0xc0b7ba64 ( 224 kB) code here
alguém pode explicar em detalhes como este mapa de memória virtual é enquadrado para acessar a memória física de 512MB
Eu tenho séries de consultas,
O -
mapeamento do kernel começa em 0xc0b43e10 e termina em 0xffff1000 (quase 1 GB) .Mas eu tenho apenas 512 MB de RAM e como ele se encaixa neste mapeamento virtual.
-
Conseguirei acessar a memória física com endereço direto do espaço do usuário. Se sim, até quanto tamanho de memória eu posso acessar. E como saber disso.