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차 할당이 성공할 가능성은 희박합니다.