2014-03-19 5 views
0

정확하게 kmalloc()을 사용하여 장치 드라이버의 장치에 메모리를 할당해야하는 위치를 정확히 알 수 있습니까?linux 드라이버 코드에서 kmalloc을 사용하는 방법

초기화 또는 열기 중에 있습니까? malloc과 마찬가지로, kmalloc은 동적으로 메모리를 할당합니까?

답변

1

일반적으로 커널 공간에 물리적으로 연속적인 메모리가 필요한 경우 kmalloc()을 사용할 수 있습니다. 유스 케이스에 따라 init/open 중에 사용할 수 있습니다. init()에서 kmalloc하지만 장치를 사용하지 않으면 할당 된 메모리가 낭비됩니다. kmalloc가 open()에서 사용되면, 장치가 사용되는 경우에만 메모리가 할당되기 때문에 실제로 할당 된 메모리가 사용됩니다.

또한 물리적으로 연속적인 메모리 할당이 필요하지 않은 경우 커널에서 vmalloc()을 사용할 수 있습니다.

1

필요한시기에 따라 다릅니다. 어렵고 빠른 규칙이 없습니다.

예를 들어, i2c 드라이버가 linux kernel 인 경우 초기화 또는 특정 기능에는 두 개의 kmalloc 호출이 있으며 아무 것도 호출되지 않습니다.

네, 그것은 사용자 공간 malloc과 유사하게 동작하며 메모리를 동적으로 할당합니다.

관련 문제