티스토리 뷰
커널 소스코드 에서 자주 볼 수 있는 __init 와 __initdata 는 초기화시에만 사용하고 사용되지 않는 함수와 데이터를 지정할때 사용되어진다. 커널 소스코드의 include/linux/init.h 에 아래와 같이 정의되어 있다.
include/linux/init.h
#define __init __section(.init.text) __cold notrace
#define __initdata __section(.init.data)
include/linux/compiler.h
#define __section(S) __attribute__ ((__section__(#S)))
컴파일러는 __init 로 지정된 함수와 __Initdata 로 지정된 데이터는 커널 초기화과정 이후에 해제되는 영역에 배치함으로서 쓸데없이 낭비되는 메모리 영역을 확보할 수 있다.
단 주의점은 built-in 모듈에만 적용된다는 점이다. 커널에 모듈로서 적재되는 경우에는 __init, __initdata 는 별다른 동작을 하지 않는다 !!
__exit, __exitdata 도 마찬가지로 커널소스에 built- in 된 경우에는 종료될때 필요한 함수나 변수를 호출할 필요가 없으므로 이에 해당하는 함수와 변수를 지정하기 위해서 사용되는 매크로이다.!!
관련 참고링크..
'etc' 카테고리의 다른 글
[개발환경] ST SW4STM32 환경에서 Semihosting 으로 디버그메시지 출력하기 (0) | 2018.03.01 |
---|---|
__read_mostly 매크로의 의미 (0) | 2013.07.26 |