일단 cat /proc/modules
과정의 세부 사항을 설명했습니다. 아래 모듈은 4개의 인스턴스가 있음을 보여줍니다.
poe_isr 3046 4 - Live 0xc37e1000 (O)
무슨 뜻이에요? 이러한 인스턴스의 사용량을 보려면 어떻게 해야 합니까? 모듈에 인스턴스가 0개 표시되고 활성 상태인 경우는 무엇을 의미합니까? 모듈이 로드되지 않았지만 여전히 유효합니까?
adcmods 1565 0 - Live 0xc37dd000 (P)
답변1
카운터입니다. 커널 API를 통해 늘리거나 줄일 수 있습니다.
언제 늘릴지는 모듈의 책임입니다. 예를 들어 somefs
커널에 모듈이 있는 경우 wait 동작은 파티션이 마운트될 때 이 카운터를 증가시키고 somefs
마운트 해제할 때 감소시키는 것입니다. 이렇게 하면 somefs
파티션이 마운트된 경우 삭제되지 않습니다 somefs
.
모듈 사용 카운터가 0이 아니면 rmmod
모듈이 실패합니다. 그러나 rmmod -f
강제 모듈 제거가 커널로 컴파일되는 경우에는 그렇지 않습니다.
따라서 중요한 사항은 다음과 같습니다.
- 카운터를 늘리고 줄이는 것은 모듈의 책임입니다.그 뒤에는 복잡한 일반 참조 추적이 없습니다..
- 대부분의 경우 제대로 작동하지만 항상 그런 것은 아닙니다. 예를 들어
ipv6
이런 방식으로 작동하는 일부 더티 모듈은 카운터를 1로 늘리고insmod
결코 줄이지 않습니다. 따라서ipv6
모듈로 컴파일하면 절대rmmod
이 작업을 수행할 수 없습니다. 일부 그래픽 카드 드라이버는 초기화를 해제하는 루틴이 없기 때문에 비슷한 방식으로 작동합니다. 개발자가 자랑스러워할 수 있는 모듈은 없습니다. - 결과적으로 모듈을 제거할 수 없는 경우 모듈이 정확히 무엇을 사용하는지 알아낼 수 있는 일반적인 방법은 없습니다.
답변2
poe_isr 3046 4 - Live 0xc37e1000 (O)
세 번째 열은 4개의 종속 모듈/프로세스가 있음을 나타냅니다. 그래서 rmmod
작동하지 않습니다. 네 번째 열은 이것이 모듈인지 비모듈인지를 나타냅니다. '-'는 4개의 예 및 아니요 모듈을 의미합니다. 위의 예에서 poe_isr은 4개의 비모듈에 의존합니다.