Como posso alterar a divisão da RAM?

23

Por padrão, o Pi é definido como uma divisão 192MiB: 64MiB RAM: VRAM. Como não usarei o Pi para fins gráficos, gostaria de alterar a divisão para alocar mais RAM normal para facilitar o uso da troca.

hifkanotiks
fonte
Há uma pergunta semelhante e uma resposta relevante aqui .
Jivings

Respostas:

16

Estas são as divisões de RAM e para que elas devem ser usadas.

  • 240/16 - Isso é melhor se você não estiver fazendo nada gráfico, por exemplo, se você estiver usando o Pi como servidor e não tiver GUI.
  • 224/32 - Isso provavelmente é melhor se você estiver usando o pi com um ambiente gráfico básico de área de trabalho, sem 3D.
  • 192/64 - O padrão, provavelmente o melhor de uso geral.
  • 128/128 - VRAM muito alto, apenas muito bom se você estiver executando uma tarefa intensamente gráfica.

Existem vários métodos pelos quais a divisão da RAM pode ser gerenciada:

Manualmente

Você pode alterar a divisão da RAM usando este método:

sudo cp /boot/arm[ram-split]_start.elf /boot/start.elf

onde [ram-split]é a quantidade de RAM a ser alocada para a CPU. Após uma reinicialização, o novo valor será aplicado.

rpi-update

O rpi-update do Hexxeh também suporta a alteração da divisão da RAM; você executaria rpi-update [ram-split]onde [ram-split]está a quantidade de RAM que deseja alocar para a CPU. Após uma reinicialização, a divisão será aplicada.

Ram Selector Script

A melhor maneira é provavelmente usar esse script select4.sh e selecionar a divisão de RAM apropriada. Após a reinicialização, a nova divisão será aplicada.

#!/bin/bash
##
## Raspberry Pi Memory Split Selector Script v4
## Author: SirLagz
## Website: http://sirlagz.net
##
## The purpose of this script is to make selecting the memory split
## on the RPi easy.
## Simply make this script executable if it's not already, move
## it to the directory with the elf files, and run it with ./select4.sh
## The menu should be pretty self explanatory.
##
cd /boot
clear
list=./*
b128det=0
b192det=0
b224det=0
b240det=0
bdefdet=0

for i in $list
do
    case $i in
        "./arm128_start.elf") b128det=1;;
        "./arm192_start.elf") b192det=1;;
        "./arm224_start.elf") b224det=1;;
        "./arm240_start.elf") b240det=1;;
        "./start.elf") bdefdet=1;;
    esac
done

if [[ "$b192det" == "$bdefdet" ]] ; then
    if cmp -s arm192_start.elf start.elf; then
        current=192
    fi
fi

if [[ "$b128det" == "$bdefdet" ]] ; then
    if cmp -s arm128_start.elf start.elf; then
        current=128
    fi
fi

if [[ "$b224det" == "$bdefdet" ]] ; then
    if cmp -s arm224_start.elf start.elf; then
        current=224
    fi
fi

if [[ "$b240det" == "$bdefdet" ]] ; then
    if cmp -s arm240_start.elf start.elf; then
        current=240
    fi
fi

declare -i vram
vram=256-$current
success=1
sysram=`awk '/MemTotal/ { printf("%.0f",$2/1024) }' /proc/meminfo`
echo "##################################"
echo "##      Raspberry Pi Memory     ##"
echo "##        Selector Script       ##"
echo "##################################"
echo "      Current Memory Split"
echo "        CPU $current/$vram VRAM"
echo "      Detected System RAM"
echo "          $sysram MB"
echo "##################################"
echo "1) Set CPU/VRAM split to 128/128"
echo "2) Set CPU/VRAM split to 192/64"
if [[ "$b240det" == 0 ]] ; then
echo "3) Set CPU/VRAM split to 240/16 (NOT DETECTED. DO NOT USE)"
else
echo "3) Set CPU/VRAM split to 240/16"
fi
if [[ "$b224det" == 1 ]] ; then
    echo "4) Set CPU/VRAM split to 224/32"
fi
echo "q) Quit"
echo "Enter Choice:";
read x
case $x in
1)
    rm start.elf && cp arm128_start.elf start.elf
    newram=128
;;
2)
    rm start.elf && cp arm192_start.elf start.elf
    newram=192
;;
3)
    if [[ "$b240det" == 1 ]] ; then
        rm start.elf && cp arm240_start.elf start.elf
        newram=240
    else
        echo "The arm240_start.elf was not detected. Not changing ram split."
        success=0
    fi
;;
4)
    rm start.elf && cp arm224_start.elf start.elf
    newram=224
;;
q|Q)
    exit 0
;;
*)
    $0
;;
esac

if [[ $? -ne 0 ]]; then
    echo "Memory Split setting failed"
elif [[ $success == 1 ]]; then
    declare -i newvram
    newvram=256-$newram
    echo "Memory Split set to $newram/$newvram successfully"
fi

for i in $list
do
    case $i in
        "./arm128_start.elf") b128det=1;;
        "./arm192_start.elf") b192det=1;;
        "./arm224_start.elf") b224det=1;;
        "./arm240_start.elf") b240det=1;;
        "./start.elf") bdefdet=1;;
    esac
done

if [[ "$bdefdet" -ne 1 ]]; then
    $0
    echo "=============================================================================="
    echo "start.elf not detected. Please check that you have selected a valid ram split."
    echo "=============================================================================="
fi

Aqui está um link do github em caso de podridão do link.

hifkanotiks
fonte
requer uma reinicialização depois?
akavel
@akavel Sim, como o start.elf é executado apenas na inicialização. Editando agora.
Hifkanotiks
1
As quatro respostas que você postou foram mescladas. Embora às vezes aceitável, não creio que ter quatro respostas separadas abordando diferentes aspectos da questão agregue algum valor nesse caso. Espero que ninguém se oponha.
Jivings
14

raspi-config

Você pode alterar a divisão da memória usando o raspi-configutilitário debian-wheezy ou raspbian-wheezy.

Basta executar o utilitário: em sudo raspi-configseguida, selecione a opção de divisão de memória (é a oitava na lista).

Jon Egerton
fonte
1

Verificando sua divisão de RAM

Grande demais para um comentário, mas relacionado. Você pode verificar sua divisão de ram executando este comando

$ sha1sum /boot/*start.elf
a3f72ae7eae537800454de8e4cb231cbd176c0e1  /boot/arm128_start.elf
7784527719031c1c7fce6f72cf3a5c8c23565f24  /boot/arm192_start.elf
82c6be2c9098c0c9c3d71f45bf16c1dc5adfcf08  /boot/arm224_start.elf
82c6be2c9098c0c9c3d71f45bf16c1dc5adfcf08  /boot/start.elf

A divisão é dada pelo arquivo que possui a soma de verificação correspondente. Portanto, no meu caso, é 224/32

John La Rooy
fonte
Embora útil, isso não responde à pergunta.
Jivings
Eu queria verificar minha divisão ram atual, porque não sabia qual era o padrão e não foi chamado em /boot/config.txt. Infelizmente, meu sistema só teve start.elf, então localizei o valor através do dmesg. Há uma linha (no meu sistema) que diz "Memória: 448MB = 448MB total". Então, eu tenho uma divisão 448/64.
GrandAdmiral