부팅 시 커널 모듈 로딩이 차단됩니까?

부팅 시 커널 모듈 로딩이 차단됩니까?

부팅 시 커널 모듈을 로드하고 /etc/modules-load.d/의 구성 파일에 추가했으며 모듈이 올바르게 로드되었습니다.

내 모듈에서는 wait_for_random_bytes() 함수를 사용합니다.리눅스/random.h, 따라서 모듈 로딩이 약간 지연될 수 있습니다.

모듈이 순서대로 로드되어 있습니까? 내 모듈이 다른 모듈의 로딩을 지연시킬 수 있나요? 감사해요!

답변1

운영체제의 역할은 무엇인가?

내 Debian에서는(하지만 CentOS도 같은 일을 할 것이라고 확신합니다) 초기화의 모듈 로딩 부분은 /etc/init.d/kmod.

다음은 스크립트에서 발췌한 내용입니다.

files=$(modules_files)
if [ "$files" ] ; then
  grep -h '^[^#]' $files |
  while read module args; do
    [ "$module" ] || continue
    load_module "$module" "$args"
  done
fi

어디:

  • modules_files/etc/modules-load.d다양한 파일과 디렉터리(포함 )를 구문 분석하고 로드할 모듈 목록을 작성하는 쉘 함수입니다 .

  • load_modulemodprobe자세한 플래그가 설정된 경우 작업 + 일부 로깅을 수행하는 쉘 함수입니다 .

예, 모듈은 순서대로 로드됩니다. 한 모듈이 차단되면 다른 모듈도 차단됩니다...

하지만...

 코어는 무엇을 하는가?

소스코드를 읽을 때리눅스/module.c우리는 그것을 볼 수 있습니다:

  • 시스템 호출은 함수로 구현될 수 있습니다 load_module(). 많은 작업(초기화, 메모리 할당, 무결성 검사, 서명 검사 등)을 수행하고 반환 return do_init_module(mod);(3927호선

  • do_init_module()기능은 다음에서 실행됩니다.3574라인다음을 수행하고 모든 것이 정상이면 0을 반환합니다.

    if (mod->init != NULL)
        ret = do_one_initcall(mod->init);
    if (ret < 0) {
        goto fail_free_freeinit;
    }

내 결론은 다음과 같은 경우에만 시스템 호출이 반환된다는 것입니다. 1. 모듈이 메모리에 로드되었습니다. 2. init() 함수가 성공적으로 실행되었습니다.

따라서 호출이 wait_for_random_bytes()모듈 초기화 함수의 일부라면 그렇습니다. 다른 모듈이 로드되지 않을 수 있습니다.

관련 정보