내 하드웨어가 이 위치에 메모리 RAM을 쓰고 이 부분을 메모리에 건드리지 않도록 커널이 필요하기 때문에 처음 2GB를 RAM용으로 예약하고 싶습니다.
이 옵션을 사용하려면 주문을 시작해야 한다는 내용을 읽었습니다.메모리 맵부트로더에서는 Yocto OS의 드라이버 커널을 사용하고 싶기 때문에 제가 사용하는 부트로더는 U-Boot입니다.
사용하기 위해 이 예제를 읽었습니다.메모리 맵:
memmap=nn[KMG]$ss[KMG]
[KNL,ACPI] Mark specific memory as reserved.
Region of memory to be reserved is from ss to ss+nn.
Example: Exclude memory from 0x18690000-0x1869ffff
memmap=64K$0x18690000
or
memmap=0x10000$0x18690000
Some bootloaders may need an escape character before '$',
like Grub2, otherwise '$' and the following number
will be eaten.
이런 경우에는 쓸 줄 몰랐네요 감사합니다
편집: 새로운 질문
memmap=2G$0x00000000 및 memmap=7fffffff$0x00000000을 사용하여 U-Boot에서 이 옵션을 작성했는데 예외가 반환되지 않았습니다. 올바르게 작성한 것 같습니다.고양이/프로세스/iomem나는 이 메모리가 메모리용으로 예약되어 있다는 것을 알려주는 것을 아무것도 보지 못했습니다.
.dtb를 수정해야 합니까?
답변1
부팅 시 Uboot의 "mem" 속성을 사용하는 것이 더 좋을 것 같습니다.여기:
SoC Cortex-A9에서 실행되는 Linux에서 메모리가 사용되지 않도록 예약하려면 Linux 커널에 메모리 상단(주소 지정 가능한 가장 높은 RAM 주소)이 무엇인지 알려야 합니다. 이 주소 이외의 모든 RAM 주소는 Linux 운영 체제 이외의 목적으로 사용될 수 있습니다.
bootargs U-boot 환경 변수에 "mem=..." Linux 부팅 매개변수를 추가하여 U-boot에서 주소 지정 가능한 가장 높은 RAM 주소를 설정할 수 있습니다.
다음은 메모리 상단을 0x3E800000으로 설정하는 샘플 U-boot 명령줄 명령입니다.
setenv bootargs console=ttyS0,115200 mem=1000M
"mmcboot", "ramboot" 및 "qspiboot" U-boot 환경 변수도 bootargs 환경 변수를 재정의합니다. 이러한 변수를 사용하는 경우 해당 변수의 bootargs를 수정해야 할 수도 있습니다.
기본 U-boot 환경 변수는 "uboot-socfga\include\configs\soccpga_common.h" C 헤더 파일을 통해 SoC에 대해 정의됩니다.