linux – 内核模块的insmod如何失败已经加载,即使lsmod不包含该模块?

我正在使用buildroot创建一个最小的Linux发行版来学习内核模块开发.

如果我调用一个最小模块hello.ko(或几乎我尝试过的任何其他名称),一切正常.

但是,如果我使用完全相同的代码,但调用模块workqueue.ko,insmod workqueue.ko失败,dmesg包含:

workqueue: module is already loaded

和insmod输出到stderr:

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

lsmod和cat / proc / modules都是空的.

这是产生问题的the exact repo.

供参考,模块代码是:

#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.

解决方法:

$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

它已经是内置的.可能为影响内核工作队列行为的参数提供命名空间.

上一篇:使用Buildroot为Raspberry Pi 3构建rootfs系统时出错 – 缺少SysV IPC支持


下一篇:linux – Buildroot定制内核低于1MB