zoukankan      html  css  js  c++  java
  • linux预备知识

    我们正在接近去看一些实际的模块代码. 但是首先, 我们需要看一些需要出现在你的模块 源码文件中的东西. 内核是一个独特的环境, 它将它的要求强加于要和它接口的代码上.

    大部分内核代码包含了许多数量的头文件来获得函数, 数据结构和变量的定义. 我们将在 碰到它们时检查这些文件, 但是有几个文件对模块是特殊的, 必须出现在每一个可加载模 块中. 因此, 几乎所有模块代码都有下面内容:

    #include <linux/module.h>

    #include <linux/init.h>

    moudle.h 包含了大量加载模块需要的函数和符号的定义. 你需要 init.h 来指定你的初始 化和清理函数, 如我们在上面的 "hello world" 例子里见到的, 这个我们在下一节中再讲. 大部分模块还包含 moudleparam.h, 使得可以在模块加载时传递参数给模块. 我们将很快 遇到.

    不是严格要求的, 但是你的模块确实应当指定它的代码使用哪个许可. 做到这一点只需包 含一行 MODULE_LICENSE:

    MODULE_LICENSE("GPL");

    内核认识的特定许可有, "GPL"( 适用 GNU 通用公共许可的任何版本 ), "GPL v2"( 只适 用 GPL 版本 2 ), "GPL and additional rights", "Dual BSD/GPL", "Dual MPL/GPL", 和 "Proprietary". 除非你的模块明确标识是在内核认识的一个自由许可下, 否则就假定 它是私有的, 内核在模块加载时被"弄污浊"了. 象我们在第 1 章"许可条款"中提到的, 内 核开发者不会热心帮助在加载了私有模块后遇到问题的用户.

    可以在模块中包含的其他描述性定义有 MODULE_AUTHOR ( 声明谁编写了模块 ), MODULE_DESCRIPION( 一个人可读的关于模块做什么的声明 ), MODULE_VERSION ( 一个代 码修订版本号; 看 <linux/module.h> 的注释以便知道创建版本字串使用的惯例), MODULE_ALIAS ( 模块为人所知的另一个名子 ), 以及 MODULE_DEVICE_TABLE ( 来告知用 户空间, 模块支持那些设备 ). 我们会讨论 MODULE_ALIAS 在第 11 章以及 MUDULE_DEVICE_TABLE 在第 12 章.

    各种 MODULE_ 声明可以出现在你的源码文件的任何函数之外的地方. 但是, 一个内核代码 中相对近期的惯例是把这些声明放在文件末尾.

  • 相关阅读:
    IIS部署web Service使用浏览器测试
    VS编译运行时提示:应用程序并行配置不正确,无法启动程序
    VS编译失败但是错误输出页中没有显示任何错误信息
    在客户端机器上使用PlSql,登录dba账号提示ORA-01031:insufficient privileges或 ORA-01017: invalid username/password; logon denied错误。
    FTP搭建注意事项
    .Net DLL类库引用时没有注释信息
    Oracle数据库连接超时
    Oracle触发器编译错误及解决方案
    VMware命令行模式安装CentOS 7后设置固定IP
    洲-国家 二级联动整体解决方案
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11138338.html
Copyright © 2011-2022 走看看