![modprobe는 udev가 요청한 드라이버를 어디에서 로드합니까?](https://linux55.com/image/100843/modprobe%EB%8A%94%20udev%EA%B0%80%20%EC%9A%94%EC%B2%AD%ED%95%9C%20%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84%EB%A5%BC%20%EC%96%B4%EB%94%94%EC%97%90%EC%84%9C%20%EB%A1%9C%EB%93%9C%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
Linux 시스템이 정상적으로 실행되고 있는 시나리오를 가정해 보겠습니다. 사용자가 나타나고핫스왑USB 저장 장치.
이벤트 순서는 다음과 같습니다.
modprobe는 드라이버를 어디에서 로드합니까? 요청한 장치의 드라이버가 /sys/bus/drivers
modprobe 로드 후 또는 이전에 발견되었습니까?
/sys/
여기서 제가 설정하려는 것은 위 이미지의 항목과 발생한 이벤트 간의 관계입니다.
답변1
uevent 메시지에는 장치에 대한 정보가 포함되어 있습니다(예). 이 정보에는 PCI 및 USB와 같은 버스에 연결된 장치의 등록된 공급업체 및 모델 ID가 포함되어 있습니다. Udev는 이러한 이벤트를 구문 분석하고 고정 형식 모듈 이름을 구성하여 에 전달합니다 modprobe
. modprobe
아래에서 커널을 설치할 때 생성되고 고정 형식 모듈 이름을 실제 드라이버 프로그램 모듈 파일 이름에 매핑하는 /lib/modules/VERSION
이라는 파일을 찾으십시오. depmod.alias
바라보다드라이버 모듈은 자동으로 로드 및 언로드됩니까?프로세스에 대한 자세한 내용 - 이 답변은 modprobe
커널에서 직접 호출하는 초기 단계를 설명하지만 모듈 별칭이 작동하는 방식은 modprobe
변경되지 않았습니다.
당신은 또한 볼 수 있습니다Michael Opdenacker의 강연 "udev를 이용한 핫플러깅"더 많은 예제가 있고 udev를 사용한 장치 관리의 다른 측면을 설명합니다.처음부터 Linux 가이드고정 형식 모듈 이름을 정의하는 방법에 대한 섹션이 있습니다.
modprobe
호출하여 모듈 로드init_module
시스템 호출. 어떤 방식으로든 sysfs와 상호 작용하지 않습니다. 모듈이 로드되면 커널은 에 해당 모듈에 대한 항목을 생성합니다 /sys/module
. sysfs의 다른 곳에 나타나는 모든 항목은 모듈의 코드에 따라 다릅니다(예를 들어 USB 장치 유형 드라이버가 있는 모듈은 아래에 항목을 추가하는 일부 일반 USB 지원 코드를 호출합니다 /sys/bus/usb/drivers
).