커널에서 로드 가능한 모듈을 강제로 제거하는 방법

커널에서 로드 가능한 모듈을 강제로 제거하는 방법

장치 파일을 사용 class_create()하고 device_create()실행할 수 있는 간단한 장치 드라이버를 작성했습니다. 그러나 내 드라이버의 종료 함수에서는 클래스를 먼저 파괴한 다음 드라이버를 파괴합니다. 즉, class_destroy()먼저 호출한 다음 드라이버를 호출합니다 device_destroy(). 이로 인해 커널 로그에 일부 오류 메시지가 표시되지만 종료 기능에 넣은 출력 메시지는 표시되지 않습니다.

드라이버도 제거되지 않았으며 아직 사용 중이라고 합니다.

나는 알고 싶다:

  1. 클래스를 먼저 해제한 후 디바이스를 삭제하는 실수를 했다고 생각되므로 해당 오류 메시지는 적절합니다. 하지만 지금은 드라이버 삭제를 사용할 수 없습니다 rmmod. 시스템을 다시 시작하지 않고 드라이버를 제거할 수 있는 방법이 있습니까?

  2. lsmod어느 서비스가 내 드라이버를 사용하고 있는지 확인한 적이 있습니다. 그러나 "사용"을 표시 1하는 대신 개수는 입니다 -1. 이 행동의 이유는 무엇입니까?

답변1

man rmmod:

NAME
       rmmod - Simple program to remove a module from the
       Linux Kernel

SYNOPSIS
       rmmod [-f] [-s] [-v] [modulename]

DESCRIPTION
       rmmod is a trivial program to remove a module (when
       module unloading support is provided) from the kernel.
       Most users will want to use modprobe(8) with the -r
       option instead.

OPTIONS
       -v, --verbose
           Print messages about what the program is doing.
           Usually rmmod prints messages only if something
           goes wrong.

       -f, --force
           This option can be extremely dangerous: it has no
           effect unless CONFIG_MODULE_FORCE_UNLOAD was set
           when the kernel was compiled. With this option,
           you can remove modules which are being used, or
           which are not designed to be removed, or have been
           marked as unsafe (see lsmod(8)).

를 사용하려면  -f커널에 CONFIG_MODULE_FORCE_UNLOAD이 옵션이 설정되어 있어야 합니다. 설정되었는지 확인하려면 다음을 사용하세요.

/boot$ grep CONFIG_MODULE_FORCE_UNLOAD config-`uname -r`
CONFIG_MODULE_FORCE_UNLOAD=y

(배포판의 /boot 아래에 구성이 설치되어 있는 경우...)

사용 횟수는 -1다음을 참조하세요.답변

관련 정보