zoukankan      html  css  js  c++  java
  • 驱动导出符号表

    对于有依赖的模块加载卸载顺序

    加载顺序:先加载依赖模块,在加载模块;  卸载顺序:先卸载模块,在卸载依赖模块

    驱动中的符号表类似吗,应用程序中的头文件用于把源文件中的函数名声明方便外部模块使用

    math.c驱动程序

    #include <linux/module.h>
    int myadd(int x, int y) { return (x + y); } EXPORT_SYMBOL(myadd); // 导出函数符号,使之外部可见

    int mysub(int x, int y) { return (x - y); } EXPORT_SYMBOL(mysub);
    static int __init math_init(void) { printk(KERN_DEBUG "-----%s----%d. ",__func__,__LINE__); return 0; } static void __exit math_exit(void) { printk(KERN_ERR "-----%s----%d. ",__func__,__LINE__); } module_init(math_init); module_exit(math_exit); MODULE_LICENSE("GPL");

    demo.c驱动程序

    #include <linux/module.h>
    
    // 声明外部符号
    extern int myadd(int x, int y);
    extern int mysub(int x, int y);
    
    static int __init demo_init(void)
    {
        printk(KERN_DEBUG " init %s---- %d
    ",__func__,__LINE__);
        // 加载模块时打印
        printk(" %d ---
     ",myadd(6,8)); 
        printk(" %d -- 
     ",mysub(9,2));
        return 0;
    }
    static void __exit demo_exit(void)
    {
        printk(KERN_INFO" exit %s --- %d
    ",__func__,__LINE__);
    }
    module_init(demo_init);
    module_exit(demo_exit);
    MODULE_LICENSE("GPL");

    使用同一架构下编译这两个模块,matn.c 编译生成 math.ko 模块,demo.c 编译生成 demo.ko 模块,demo 模块中,使用了math.ko 模块中的函数(符号),这就要先加载math.ko模块(先加载依赖模块),然后在加载demo.ko模块。

    在安装math.ko 模块后,安装demo.ko 模块依旧报错

    安装demo.ko模块提示错误:insmod: ERROR: could not insert module demo.ko: Invalid parameters

     这是因为demo.ko目录下的符号表 Module.symvers  没有math.ko导出的符号;

    math目录下的符号表拷贝到demo目录下,然后重新make下,demo.ko就可以正常使用math模块导出的符号了

  • 相关阅读:
    对象属性操作-包含kvc---ios
    UserDefault的使用,保存小数据到本地-iOS
    单例模式-ios
    值类型和引用类型
    [fn]焦点图JQ插件版
    [f]区间随机数函数
    css3动画特效集合
    js中的事件代理(委托)
    Nodejs入门【转载】保留备用
    canvas打字效果
  • 原文地址:https://www.cnblogs.com/electronic/p/11141804.html
Copyright © 2011-2022 走看看