임베디드 Linux 시스템의 메모리가 실제로 운영 체제에서 사용되는지 확인하는 방법은 무엇입니까?

임베디드 Linux 시스템의 메모리가 실제로 운영 체제에서 사용되는지 확인하는 방법은 무엇입니까?

이 문제에는 추가 설명이 필요합니다.

배경: 저는 ARM 프로세서 + FPGA로 구성된 임베디드 시스템(Xilinx zynq ultrascale+)을 개발 중입니다. 메모리 맵(시스템을 베어 메탈로 사용하는 경우)은 다음과 같습니다.

ARM에 연결됨(데이터시트에 따름):

Segment name | Start addresss     | Size
HP0_DDR_HIGH | 0x0_0008_0000_0000 | 32G 
HP0_DDR_LOW  | 0x0_0000_0000_0000 | 2G  
HP0_LPS_OCM  | 0x0_0000_FF00_0000 | 16M 
HP0_QSPI     | 0x0_0000_C000_0000 | 512M    

그런 다음 FPGA의 DDR 컨트롤러를 통해 액세스할 수 있는 외부 RAM(4GB)이 있습니다. 이 추억이 여기 있어요

Segment name          | Start addresss     | Size
C0_DDR4_ADDRESS_BLOCK | 0x0_0005_0000_0000 | 4G 

저는 Linux용으로 빌드할 때 Yocto로 변장한 Xilinx Petalinux 툴체인을 사용합니다. 시스템이 부팅된 후 0x5_0000_0000해당 물리적 ​​주소를 사용하거나 명령을 통해 devmem또는 사용자 공간에서 물리적 주소를 매핑하여 외부 DDR에 액세스할 수 있습니다.

나는 리눅스가 부팅 시 장치 트리를 구문 분석하여 이 추가 DDR을 발견한다고 생각합니다.

자세한 내용: 데이터시트 보기(https://www.xilinx.com/support/documentation/user_guides/ug1085-zynq-ultrascale-trm.pdf)

ARM -> 외부 DDR 경로

이 주소는 MMU 번역 장치에 포함되지 않는 것으로 보입니다.

질문):

  1. Linux가 가능한 메모리 풀의 일부로 외부 ddr을 사용하는지 확인하는 방법은 무엇입니까? OS가 메모리의 모든 페이지를 추적한다는 것을 알고 있는데 이 메모리가 페이징됩니까?
  2. 운영 체제가 이 메모리를 사용하여 프로세스 주소 공간을 생성하고 관리할 수 있습니까?
  3. 이 물리적 주소를 프로세스의 사용자 가상 주소 공간에 매핑한다고 가정하면 커널이 새 페이지 항목을 생성합니까?

관련 정보