zoukankan      html  css  js  c++  java
  • linux内核之模块参数及导出符号

    1. 模块参数

    module_param (参数名,参数类型,参数读 / 写权限) ” 为模块定义一个参数,例如下列代码定义了 个整型参数和 1 个字符指针参数:

    1 static char *book_name = "dissecting Linux Device Driver";
    2 module_param(book_name, charp, S_IRUGO);
    3 static int book_num = 4000;
    4 module_param(book_num, int, S_IRUGO);

    在装载内核模块时,用户可以向模块传递参数,形式为insmode 模块名 参数名 = 参数值,如果不传递,参数将使用模块内定义的缺省值。参数类型可以是 byte short ushort int uint long ulong charp (字符指针)、 bool invbool (布尔的反),在模块被编译时会将 module_param 中声明的类型与变量定义的类型进行比较,判断是否一致。模块被加载后,在 /sys/module/ 目录下将出现以此模块名命名的目录。在此模块的目录下还将出现 parameters 目录,其中包含一系列以参数名命名的文件节点,这些文件的权限值就是传入module_param ()的 “参数读 / 写权限” ,而文件的内容为参数的值。

    insmod命令加载模块后,通过查看/var/log/messages” 日志文件可以看到内核的输出:

    # tail -n 2 /var/log/messages
    

    tail -n 2表示输入文件的最后2行

    2. 导出符号

    Linux 的 “/proc/kallsyms” 文件对应着内核符号表,它记录了符号以及符号所在的内存地址。模块可以使用如下宏导出符号到内核符号表中:

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

    导出的符号可以被其他模块使用,只需使用前声明一下即可。 EXPORT_SYMBOL_GPL ()只适用于包含 GPL许可权的模块。

    如果符号名是e_symbol”,/proc/kallsyms” 文件中找出 e_symbol 的相关信息:

    # grep e_symbol /proc/kallsyms

    8000af1c t e_symbol [export_symb]

  • 相关阅读:
    我国自主研发的先进辅助驾驶系统(ADAS)控制器产品实现量产配套
    国务院印发《新一代人工智能发展规划》
    如何删除svn标签
    【转载】DHCP流程
    1-1 如何进行自我规划?
    人要像鹰一样重生、蜕变、成长
    人的一生好像乘坐北京地铁一号线
    【转载】接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点
    【转载】BAT 批处理脚本教程
    SNAT 和 DNAT
  • 原文地址:https://www.cnblogs.com/-tbd-/p/12712830.html
Copyright © 2011-2022 走看看