리눅스 커널 프로토콜 추가
글쓴이: gaedol / 작성시간: 월, 2007/03/19 - 8:10오전
igmp 패킷을 처리하는 커널 모듈을 만들고 있는 중입니다. 커널에 원래 있는 IGMP 대신 이 모듈이 IGMP 모듈을 처리하게 하기 위해 inet_add_protocol를 이용하여 제가 만든 핸들러를 추가 하려고 하는데 이미 존재하는 헨들러 때문에 추가가 되지 않고
insmod: error inserting 'igmps.ko': -1 Resource temporarily unavailable
라는 에러를 내뿜습니다.
그래서 원 IGMP 관련 핸들러를 inet_del_protocol를 이용하여 제거하려고 하는데 이게 쉽지 않습니다. inet_del_protocol()를 호출하려면 이미 추가되어 있는 프로토콜의 핸들러를 알아야 하는데 어떻게 해야 해당 핸들러를 가저 올수 있는지 모르겠습니다.
inet_add_protocol과 inet_del_protocol 이 있는 linux/protocol.h 와 net/ipv4/protocol.c 파일을 보니 제가 만든 모듈에서 inet_protos 라는 배열을 참조 할 수만 있으면 될것 같은데 해당 심볼을 참조하고 컴파일하면 컴파일시
WARNING: "inet_protos" [/home/gaedol/tmp/igmps.ko] undefined!
라는 워닝이 뜨고 해당 모듈을 로드하면 /var/log/message 에 다음 메시지가 남습니다.
Mar 19 08:01:36 embedded kernel: [17180571.424000] igmps: Unknown symbol inet_protos
어떻게 하면 inet_protos 변수를 참조 하거나 이미 추가 되어 있는 프로토콜 핸들러를 제거 할 수 있을까요?
다음은 제가 작성한 모듈의 일부입니다.
-- 상략 -- static struct net_protocol igmps_protocol = { .handler = igmps_rcv, }; #ifdef MODULE void __exit igmps_cleanup(void) { inet_del_protocol(&igmps_protocol, IPPROTO_IGMP); inet_add_protocol(&igmp_protocol, IPPROTO_IGMP); } #endif int __init igmps_init(void) { int hash = IPPROTO_IGMP & (MAX_INET_PROTOS - 1); igmp_protocol = inet_protos[hash]; // inet_protos 심볼을 참조하는 부분 inet_del_protocol(igmp_protocol, IPPROTO_IGMP); if(inet_add_protocol(&igmps_protocol, IPPROTO_IGMP) < 0) { printk(KERN_INFO "igmps init: Can't add protocol\n"); return -EAGAIN; } return 0; } module_init(igmps_init); module_exit(igmps_cleanup);
Forums:
해당 심볼을 export
해당 심볼을 export 시켜주세요.
EXPORT_SYMBOL(inet_protos);
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
답변
답변 감사합니다.
하지만 원 리눅스 커널을 건드리지 않고 프로그래밍을 해야 합니다.
protocol.c를 건드리지 않고 모듈(LKM)에서 protocol.c에 있는 inet_protos 심볼을에 어떻게 참조 해야 하는지 궁급합니다.
--------------------------------------------
김의국, Kim Euikook
"끝" 시작의 준말.
gaedole at nate.com (NateOn)
gaedole at gmail.com (MSN)
http://gaedol.org (HOME)
http://b.gaedol.org (BLOG)
--------------------------------------------
김의국, Kim Euikook
"끝" 시작의 준말.
gaedole at nate.com (NateOn)
gaedole at gmail.com (MSN)
http://gaedol.org (HOME)
http://b.gaedol.org (BLOG)
원 리눅스 커널을
원 리눅스 커널을 건드리지 않고 프로그래밍해야 하는 것을 보니 저작권 문제로군요. ^^
저작권 문제라기
저작권 문제라기 보다는 리눅스 커널을 건드리게 되면 이 모듈을 다른 커널에 적용할때 그 커널도 건들여야 되기 때문에..
처음부터 원 커널은 건드리지 않고 작업하려고 노력하고 있습니다.
--------------------------------------------
김의국, Kim Euikook
"끝" 시작의 준말.
gaedole at nate.com (NateOn)
gaedole at gmail.com (MSN)
http://gaedol.org (HOME)
http://b.gaedol.org (BLOG)
--------------------------------------------
김의국, Kim Euikook
"끝" 시작의 준말.
gaedole at nate.com (NateOn)
gaedole at gmail.com (MSN)
http://gaedol.org (HOME)
http://b.gaedol.org (BLOG)
해결했습니다. http://ww
해결했습니다.
http://www.google.com/codesearch?hl=en&q=show:DyOSzCSIBxk:9Otl5XlcTXE:QIoMCpv5DEI&sa=N&ct=rd&cs_p=http://ghc.ru/downloads/rbping-0.4rc1.tar.gz&cs_f=rbping-0.4/rbping.c
를 참조 해서 해결을 했습니다만 이 찜찜함은 무엇일까요?
--------------------------------------------
김의국, Kim Euikook
"끝" 시작의 준말.
gaedole at nate.com (NateOn)
gaedole at gmail.com (MSN)
http://gaedol.org (HOME)
http://b.gaedol.org (BLOG)
--------------------------------------------
김의국, Kim Euikook
"끝" 시작의 준말.
gaedole at nate.com (NateOn)
gaedole at gmail.com (MSN)
http://gaedol.org (HOME)
http://b.gaedol.org (BLOG)
글 삭제 요청
글 삭제 요청
-= 우주인류감시위원회 =-
무슨 문제라도
무슨 문제라도 있나요?
--------------------------------------------
김의국, Kim Euikook
"끝" 시작의 준말.
gaedole at nate.com (NateOn)
gaedole at gmail.com (MSN)
http://gaedol.org (HOME)
http://b.gaedol.org (BLOG)
--------------------------------------------
김의국, Kim Euikook
"끝" 시작의 준말.
gaedole at nate.com (NateOn)
gaedole at gmail.com (MSN)
http://gaedol.org (HOME)
http://b.gaedol.org (BLOG)
음...
답글 잘못 적으시고 답글 삭제 요청하시는 것으로 보입니다.
댓글 달기