module_init()는 __initcall()로 치환되고
__initcal()은 static inicall_t __initcall_modulename __init_call = modulename
으로 치환되어
initcall_t 타입의 정적변수로 생성된다.
결국은... 다른 파일에서 __init_call 하나로 끌어갈수 있으려나?
(물론 내부 인터페이스 함수가 존재할 듯?)
#define __initcall(fn) static initcall_t __initcall_##fn __init_call = fn #define module_init(x) __initcall(x); [링크 : http://www.compsoc.man.ac.uk/~moz/kernelnewbies/documents/initcall/kernel.html] |
#define __exitcall(fn) \ static exitcall_t __exitcall_##fn __exit_call = fn #define module_exit(x) __exitcall(x); [링크 : https://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/include/linux/init.h] |
#define module_param(name, type, perm) \ module_param_named(name, name, type, perm) #define module_param_named(name, value, type, perm) \ param_check_##type(name, &(value)); \ module_param_cb(name, ¶m_ops_##type, &value, perm); \ __MODULE_PARM_TYPE(name, #type) #define module_param_cb(name, ops, arg, perm) \ __module_param_call(MODULE_PARAM_PREFIX, name, ops, arg, perm, -1, 0) #define __module_param_call(prefix, name, ops, arg, perm, level, flags) \ /* Default value instead of permissions? */ \ static const char __param_str_##name[] = prefix #name; \ static struct kernel_param __moduleparam_const __param_##name \ __used \ __attribute__ ((unused,__section__ ("__param"),aligned(sizeof(void *)))) \ = { __param_str_##name, THIS_MODULE, ops, \ VERIFY_OCTAL_PERMISSIONS(perm), level, flags, { arg } } #define __moduleparam_const const [링크 : http://lxr.free-electrons.com/source/include/linux/moduleparam.h] |
[링크 : http://www.joinc.co.kr/.../Site/Embedded/Documents/WritingDeviceDriversInLinux]
[링크 : https://www.kernel.org/doc/htmldocs/kernel-hacking/routines-init-again.html]
'Linux API > linux' 카테고리의 다른 글
select() (0) | 2015.10.26 |
---|---|
mmap / ioremap (0) | 2015.10.21 |
리눅스 모듈 - 세마포어 / 뮤텍스 (0) | 2015.10.21 |
리눅스 타이머 예제 setitimer() / sigaction() (0) | 2015.10.13 |
clock_gettime (0) | 2015.08.09 |