2011-04-14 5 views
11

정적으로 링크되는 두 개의 모듈이있는 경우 하나의 모듈의 module_init 함수는 이미 실행중인 다른 모듈의 module_init 함수에 의존합니다. 한 모듈을 다른 모듈보다 먼저로드하도록 강제하는 방법이 있습니까?LINUX : 정적으로 링크 된 모듈로드 순서

첫 번째 모듈의 init 함수가 두 번째 모듈을 호출하기 전에 끝내기를 보장합니까?

마지막으로 위의 답변이 NO이면 두 모듈 초기화 호출을 동기화하여 문제가 발생하지 않도록하는 권장 방법은 무엇입니까?

+0

1) 어떤 언어/툴체인, 2) .so 또는 .a에 링크 된 것을 의미합니까? – Erik

+1

두 개의 Linux 커널 모듈을 의미합니까? 그들은 어떻게 정적으로 연결되어 있습니까? "module_init"함수를 사용하여 두 객체를 정적으로 연결할 수 없습니다. –

+1

나는'module_init' 심볼이 리눅스 커널 모듈 시스템의 필수 부분이라고 생각하면서 오웬이 가지고 있다고 믿는다. @ 존 당신의 질문을 편집하고'linux-kernel' 태그를 포함시켜야합니다.'linux' 태그는 유감스럽게도 리눅스와 관련없는 사용자 공간 문제에 의해 지배됩니다. –

답변

0

난 당신이

Static Initialization Order Fiasco

+0

그는 리눅스 커널 모듈에 대해 이야기하고 있습니다. 귀하의 솔루션은 모두 C++ 사용자 공간과 관련이 있습니다. –

+0

@Eric : 눈치 채기 주셔서 감사합니다. 나는 완전히 그걸 놓쳤습니다 ... 나는 이상한 이름 (module_init)을 이국적인 유닉스 풍미의 어떤 곳에서 가정했습니다. – sehe

12

다른 이전에로드 한 모듈을 강제 할 수있는 방법이 있습니까?

obj-y += mod1.o 
obj-y += mod2.o 

가 첫 번째 모듈의 init 함수가 두 번째 호출되기 전에 완료 보장

:

대답은 확실히 첫 번째 모듈은 메이크에서 처음 만들어 의외로 간단하다?

예, 귀하의 경우에는 initcalls (module_init 후크)를 1 대 1이라고합니다. init/main.c, do_one_initcall() 발신자를 참조하십시오.

+1

이 솔루션은 다른 Makefile에 정의 된 모듈에서는 작동하지 않습니다. 두 개의 모듈이 다른 Makefile에서 컴파일되는 경우의 해결책은 무엇입니까? – talel

+0

@talel 일반적으로 디렉토리로 내려갈 순서를 정의하는 최상위 Makefile과 아치 전용 섹션을 정의하는 아치 Makefile이 있습니다. Makefile에서 init-y, core-y, drivers-y 등을 찾을 수 있습니다. 또한이 기사가 도움이 될 수 있습니다. http://www.kernel.org/doc/Documentation/kbuild/makefiles.txt – ywu

관련 문제