커널 버전 2.4-18 에서 모듈 컴파일 하는 법
글쓴이: hankm2004 / 작성시간: 토, 2003/02/08 - 12:18오후
:D 안녕하세여
저는 이제 막 커널을 공부 하는 학생인데여
항상 커널 2.2 에서 공부를 하다가
이번에 한컴 리눅스 깔구 (커널 버전 2.4-18)
간단한 " Hello world" 를 쩍어 보려구 모듈 프로그램 을 짜구
gcc -O2 -D__KERNEL__ -DMODULE -D_LINUX hello.c -c 로
커널 2.2 에서 하던것 처럼 컴파이을 했는데여
insmod 로 모듈을 올릴려구 하니까
제 파일이 커널 2.4.09 용으로 컴파일 되어서 커널 버전이 안맞아서
못올린다고 나오네여
어떻게 된건지 ..............
커널 버전에 바뀌면 모듈 컴파일 옵션이 바뀐다구 하던데
그러서 그런가여?
혹시 아시는 분 있으시면 좀 가르쳐 주세여.............
부탁드립니다.
그리고 혹시 커널 2.2 에서 2.4 로 넘어오면서
원래 쓰던 header file 들이 많이 바뀐거 같던데
asm/uaccess.h 도 "그런 파일이 없다구 나오구 "
어떻게 바꿨는지 아시거나 문서 위치 아시는 분 도움 부탁드립니다.
커널 버전 2.2 와 2.4 차이가 참 많이 나는 군여
첨 부터 막히니
Forums:
저도 그런 현상 겪었는데요..좀 삽질해보다가 그냥 포기하고
저도 그런 현상 겪었는데요..
좀 삽질해보다가 그냥 포기하고
insmod -f 로 강제로 올렸습니다.
커널 버전이랑 맞추시려면 커널을 자기가 빌드한 것으로 쓰시는 것이 제일 확실한 것으로 알고 있습니다.
rommance.net
시스템에 깔려있는 커널 헤더가 현재커널과 다른것이라서 그런걸 껍니다.
시스템에 깔려있는 커널 헤더가 현재커널과 다른것이라서 그런걸 껍니다.
컴파일 옵션에다가 다음을 넣으세요..
gcc -O2 -D__KERNEL__ -DMODULE -D_LINUX -I/lib/modules/$(uname -r)/build/include hello.c -c
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
[quote="ganadist"]시스템에 깔려있는 커널 헤더가 현재커널과
--------------------------------------------------------------
말씀 하신데로 했더니
그나마 돌던
printk 마저 undefined reference 라고 나오네요
sys_call_table 도 undefined reference 라고 나오고요.........
혹시 2.4 에서 해보신 분 없나여?
저는 이제 막 커널을 공부하기 시작한 사람입니다.
부디, 고수님을의 많은 조언 부탁 드리겠습니다.
실제 커널 컴팔을 합니다.그러면 여러가지 옵션들이 대입된 출력물이 주
실제 커널 컴팔을 합니다.
그러면 여러가지 옵션들이 대입된 출력물이 주루룩 나오잖아요..
그러면 그걸 copy & paste해서 님의 소스이름으로 컴파일 대상만 바꿉니다.
넘 무식한가....ㅋ
커널 2.2.x대에서는 커널헤더를 일반적으로 /usr/include/li
커널 2.2.x대에서는 커널헤더를 일반적으로 /usr/include/linux 에서 찾았습니다만 커널 2.4.x대에서는 커널헤더를 /lib/modules/$(uname -r)/build/include/linux 에서 주로 찾게 되어 있습니다.
그리고 printk의 심볼을 못찾는 이유는 커널심볼에 버젼을 박아서 그런것 같습니다.
궁극적으로 현재 쓰는 커널의 설정이랑 include한 커널헤더가 있는 커널의 설정이랑 달라서 그런 것입니다.
커널설정을 지금 쓰고 있는것과 동일하게 한다음 make dep 하시고 커널모듈을 다시 컴파일 하면 될듯합니다.
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
sample 가지고 그냥 베끼세요.
저도 책이랑 자료만 보다가 모듈 프로그래밍할일이 좀 생겨서
그대로 했는데 님과 같이 컴파일도 안되더군요.
저는 주로 slackware만 가지고 개발했었는데 지금 쓰는 개발툴이
redhat밖에 안깔려서....^^
redhat 7.3을 쓰는데 일단 /usr/include/linux랑 /usr/include/asm이랑
정말 열받게 깔려 있더군요.
보통 슬랙은 커널의 include/linux랑 include/asm이랑 심볼릭 링크를
시켜놔서 커널 버젼이 바뀌어도 상관이 없게 되어 있었는데 이놈의
레드햇은 열받더군요.
그래서 제가 맘대로 변경해버렸습니다. 그 담부터는 좀 편하게 되더군요.,
모듈가지고 장난할때 제일 열받는게 컴파일이 안되는 거였는데,
열받아서 커널에 있는 드라이버중에 전에 보던 8139too.c를 보고
그냥 베꼈습니다.
헤더들은 다음과 같이 해주시고요(물론 알맞게 변경해야겠지요...)
저는 네트웍크 드라이버 손을 대느라 그냥 8139꺼 씁니다.
이런식으로 해주시고요.
컴파일은 담과 같이 합니다.
gcc -O6 -Wall -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX -c file.c
물론 메이크 파일 만들어도 되고요.이런후 insmod하면 될겁니다.
참. printk도 안되는 거는 대충 읽고 넘어가서 가물가물한데 커널안의
심볼테이블에는 printk_xxxx형태로 되어 있댑니다.
아마도 linuxkernel.net의 faq란엔가 보면 설명이 되어 있는것 같은
기억이....가물가물...함 찾아보세요.
그럼.
서명.....음, 서명이라...
아싸!!! Three Go!
댓글 달기