• 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);
  • 相关阅读:
    Java的字符串及格式化输入输出
    Java的数据类型与类型转换
    java基本程序
    svn基础入门
    github基础入门笔记
    git基础入门笔记
    linux基础入门笔记
    二、FreeMarker 模版开发指南 第二章 数值和类型
    【CodeForces】[599B]Spongebob and Joke
    【CodeForces】[612B]HDD is Outdated Technology
  • 原文地址:https://www.cnblogs.com/codestub/p/2144965.html
Copyright © 2020-2023  润新知