Como o Physical Memoy é mapeado no espaço do Kernal?

2

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
  1. 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.

  2. 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.

por Micky 15.09.2017 / 13:36

1 resposta

1

Eu usei com sucesso o argumento do kernel mem=48M (como um exemplo) para limitar a quantidade de RAM física que o kernel usa. Você pode usar o restante da RAM no driver do kernel, onde precisará mapear a memória.

Veja a documentação do kernel em Documentation/memory.txt

    
por 01.11.2017 / 16:08