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



관련 포스트

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

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

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

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

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

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법