私はカーネルモジュールの開発を学ぶために最小限のLinuxディストリビューションを作るためにbuildrootを使用しています。
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
です。
これは正確なストレージこれにより問題が発生します。
ちなみに、モジュールコードは次のようになります。
#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
すでに組み込まれています。カーネルジョブキューの動作に影響を与えるパラメータの名前空間を提供することもできます。