로드 가능한 모듈을 제거할 수 없습니다.

로드 가능한 모듈을 제거할 수 없습니다.

Linux 장치 드라이버를 이해하려고 합니다. 다음을 사용하여 모듈을 설치하려고합니다.모듈 삽입명령줄에서. 삽입 후 로드된 모듈을 제거하려고 했으나 오류로 인해 실패했고,

could not remove module hello: Device or resource busy

내가 찾은이 링크하지만 유효한 답변을 제공하는 것 같지 않습니다.

hello.c다음은 이 모듈의 C 코드입니다( ).

#include <linux/module.h>   /* Needed by all modules */
#include <linux/kernel.h>   /* Needed for KERN_INFO */
#include <linux/init.h>     /* Needed for the macros */

static int data __initdata = 3;

#ifdef USE_OLDER_NAMING

int init_module(void)
{
    printk(KERN_INFO "Hello world 1.\n");

    return -1;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}

#else

static int __init my_init(void)
{
    printk(KERN_ALERT "Hello Module Inserted : %d \n",data);
    return 0;
}

static void __exit my_exit(void)
{
    printk(KERN_ALERT "Hello Module removed : %d \n",data);
    return;
}

module_init(my_init);
module_exit(my_exit);

#endif

이 모듈을 컴파일하기 위해 다음 Makefile을 사용하고 있습니다.

obj-m += hello.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

컴파일 후 명령을 사용하여 모듈을 설치합니다 sudo insmod ./hello.ko. 에서 로드된 모듈을 볼 수 있습니다 /proc/modules. 출력 cat /proc/modules | grep hello은 입니다 hello 12490 0 - Live 0x0000000000000000 (POF).

체크인하면 dmesg로그를 볼 수 있습니다 Hello Module Inserted : 3. 모듈을 제거하려고 하면 다음 오류가 발생합니다.

rmmod: ERROR: ../libkmod/libkmod-module.c:769 kmod_module_remove_module() could not remove 'hello': Device or resource busy
rmmod: ERROR: could not remove module hello: Device or resource busy

의 출력은 cat /proc/modules | grep hello다음과 같습니다hello 12422 0 - Unloading 0x0000000000000000 (POF-)

제 질문은 이 모듈을 제거하는 방법입니다. 시퀀스/코드에 어떤 문제가 있나요?

답변1

먼저, 귀하의 반품 명세서에내 출구이 문제를 일으키는 기능입니다.

제거 부분의 경우, 모듈을 강제로 제거하려면 활성화해야 합니다.CONFIG_MODULE_FORCE_UNLOAD커널에서. 그렇지 않으면 시스템을 다시 시작해야 합니다.

관련 정보