= 리눅스 커널에서의 초기화 및 해제시 사용하는 마크 = -- [김도집] [[DateTime(2005-08-23T08:31:11)]] 본 내용은 리눅스 커널 소스의 Documentations/pci.txt 내용 중 일부를 기반으로 작성된 것이다. 리눅스 커널 소스를 보다 보면 __init 등과 같은 것을 볼 수 있을 것이다. {{{ static void __init mydev_init(void) { blabla... } }}} 보는 것처럼 static이나 void 등은 우리가 알고 있는 일반적인 C 소스에서 접한 것이다. 그런데 '''__init'''이라는 것은 생소하다. 이와 같은 매크로들은 ''''''에서 정의하고 있다. 다음의 것들은 초기화 또는 해제 기능을 갖는 것임을 알려주는 일종의 표시이다. 이들은 링크시에 특별한 섹션 테이블에 넣도록 강제한다. {{{ __init 초기화 코드. 드라이버를 초기화할 때 사용될 것임을 명시한다. __exit 해제 코드, 드라이버가 모듈로 선언되지 않은 경우엔 무시된다. __devinit 장치 초기화 코드. CONFIG_HOTPLUG로 컴파일 되지 않은 경우엔 __init과 동일하며, 그렇지 않다면 그냥 무시된다. __devexit __exit과 동일하다. }}} HOTPLUG 기능을 사용하는 경우엔 __init을 사용하지 않는다. 대신에 __devinit을 사용해야만 한다. 특히 PCI 디바이스에 대한 드라이버에서는 HOTPLUG 기능을 사용하게 된다. 이럴 경우엔 __devinit을 사용한다.