为什么标记了一些内核模块(F)

时间:2014-08-27 21:54:33

标签: module linux-kernel

/ proc / modules 中列出的某些模块标有(F) - 我认为意味着强行加载。 我相信他们不是。如果我卸载并重新加载模块,则(F)消失。

例如:

squashfs 47871 1 - Live 0xffffffffa0100000 (F)
ast 56335 1 - Live 0xffffffffa00c4000 (F)
ttm 79926 1 ast, Live 0xffffffffa00e5000 (F)
drm_kms_helper 50129 1 ast, Live 0xffffffffa00d7000 (F)
drm 272304 3 ast,ttm,drm_kms_helper, Live 0xffffffffa0080000 (F)
i2c_algo_bit 13250 1 ast, Live 0xffffffffa0053000 (F)
i2c_core 38513 6 i2c_dev,i2c_i801,ast,drm_kms_helper,drm,i2c_algo_bit, \
        Live 0xffffffffa0075000 (F)
usb_storage 56610 0 - Live 0xffffffffa005d000 (F)
mpt2sas 189642 16 - Live 0xffffffffa0023000 (F)
scsi_transport_sas 39231 1 mpt2sas, Live 0xffffffffa0012000 (F)

1 个答案:

答案 0 :(得分:0)

使用source,Luke!

static size_t module_flags_taint(struct module *mod, char *buf)
{
    size_t l = 0;

    if (mod->taints & (1 << TAINT_PROPRIETARY_MODULE))
        buf[l++] = 'P';
    if (mod->taints & (1 << TAINT_OOT_MODULE))
        buf[l++] = 'O';
    if (mod->taints & (1 << TAINT_FORCED_MODULE))
        buf[l++] = 'F';
    if (mod->taints & (1 << TAINT_CRAP))
        buf[l++] = 'C';
    if (mod->taints & (1 << TAINT_UNSIGNED_MODULE))
        buf[l++] = 'E';
    /*
     * TAINT_FORCED_RMMOD: could be added.
     * TAINT_CPU_OUT_OF_SPEC, TAINT_MACHINE_CHECK, TAINT_BAD_PAGE don't
     * apply to modules.
     */
    return l;
}

这些模块肯定是被迫的。 (当使用版本信息编译内核时也会发生这种情况,但模块不是。)