• linux内核模块


    lsmod实际上读取并分析/proc/modules文件

    cat /proc/modules 

    内核中已加载的模块的信息存在于/sys/modules. /sys/module 是一个 sysfs 目录层次, 包含当前加载模块的信息. /proc/moudles 是旧式的, 那种信息的单个文件版本. 其中的条目包含了模块名, 每个模块占用的内存数量, 以及使用计数. 另外的字串追加到每行的末尾来指定标志, 对这个模块当前是活动的.

    linux内核模块程序结构
    1) 加载函数(一般需要)
    当通过insmod或modprobe加载内核模块时, 模块的加载函数会自动被内核执行.

    static int __init initialization_function(void)
    {
    /*初始化代码*/
    }
    module_init(initialization_function); 

    2) 卸载函数(一般需要)
    当通过rmmod或者modprobe -r卸载模块时.

    static int __init cleanup_function(void)
    {
    /*释放代码*/
    }
    module_exit(cleanup_function); 

    3) 模块许可声明(必须)
    如果不声明LICENSE, 模块被加载时, 会收到内核被污染(kernel tained)警告.

    MODULE_LICENSE("GPL"); 

    可选的LICENSE有: “GPL”, “GPL v2″, “GPL and additional rights”, “Dual BSD/GPL”,
    “Dual MPL/GPL”, “Proprietary”.

    4) 模块参数(可选)

    module_param(parm, parm_type, module_flags); 

    如果权限允许, 可以在/sys/modules/module_name/parameters/下面看到模块的参数.

    5) 模块导出符号(可选)

    EXPORT_SYMBOL(符号名);
    EXPORT_SYMBOL_GPL(符号名); 

    6) 模块作者等信息(可选)

    MODULE_AUTHOR(author);
    MODULE_DESCRIPTION(description);
    MODULE_VERSION(version_string);
    MODULE_DEVICE_TABLE(table_info);
    MODULE_ALIAS(alternate_name);
  • 相关阅读:
    bzoj 2152: 聪聪可可 树的点分治
    Contest 20141027 总结
    bzoj 3505: [Cqoi2014]数三角形 组合数学
    bzoj 3624: [Apio2008]免费道路 生成树的构造
    tyvj P1075
    poj 2778 DNA Sequence AC自动机
    poj 2778 DNA Sequence AC自动机DP 矩阵优化
    bzoj 3626: [LNOI2014]LCA 离线+树链剖分
    BZOJ 1412: [ZJOI2009]狼和羊的故事【网络流】
    ACDream:1210:Chinese Girls' Amusement【水题】
  • 原文地址:https://www.cnblogs.com/codestub/p/2144965.html
Copyright © 2020-2023  润新知