/* modpost check for section mismatches during the kernel build.
* A section mismatch happens when there are references from a
* code or data section to an init section (both code or data).
* The init sections are (for most archs) discarded by the kernel
* when early init has completed so all such references are potential bugs.
* For exit sections the same issue exists.
* The following markers are used for the cases where the reference to
* the *init / *exit section (code or data) is valid and will teach
* modpost not to issue a warning.
* The markers follow same syntax rules as __init / __initdata. */
#define __ref __section(.ref.text) noinline
#define __refdata __section(.ref.data)
#define __refconst __section(.ref.rodata)
/* compatibility defines */
#define __init_refok __ref
#define __initdata_refok __refdata
#define __exit_refok __ref
날림해석을 해보면,
modpost 는 커널을 빌드하는 동안 section mismatch 를 점검한다.
section mismatch 는 init section(code 와 data둘다)이 다른 code 나 data section 에 의해 참고될때 발생한다.
(그 이유는) init section 는 대부분의 아키텍쳐(arm 이나 x86, powerPC 따위의..)에서 early init 이 완료되었을때 kernel 에 의해서 버려진다. 그리고 각각의 참조들은 모두 잠재적인 버그가 된다.
exit 색션도 같은 이슈가 존재한다.
뒤에 나오는 marker(define 들을 말한다.)들은 init 이나 exit의 data나 code section을 참고하는 경우에 이것이 유효(가능)한 참조라고 할때 사용된다. 그리고 modpost 에게 이것은 warning 이슈가 아니라고 말해준다.
이것의 syntax 룰은 __init 이나 _initdata 의 룰과 동일하다.
간단히 말하면 init section 을 참고하면 modpost 에 의해 warning 이 발생하게 되는데
부득이하게 사용할 경우 이 prefix 를 사용하면 된다는 의미이다.
'Programming > Linux_Kernel' 카테고리의 다른 글
select 함수에 대한 친절한 설명 (0) | 2011.03.07 |
---|---|
kernel 동작을 trigger 시킨 process name과 pid 얻기 (0) | 2011.02.21 |
[U-BOOT] U-BOOT 환경변수 설정을 위한 setenv, printenv 및 fw_setenv, fw_printenv (0) | 2011.01.17 |
virtual file system diagram (0) | 2011.01.01 |
mknod 의 의미 (0) | 2010.12.23 |