symbol_get/symbol_put Feb 13, 2008

inter_module_xxx 관련 함수들이 2.6.10이후로 symbol_get/symbol_put 함수로 바뀌면서 제거되었다. 참조할 만한 문서는 다음과 같다.(함수에 문제가 있다는 얘기)

http://lwn.net/Articles/119013/


위의 함수들이 필요한 이유는 다음과 같다.
예를 들어 모듈 A가 특정 상황에 모듈 B의 함수 BFunction()을 사용한다고 하자.
BFunction을 사용하기 위해서는 모듈 B는 EXPORT_SYMBOL(BFunction);을 선언해야 하며 모듈 A는 BFunction을 extern으로 선언하고 사용하여야 한다.

이때 문제가 되는 것은 모듈 A가 모듈 B가 커널에 load되지 않은 상황에서 먼저 load된다면 커널은 모듈 A의 심볼테이블에 있는 Bfunction을 resolve하려다가 그만 linking error를 발생시키고 모듈 A 자체가 load 되지 못하는 현상이 발생하게 되는 것이다. 모듈 A는 그 함수를 정말 특정한 상황에서 단지 한번 호출할 때 뿐인데도 불구하고..

그래서 나온 것이 symbol_get과 symbol_put을 사용하여 runtime에 심볼을 찾아내서 호출하는 방식이다. glibc의 dl_open, dl_sym과 같은 이치라고 보면 될 것이다.

0 개의 덧글: