ฉันจะเปลี่ยนแรมแยกได้อย่างไร


23

โดยค่าเริ่มต้น Pi จะถูกตั้งค่าเป็น 192MiB: 64MiB RAM: VRAM split เนื่องจากฉันจะไม่ใช้ Pi สำหรับวัตถุประสงค์ทางกราฟิกฉันต้องการเปลี่ยนการแบ่งเพื่อจัดสรร RAM ปกติให้มากขึ้นเพื่อลดการใช้ swap


มีคำถามที่คล้ายกันและคำตอบที่เกี่ยวข้องเป็นที่นี่
Jivings

คำตอบ:


16

นี่คือการแยก RAM และสิ่งที่ควรใช้

  • 240/16 - นี่จะเป็นการดีที่สุดถ้าคุณจะไม่ทำอะไรกราฟิกเช่นถ้าคุณใช้ Pi เป็นเซิร์ฟเวอร์และไม่มี GUI
  • 224/32 - นี่น่าจะดีที่สุดถ้าคุณใช้ pi กับสภาพแวดล้อมเดสก์ทอปพื้นฐานแบบกราฟิกโดยไม่มี 3D
  • 192/64 - ค่าเริ่มต้นอาจเป็นจุดประสงค์ทั่วไปที่ดีที่สุด
  • 128/128 - VRAM ที่สูงมากดีมาก ๆ ถ้าคุณทำงานที่ต้องใช้กราฟิกมาก ๆ

มีหลายวิธีที่สามารถจัดการแยก RAM ได้:

ด้วยมือ

คุณสามารถเปลี่ยนแรมแยกโดยใช้วิธีนี้:

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

โดยที่[ram-split]ปริมาณของ RAM ที่จะจัดสรรให้กับ CPU อยู่ หลังจากรีบูตระบบจะใช้ค่าใหม่

RPI อัพเดท

การปรับปรุงrpiของ Hexxeh ยังรองรับการเปลี่ยน RAM แยกคุณจะเรียกใช้rpi-update [ram-split]โดยที่[ram-split]ปริมาณ RAM ที่คุณต้องการจัดสรรให้กับ CPU หลังจากรีบูตการแบ่งจะถูกนำไปใช้

สคริปต์ตัวเลือก Ram

วิธีที่ดีที่สุดน่าจะใช้สคริปต์ select4.sh นี้จากนั้นเลือกการแบ่ง RAM ที่เหมาะสม หลังจากคุณรีบูตการแบ่งใหม่จะถูกนำไปใช้

#!/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

นี่คือลิงค์ githubในกรณีที่ลิงค์เน่า


ต้องรีบู๊ตหลังจากนั้นหรือไม่
akavel

@akavel ใช่เนื่องจาก start.elf ถูกเรียกใช้เมื่อเริ่มต้นเท่านั้น กำลังแก้ไขในขณะนี้
hifkanotiks

1
คำตอบสี่คำตอบที่คุณโพสต์ถูกรวมเข้าด้วยกัน แม้ว่าบางครั้งก็ยอมรับได้ แต่ฉันไม่เชื่อว่าการมีคำตอบสี่คำตอบแยกกันเพื่อตอบคำถามในแง่มุมต่าง ๆ ของคำถามจะเพิ่มคุณค่าใด ๆ ในกรณีนี้ ฉันหวังว่าวัตถุที่ไม่มีใคร
Jivings

14

raspi-config

คุณสามารถเปลี่ยนการแยกหน่วยความจำโดยใช้raspi-configยูทิลิตี้ได้ทั้ง debian-wheezy หรือ raspbian-wheezy

เพียงแค่เรียกใช้ยูทิลิตี้: sudo raspi-configจากนั้นเลือกตัวเลือกการแยกหน่วยความจำ (ประมาณหนึ่งในรายการในรายการ)


1

ตรวจสอบ RAM ของคุณแยก

ใหญ่เกินไปสำหรับความคิดเห็น แต่เกี่ยวข้องกัน คุณสามารถตรวจสอบ ram ของคุณได้โดยการรันคำสั่งนี้

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

แยกได้รับจากไฟล์ที่มีการตรวจสอบการจับคู่ดังนั้นในกรณีของฉันมัน 224/32


แม้ว่าจะมีประโยชน์ แต่ก็ไม่ตอบคำถาม
Jivings

ฉันต้องการตรวจสอบ RAM ปัจจุบันของฉันเพราะฉันไม่รู้ว่าค่าเริ่มต้นคืออะไรและมันไม่ได้ถูกเรียกออกมาใน / boot/config.txt น่าเสียดายที่ระบบของฉันเพิ่งเริ่มต้นด้วยตัวเองดังนั้นฉันจึงติดตามค่าผ่าน dmesg มีบรรทัด (ในระบบของฉัน) ที่ระบุว่า "หน่วยความจำ: 448MB = ผลรวม 448MB" ดังนั้นฉันมีการแยก 448/64
GrandAdmiral
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.