커널소스 디바이스드라이버의 단독 모듈 컴파일

imcjswo의 이미지

안녕하세요
커널을 새로 컴파일 후
커널소스안의 특정 디바이스 드라이버만을 모듈로 컴파일해서 드라이버를 추가 사용하고 싶은데요
( 즉, 전체 커널 컴파일없이 특정 드라이버의 xxxx.o 의 모듈용 오브젝트 파일을 생성해서 insmod로 올려 사용하고 싶습니다.)

단지 해당 소스가 있는 경로에서
gcc -c xxxx.c -D__KERNEL__ -DMOUDLE -O 만으로도 가능할까요? :oops:
혹시 위의 방법으로 안된다면 방법을 사사해주시면...감사하겠습니다 :D

kiwist의 이미지

제가 보기엔 별 문제 없는 것 같은데요...

모듈 컴파일시 -O 옵션은 신중하게 사용해야하는 것으로 알고 있습니다.

간단한 코드라면 상관없겠지만, 되도록 -O0 로 설정하는것이 좋다는 얘길 들은 기억이... ^^;;;

고수님들이 더 부가적인 설명을 해주시겠죠?

j8508의 이미지

반드시 넣을 필요는 없지만...
넣는게 좋다고 하네요...

(o'reilly의 Linux device driver에 따르면..)
플래그에 -O를 포함 해야 gcc에서는 inline 함수를 디버그 할 수 있다고 하네요..

그렇지만 -O2 이상의 옵셥의 경우에는 inline으로 선언되어 있지 않은 함수도 inline 함수로 취급될 수 있다고 합니다.... 그래서 위험하데요~

그런데 그게 무슨 뜻인지 명확히는 모르겠어요~

아아.. 이렇게 부실한 답변이라니..

Seven..의 이미지

다수의 .c를 하나의 모듈로 묶어서

.o를 만들기 위해서는 어찌 해야하나요?

하나씩 하나씩 적었더니..

각각 .o가 생겨버리고..

뭉치자고 -o를 할 수도 없는 거 같고요;;;;

file system 모듈 컴파일 하는데요...

여러 .c파일을 어떻게 하나의 .o로 만들죠?

VENI VIDI VICI

hys545의 이미지

Seven.. wrote:
다수의 .c를 하나의 모듈로 묶어서

.o를 만들기 위해서는 어찌 해야하나요?

하나씩 하나씩 적었더니..

각각 .o가 생겨버리고..

뭉치자고 -o를 할 수도 없는 거 같고요;;;;

file system 모듈 컴파일 하는데요...

여러 .c파일을 어떻게 하나의 .o로 만들죠?


ar 린 명령어로 xx.a라고 o파일 뫃은 파일 만들수 잇습니다.

즐린

Seven..의 이미지

Quote:
ar 린 명령어로 xx.a라고 o파일 뫃은 파일 만들수 잇습니다.

그렇게 하면... insmod가 되나요? -0-;;

저것은 library만드는거 아닌가요? 음..ㄱ

VENI VIDI VICI

sjpark의 이미지

morris의 이미지

gcc -o modulename.o firstfile.o secondfile.o

그냥 이렇게 해주시면 됩니다

imcjswo의 이미지

gcc -o modulename.o firstfile.o secondfile.o 

그냥 이렇게 해주시면 됩니다

다수의 .o 파일을 묶는게 아니라 다수의 .c 파일들을 하나의 .o 파일로
만들려면 먼저 각자 .o 파일로 만든 후 위처럼 하라는 말씀인가요?