[질문] 커널 소스를 보고 있는데요...

익명 사용자의 이미지

커널 소스를 boot process부터 차례로 보고 있는데요...

1. asmlinkage void __init start_kernel(void)에서
__init이 뭔질 몰겠습니다...

2. 그리고 __setup("profile=", profile_setup);에서
__setup이라는게 정확이 뭘 하는건지, 언제 수행이 되는건지...

음.. __XX라는 함수는 나중에 __XX라는 함수를 다시 호출한다든지 하는
커널 소스를 볼때 좀 도움이 되는 것들을 알고 싶습니다.

badcodek의 이미지

6년전 글~ -_-;;

누군가 또 검색할수 있으니 답변을;;

kernel parameter 를 받아들여 command_line[] 배열을 채워주는 매크로 랍니다..

__setup("root=",root_dev_setup); 이 설정되어 있고

커널 인수(kernel parameter)에 root=/dev/ramdisk 가 들어가 있다면

static int __init root_dev_setup(char *line) 함수가 호출,

line에 /dev/ramdisk 가 들어가게 되는 구조 입니다..

그냥 커널 파라메터 처리 매크로 라고 해도 좋겟네여..

익명 사용자의 이미지

feanor의 이미지

__init은 include/linux/init.h에 정의되어 있고, 해당 함수를 GCC attribute를 사용해서 .init.text 섹션에 위치시킵니다.

__init은 부팅때만 실행되는 함수에 붙여줍니다. dmesg를 보시면 "Freeing unused kernel memory: 200k freed" 같은 메시지가 나오는데, 이것은 부팅이 끝나고 나서 __init으로 표시된 메모리를 해제할 때 나오는 메시지입니다.

2017의 이미지

감사합니다.

dist777의 이미지

...
;;;

원글이..지금 기준으루 16년전이네요..^^;
아무튼...저도 덩달아 감사를~ ( _ _ )