什么是Linux中的OE +?

时间:2016-09-11 12:10:27

标签: linux-kernel kernel-module

以下(OE+)的含义是什么?

$ sudo cat /proc/modules | grep hello //hello_world is a kernel module created by me.
hello_world 20480 1 - Loading 0xffffffffc0221000 (OE+)

这是我的情况。
我修补了Linux内核函数load_module(),它是从finit_module()调用的,insmod用来插入内核模块的系统调用。 该补丁会查找由我创建的特定模块(称为hello_world),当它发生时,它会阻止对do_init_module()的调用,而是返回0。 do_init_call()负责调用模块的init函数,并将模块状态设置为实时(MODULE_STATE_LIVE)。

当我阅读/proc/modules时,模块状态为Loading,这是预期的。但是我不明白输出结束时(OE+)的含义。这不会显示在任何其他模块上,如以下命令所示。

$ sudo cat /proc/modules | grep OE
hello_world 20480 1 - Loading 0xffffffffc0221000 (OE+)

我正在使用Linux内核v4.7.3

更新

这一切都发生在Qemu虚拟机中。在运行Linux 4.4.0-36-generic (Ubuntu)的主机上,我得到以下内容。

$ sudo cat /proc/modules | grep OE
vboxpci 24576 0 - Live 0xffffffffc082a000 (OE)
vboxnetadp 28672 0 - Live 0xffffffffc066e000 (OE)
vboxnetflt 28672 0 - Live 0xffffffffc0635000 (OE)
vboxdrv 454656 3 vboxpci,vboxnetadp,vboxnetflt, Live 0xffffffffc0783000 (OE)
sep4_0 671744 0 - Live 0xffffffffc06de000 (OE)
socperf2_0 36864 1 sep4_0, Live 0xffffffffc0660000 (OE)
pax 16384 0 - Live 0xffffffffc05f9000 (OE)

1 个答案:

答案 0 :(得分:5)

O表示已加载了树外模块 E表示已加载未签名模块 +表示正在加载模块 -表示正在卸载模块。

print_modules(),然后module_flags()以及print_tainted()函数的源代码可能有助于弄清楚这些和其他一些标志的含义。请查看print_tainted()函数上方的注释。希望这会有所帮助。

相关问题