insmod vmalloc: allocation failure 발생 해결법

임베디드 리눅스에서 insmod를 이용해 모듈을 로딩할 때 vmalloc allocation failure 에러를 출력하며 모듈이 로딩되지 않을 때의 해결방법은 아래와 같다.


1.  Vmalloc 메모리 체크

실제 사용되는 Vmalloc 메모리 용량을 확인한다.

#cat /proc/meminfo | grep "Vmalloc"
VmallocTotal: 516096 kB
VmallocUsed:         0 kB
VmallocChunk:       0 kB


만약 Vmalloc 메모리 용량이 적을 경우 bootargs의 vmalloc=<size>를 확인 후 용량을 늘려준다.

vmalloc=512M



2. .modules 의 크기

위 1번을 사용해 vmalloc 메모리의 크기를 늘려도 해결되지 않을 경우, .modules의 크기를 늘려준다.

.modules의 크기는 MODULES_VADDR의 크기를 조정하면 된다. MODULES_VADDR은 arm의 경우 arch/am/include/asm/memory.h에 정의되어 있다.


커널 버전에 따라 .config의 CONFIG_MODULES_AREA_SIZE을 변경하여 조정할 수도 있다.

8M의 경우

CONFIG_MODULES_AREA_SIZE=0x00800000

16M의 경우

CONFIG_MODULES_AREA_SIZE=0x01000000



관련 포스트

리눅스 디바이스 드라이버 기초와 예제

댓글

이 블로그의 인기 게시물

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

아두이노(arduino) 심박센서 (heart rate sensor) 심박수 측정 example code

간단한 cfar 알고리즘에 대해

base64 인코딩 디코딩 예제 c 소스

바로 프로젝트 적용 가능한 FIR Filter (low/high/band pass filter )를 c나 python으로 만들기