기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요, 리눅스 디바이스를 공부하는 학생입니다.
리눅스 커널이 부팅될 때
start_kernel()에서 시작하여
do_initcalls() 함수를 통하여 각 섹션에 저장되어 있는 함수포인터를
호출하여 디바이스를 초기화 한다고 알고 있는데요...
그리고
각 디바이스 드라이버 파일의 module_init(fn)을 통하여
fn을 섹션에 등록시켜주고요...
그럼...
사용되어지는 각 디바이스 드라이버에 대한
module_init() 함수는
언제 호출이 되는 것인지요?
insmod를 통해 쉘에서 직접 ko 파일을 실행시켜주는건가요?
insmod 이외에는 다른 방법은 없는지요?
module_init의 경우는 module일 경우와 built-in의 경우가 틀립니다.
커널에 built-in이 되면 vmlinux.lds의 section에 포함되게 되며, module의 경우는 실제 module이 초기화 될 때 호출되는 거라고 보시면 될 듯 합니다.
insmod외엔 별 방법이 없다고 보시면 될겁니다. 물론 약간 코드를 보고 맞추면 되긴하겠지만, 그럴일은 그다지 없겠지요?