uboot가 어떤 메모리 RAM 주소 범위를 사용하고 있는지 어떻게 알 수 있나요?

uboot가 어떤 메모리 RAM 주소 범위를 사용하고 있는지 어떻게 알 수 있나요?

저는 uboot에 있고 uboot가 사용하는 RAM 주소 범위를 아는 방법을 알고 싶습니다.

uboot를 실행하려면 메모리가 필요하므로 일부 RAM을 사용할 수 있습니다. 이러한 RAM 주소를 수정하는 것을 피하고 싶습니다.

uboot가 로드된 메모리 영역을 어떻게 알 수 있나요?

답변1

DULG 디버깅 UBoot페이지에는 다음과 같은 내용이 있습니다("재배치"라고 부르는 것은 플래시에서 RAM으로 자신을 복사하는 것입니다).

U-Boot를 재배치한 후 디버깅하려면 U-Boot가 재배치된 주소를 알아야 합니다. PRAM과 같은 특수 기능을 사용하지 않는 경우 이 주소는 일반적으로 CONFIG_SYS_MONITOR_LEN입니다. 이 예에서는 RAM이 16MB이고 CONFIG_SYS_MONITOR_LEN = 192KB인 경우 주소는 0x1000000 - 0x30000 = 0xFD0000이 됩니다.

텍스트를 자세히 읽어보면 프로세서나 마더보드에 따라 다르다는 것을 알 수 있으므로 U-Boot 소스 코드를 확인해야 할 수도 있습니다.

~에 대한전문가 prag:

RAM 측면에서 u-Boot는 처음 8MB를 예약합니다. 나머지는 무료입니다. 일부 개발자는 플래시 메모리를 프로그래밍하기 위해 커널과 파일 시스템을 0×800000에 로드합니다. 또 다른 공통점은 100MB 경계(또는 오프셋 0×640000)입니다.

U-Boot 명령 버전에 따라 여유 RAM 어딘가에 문자열을 넣은 다음 나머지 RAM에서 해당 문자열을 찾아 메모리에서 U-Boot의 대략적인 위치를 표시할 수 있습니다.

답변2

사용 중인 uboot 버전을 부팅하면 "가상 커널 메모리 레이아웃"이 자동으로 표시됩니다.

Memory: 859068k/859068k available, 25668k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xf9e00000 - 0xffe00000   (  96 MB)
    vmalloc : 0xe0800000 - 0xf4000000   ( 312 MB)
    lowmem  : 0x80000000 - 0xe0000000   (1536 MB)
    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)
    modules : 0x7f000000 - 0x7fe00000   (  14 MB)
      .init : 0x80008000 - 0x8004d000   ( 276 kB)
      .text : 0x8004d000 - 0x808ad000   (8576 kB)
      .data : 0x808ce000 - 0x80937a40   ( 423 kB)

실행하려는 다양한 유틸리티 프로세스(예: 메모리에 대용량 파일 로드)에 lowmem 영역을 사용하는 것이 안전하다고 생각합니다. 이상적으로는 이런 종류의 작업에 높은 메모리를 사용하고 싶을 것이라고 생각하지만 해당 옵션이 없습니다(내 출력에서 ​​볼 수 있듯이).

관련 정보