![임베디드 Linux 시스템의 메모리가 실제로 운영 체제에서 사용되는지 확인하는 방법은 무엇입니까?](https://linux55.com/image/198552/%EC%9E%84%EB%B2%A0%EB%94%94%EB%93%9C%20Linux%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EA%B0%80%20%EC%8B%A4%EC%A0%9C%EB%A1%9C%20%EC%9A%B4%EC%98%81%20%EC%B2%B4%EC%A0%9C%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94%EC%A7%80%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이 문제에는 추가 설명이 필요합니다.
배경: 저는 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)
이 주소는 MMU 번역 장치에 포함되지 않는 것으로 보입니다.
질문):
- Linux가 가능한 메모리 풀의 일부로 외부 ddr을 사용하는지 확인하는 방법은 무엇입니까? OS가 메모리의 모든 페이지를 추적한다는 것을 알고 있는데 이 메모리가 페이징됩니까?
- 운영 체제가 이 메모리를 사용하여 프로세스 주소 공간을 생성하고 관리할 수 있습니까?
- 이 물리적 주소를 프로세스의 사용자 가상 주소 공간에 매핑한다고 가정하면 커널이 새 페이지 항목을 생성합니까?