단일 칩에 ARM-Cortex-A9 CPU와 Cyclone V FPGA가 포함된 SoC-FPGA(DE0-nano-soc)가 있습니다. CPU는 1GB의 DDR3 메모리에 액세스할 수 있지만 FPGA도 해당 메모리에 액세스하여 데이터를 공유할 수 있습니다.
이제 부팅 매개변수를 사용하여 총 RAM 중 900M만 볼 수 있도록 Linux를 구성했습니다 mem=900M
. 이렇게 하면 Linux가 건드리지 않는 RAM이 있고 이를 사용하여 FPGA와 통신할 수 있습니다. RAM에 쓰는 부분을 사용하고 싶습니다 /dev/mem
. 적절한 주소를 메모리 매핑할 때 권한 거부 오류가 발생합니다. 이는 커널이 CONFIG_STRICT_DEVMEM
설정 되었기 때문인 것으로 추측됩니다 .
이제는 Linux에서 사용하지 않는 주소만 작성하면 되므로 이 설정을 해제하고 싶지 않습니다. 특정 섹션에 쓸 수 있지만 여전히 정상적인 메모리 제한이 있음을 Linux 커널에 알리는 방법이 있습니까?
답변1
충분히 새로운 커널이 있다고 가정하면 추가 memmap=124!900
로 필요한 메모리를 /dev/pmem0
.
동시에 추가하는 것이 좋습니다 nokaslr
. 그렇지 않으면 임의의 시스템 오류가 발생할 수 있습니다. KASLR은 커널을 악용하기 어렵게 만드는 보안 기능입니다.
이것이 사용되었지만매혹적인 해커, 나는 당신에게 그것을 충분히 추천할 수 없습니다. CPU 캐시와 FPGA(DMA라고도 함) 업데이트를 관리하는 방법을 모르겠습니다. 우리의 제안다른 문제그렇게 하는 방법은 아닙니다 :-).
작성된 질문에 대한 답변은 아니지만 또 다른 옵션이 있습니다. iomem=relaxed
완전히 새로운 커널을 컴파일하지 않고 STRICT_DEVMEM을 일시적으로 비활성화하려면 boot를 사용하면 됩니다 .