Linux 커널은 모듈을 어떻게 동적으로 사용합니까?

Linux 커널은 모듈을 어떻게 동적으로 사용합니까?

Linux 커널 이해하기

커널은 모듈을 관리할 때 두 가지 주요 작업을 수행해야 합니다. 첫 번째 작업은 커널의 나머지 부분이 주요 기능의 진입점과 같은 모듈의 전역 기호에 도달할 수 있도록 하는 것입니다. 모듈은 커널 및 기타 모듈의 기호 주소도 알아야 합니다. 그러므로,모듈을 연결하면 참조가 한 번 해결됩니다.두 번째 작업은 다른 모듈이나 커널의 다른 부분이 모듈을 사용하는 동안 모듈이 언로드되지 않도록 모듈 사용을 추적하는 것으로 구성됩니다. 간단한 참조 횟수를 통해 각 모듈의 사용량을 추적할 수 있습니다.

모든 공유 라이브러리는 동적으로 링크되고( 를 사용하여 LD_LIBRARY_PATH) 동적으로 로드될 수 있습니다( dlopen(), dlsym()및 를 통해 dlclose()). 이것이 맞습니까?

모듈은 Linux 커널의 공유 라이브러리입니까?

Linux 커널은 모듈을 어떻게 동적으로 사용합니까? 동적 연결( 사용)을 통해서인가요, LD_LIBRARY_PATH아니면 동적 로딩( dlopen(), dlsym()및 을 통해 dlclose())을 통해서인가요?

답변1

모든 공유 라이브러리는 동적으로 링크되고( 를 사용하여 LD_LIBRARY_PATH) 동적으로 로드될 수 있습니다( dlopen(), dlsym()및 를 통해 dlclose()). 이것이 맞습니까?

예. 차이점은 동적 링커가 동적 링커에 의해 구동되며 프로그램이 시작될 때(프로그램 작성자의 관점에서) 라이브러리가 이미 링크되었으며 모든 기호가 확인되어 이 모든 작업이 수동으로 수행된다는 점입니다.

모듈은 Linux 커널의 공유 라이브러리입니까?

다소간 로딩 메커니즘이 다릅니다. 동적 링커와 는 libdl커널이 아닌 사용자 공간에서만 사용됩니다.

Linux 커널은 모듈을 어떻게 동적으로 사용합니까? 동적 연결( 사용)을 통해서인가요, LD_LIBRARY_PATH아니면 동적 로딩( dlopen(), dlsym()및 을 통해 dlclose())을 통해서인가요?

커널은 다음을 사용하여 모듈을 로드합니다.load_module, ELF 개체 로드, 필요한 세그먼트 매핑, 모든 재배치 수행 등 모든 작업을 자체적으로 수행합니다. 또한 라이센스 확인, 연결 sysfs, 초기화 함수 호출 등 모듈별 작업도 수행합니다.

load_module사용자 공간에서 접근init_module또는 시스템 finit_module호출.

관련 정보