crosstool chain 빌드 조차 힘겹게 하는 나 자신을 보고 있자니...
한심하고 답답할 뿐이다..
실력만이 살길인데, 난 아직 갈길이 멀구나!
Trackback 0 And
Comment 0
위 두 define 문 때문에 반나절을 날렸다.
분명 커널에 built-in 으로 들어있고 /proc/kallsyms 에도 나오는 심볼인데,
모듈을 로드하면 Unknown symbol 이라는 메시지만 찍고 모듈 로딩에 실패했다.
==========================================================================================
# grep usb_alloc_urb /proc/kallsyms
802704b0 T usb_alloc_urb
803f6014 r __ksymtab_usb_alloc_urb
803f96cc r __kcrctab_usb_alloc_urb
80403d70 r __kstrtab_usb_alloc_urb
#insmod wireless.ko
wireless: Unknown symbol usb_alloc_urb
wireless: Unknown symbol usb_free_urb
wireless: Unknown symbol usb_register_driver
wireless: Unknown symbol usb_submit_urb
wireless: Unknown symbol usb_deregister
wireless: Unknown symbol usb_kill_urb
insmod: cannot insert `wireless.ko': Unknown symbol in module (-1): No such file or directory
===========================================================================================
이유는 GPL License 때문이었다.
로딩하려는 모듈이 GPL License 가 표시되지 않았었고, 이 모듈에서 사용하는 Symbol 이
EXPORT_SYOBOL_GPL로 export 되어있었기 때문에 이 모듈은 사용할 수 가 없었던 것이다.
위 wireless.ko는 2.6.24 버전 커널에서는 문제 없이 사용되었는데, 2.6.28 에서는 위의 문제가 생겼다.
USB Subsystem 이 2.6.25 버전 부터는 GPL License 모듈에만 Symbol을 export 하도록 변경되었던 것이다.
결론은 EXPORT_SYMBOL로 export 된 symbol은 GPL License 가 아닌 모듈도 사용할 수 있지만,
EXPORT_SYMBOL_GPL로 export 된 symbol은 GPL License 가 아닌 모듈은 사용할 수가 없다.
Trackback 0 And
Comment 0
GPL 관련 정보를 알아보다 MODULE_LICENSE 의 의미를 말하는 글을 발견했다.
이글은 "How this prevents proprietary modules from being built into the Linux kernel?" 에 대한 답이다.
결론은 "It doesn't. Proprietary modules will load just fine into a linux kernel. But
the kernel will remember, and somebody can check to see if the kernel is still
free." 이다.
답글 작성자는 MODULE_LICENSE()의 의미를 "Honor System" 이라고 정의하고 있다.
원글은 다음과 같다.
Trackback 0 And
Comment 0


