lsmod에 모듈이 포함되어 있지 않은 경우에도 커널 모듈이 이미 로드되어 있으므로 insmod가 어떻게 실패할 수 있습니까?

lsmod에 모듈이 포함되어 있지 않은 경우에도 커널 모듈이 이미 로드되어 있으므로 insmod가 어떻게 실패할 수 있습니까?

저는 커널 모듈 개발을 배우기 위해 최소한의 Linux 배포판을 만들기 위해 buildroot를 사용하고 있습니다.

hello.ko최소한의 모듈 (또는 내가 시도한 거의 모든 다른 이름) 을 호출하면 모든 것이 잘 작동합니다.

그러나 정확히 동일한 코드를 사용했지만 모듈 호출이 workqueue.ko실패하면 insmod workqueue.kodmesg에는 다음이 포함됩니다.

workqueue: module is already loaded

그리고 insmodstderr로 출력합니다:

insmod: can't insert 'workqueue.ko': invalid argument

lsmodcat /proc/modules비어 있습니다.

이것은정확한 저장소이로 인해 문제가 발생합니다.

참고로 모듈 코드는 다음과 같습니다.

#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");

int init_module(void)
{
    printk(KERN_INFO "hello init\n");
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "hello cleanup\n");
}

커널 버전(buildroot가 암시하는 기본 버전)은 4.9입니다.

답변1

$ uname -a
Linux alan-laptop 4.10.14-200.fc25.x86_64 #1 SMP Wed May 3 22:52:30 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ ls /sys/module/workqueue/
parameters  uevent
$ ls /sys/module/workqueue/parameters/
debug_force_rr_cpu  disable_numa  power_efficient

이미 내장되어 있습니다. 커널 작업 대기열 동작에 영향을 미치는 매개변수에 대한 네임스페이스를 제공할 수도 있습니다.

관련 정보