Como um programa verifica se está sendo executado em um RPi de 512 MB?

12

Os RPIs de 512 MB têm uma revisão diferente da placa?

ou seja, você pode apenas olhar para a revisão /proc/cpuinfopara determinar se você tem um RPi de 512 MB?

Caso contrário, qual é a maneira mais fácil de verificar?

John La Rooy
fonte
Observe que, em última análise, você não pode fazer muito com o conhecimento, a menos que esteja escrevendo uma ferramenta para alterar os arquivos de inicialização, ou simplesmente queira informar ao usuário o que eles possuem ou se a configuração atual de inicialização está tirando o máximo proveito do hardware. Um programa de aplicativo no ARM no kernel do Linux não pode realmente usar a memória extra, a menos que tenha sido concedida pelo código de inicialização da GPU.
Chris Stratton

Respostas:

10

Como você disse, o cat /proc/cpuinfo | grep Revisioncomando fornecerá a revisão do quadro. Observe que a revisão é um valor hexadecimal. Para exibir o equivalente decimal, execute este comando printf '%d\n' 0x#, onde #é o valor hexadecimal exibido com o comando anterior.

De acordo com a tabela a seguir, os códigos 13 , 14 e 15 representam a placa de 512 MB .

Model and revision                                          Decimal code(s)     Hexadecimal equivalent
Model B Revision 1.0                                        2                   0x2
Model B Revision 1.0 + ECN0001 (no fuses, D14 removed)      3                   0x3
Model B Revision 2.0                                        4, 5, 6             0x4, 0x5, 0x6
Model B Revision 2.0 (512 MB)                               13, 14, 15          0xd, 0xe, 0xf

Fonte: documentação da comunidade Element14

Morgan Courbet
fonte
1
Lembre-se de que isso pode mudar no futuro. Tenho certeza de que os códigos 13,14,15 sempre significam que você tem 512 MB de RAM, mas pode haver outros. E não é uma boa idéia supor que todos os códigos> 13 tenham 512 MB, pois simplesmente não sabemos se isso será verdade. Portanto, não deve ser usado em scripts etc.
Krzysztof Adamski
1
Meu Pi veio em uma caixa com um adesivo dizendo "512MB RAM" em letras grandes, mas /proc/cpuinfodiz Revision : 0005. Estou inicializando a partir de uma imagem 2012-09-18-wheezy-raspbian.zipdehttp://www.raspberrypi.org/downloads
RedGrittyBrick 21/10
@RedGrittyBrick: A mesma coisa para mim. Acabei de receber meu Pi ontem e, de acordo com o blog oficial , tenho uma versão de 512MB de RAM (posso ver "4G" no chip). Mas cat /proc/cpuinforetorna a revisão 5. A revisão não está escrita no SoC? O Raspian precisa de uma atualização para "reconhecer" a versão de 512 MB de RAM?
Morgan Courbet
@ Morgan: Como o seu, o chip superior (RAM) da CPU no meu Pi está marcado como Samsung K4P4G324EB e as informações da Samsung confirmam que isso é "128Mx32" = 4 GBit = 512 MB. Eu fiz ler um artigo em algum fórum que sugeriu uma atualização de firmware é necessária (acho que isso é um dos arquivos no cartão SD)
RedGrittyBrick
@RedGrittyBrick: Eu tenho agora Revision: 000f. Provavelmente um recente dist-upgrade.
Morgan Courbet
7

Em um sistema operacional moderno como o Linux, o que você realmente precisa verificar é quanta memória foi disponibilizada para uso geral; que pode ser menor que o total instalado fisicamente. Por exemplo, um pi de 512 MB executando uma instalação destinada a um de 256 MB não disponibilizaria essa memória para você.

Então, no pi, há um outro problema da divisão da memória CPU vs. GPU - algo substancialmente menor do que a memória atual estaria disponível para o uso da CPU ARM no momento em que o Linux inicializar, já que o processo de inicialização da GPU já reivindicou uma quantidade substancial, conforme determinado o arquivo start.elf usado.

Para responder à pergunta direta, a primeira linha /proc/meminfoou o freecomando deve informar a quantidade de memória física disponível para o Linux em geral.

A quantidade de memória disponível para um determinado aplicativo é novamente mais complicada - o kernel, buffers e outros aplicativos reivindicam memória. E embora talvez não seja comumente usado com um cartão SD como o único "disco", uma partição de troca pode fazer com que a memória virtual disponível exceda a RAM física.

Chris Stratton
fonte