• linux内核模块开发


     

    一,内核模块功能: 让内核文件(zImage或bzImage)本身并不包含某组件,而是在该 
    组件需要被使用的时候,动态地添加到正在运行的内核中

    二,内核模块安装和卸载
    加载:insmod (insmod hello.ko)
    卸载:rmmod (rmmod hello)
    查看:lsmod
    加载:modprobe (modprobe hello)
    modprobe如同insmod,也是加载一个模块到内核。它的不同之处在于它会根据文件
    /lib/modules/<$version>/modules.dep
    来查看要加载的模块,看它是否还依赖于其他模块,如果是,modprobe会首先找到 
    这些模块,把它们先加载到内核。

    三,模块可选信息:
    1、许可证申明
    宏MODULE_LICENSE用来告知内核, 该模块带有一个许可证,没有这样的说明,加载模 
    块时内核会抱怨。有效的许可证有"GPL“、"GPL v2"、"GPL and 
    additionalrights"、"Dual BSD/GPL"、"Dual MPL/GPL"和"Proprietary"。
    2、作者申明(可选)
    MODULE_AUTHOR(“Simon Li");
    3、模块描述(可选)
    MODULE_DESCRIPTION("Hello World Module");
    4、模块版本(可选)
    MODULE_VERSION("V1.0");
    5、模块别名(可选)
    MODULE_ALIAS("a simple module");
    6、模块参数
    通过宏module_param指定模块参数,模块参数用于在加载模块时传递参数给模块。
    module_param(name,type,perm)
    name是模块参数的名称,type是这个参数的类型,perm是模块参数的访问 
    权限。
    type常见值:
    bool:布尔型 int:整型 charp:字符串型
    perm 常见值:
    S_IRUGO:任何用户都对/sys/module中出现的该参数具有读权限
    S_IWUSR:允许root用户修改/sys/module中出现的该参数
    /**************PARAM**************************/
    #include<linux/init.h>
    #include<linux/module.h>

    MODULE_LICENSE("GPL");

    static char *name = "Daniel Guo";
    static int age = 30;

    module_param(age, int, S_IRUGO); 
    module_param(name, charp, S_IRUGO);

    static int __init hello_init()
    {
    printk(KERN_EMERG" Name:%s ", name);
    printk(KERN_EMERG" Age:%d ", age);
    return 0;
    }

    static void __exit hello_exit()
    {
    printk(KERN_INFO" Module Exit ");
    }

    module_init(hello_init);
    module_exit(hello_exit);

    /***************************************************/
    命令:
    make
    insmod param.ko
    rmmod param
    insmod param.ko age=12
    /****************************************************/


    四,内核符号导出
    /proc/kallsyms 记录了内核中所有导出的符号的名字与地址。
    EXPORT_SYMBOL(func); /*func为函数名称,供其他模块使用的*/
    内核符号的导出使用:
    EXPORT_SYMBOL(符号名)
    EXPORT_SYMBOL_GPL(符号名)
    其中EXPORT_SYMBOL_GPL只能用于包含GPL许可证的模块。

    http://www.cnblogs.com/FORFISH/p/5188421.html

  • 相关阅读:
    thinkphp5分页
    thinkphp 获取器、修改器
    Thinkphp中对数据库的基础操作
    MYSQL 数据库内容的分页展示
    单例模式连接数据库
    简单的通过ajax ‘POST’ 方法实现与后台数据交互
    PHP中 .= 的意思
    mysqli 简单的php注册登录功能
    4.4
    梦断代码阅读笔记1
  • 原文地址:https://www.cnblogs.com/xiaoxiaodewo/p/5621630.html
Copyright © 2020-2023  润新知