Linux에서 8MB의 물리적 연속 메모리 할당

Linux에서 8MB의 물리적 연속 메모리 할당

CONFIG_CMA커널 구성 매개변수를 활성화하지 않고 4MB 이상의 물리적 연속 메모리를 할당할 수 있습니까? 현재 dma_alloc_coherent()통화를 사용하고 있는데 4MB 이상의 크기를 할당하려고 하면 실패합니다.

답변1

바라보다__get_free_pages().

설명으로 판단하면O'Reilly Linux 장치 드라이버 북, 날짜가 있지만 여전히 관련성이 있는 책:

모듈에 대량의 메모리 할당이 필요한 경우 일반적으로 페이지 지향 기술을 사용하는 것이 가장 좋습니다. ...

인수 flags는 다음과 같은 방식으로 작동합니다.메모리 할당; 일반적으로 GFP_KERNEL또는 GFP_ATOMIC플래그가 추가된 경우 __GFP_DMA(ISA 직접 메모리 액세스 작업에 사용할 수 있는 메모리용) 또는 __GFP_HIGHMEM상위 메모리를 사용할 수 있는 경우에 사용됩니다. order요청했거나 해제한 페이지 수의 기본 2 로그입니다(즉, log2 N). 예를 들어, order한 페이지가 필요하면 0이고, 8페이지가 필요하면 3입니다. 너무 크면 order(해당 크기의 연속 영역을 사용할 수 없음) 페이지 할당이 실패합니다. 이것주문받기이 함수는 정수 인수를 사용하며 호스팅 플랫폼의 크기에서 순서를 추출하는 데 사용할 수 있습니다(2의 거듭제곱이어야 함). 주문에 허용되는 최대 값은 아키텍처에 따라 10 또는 11(1024 또는 2048 페이지에 해당)입니다. 그러나 대용량 메모리를 갖춘 새로 부팅된 시스템을 제외하면 10차 할당이 성공할 가능성은 희박합니다.

관련 정보