zoukankan      html  css  js  c++  java
  • 内核驱动——符号表的导出

    1.EXPORT_SYMBOL的使用

    这个函数可以实现模块间的函数接口以及全局变量。

    一、在函数定义后使用EXPORT_SYMBOL(函数名)

    二、在调用该函数的模块中extern这个函数

    三、首先加载定义这个函数的模块,再加载调用这个函数的模块

    2.例子

    hello1.c

    #include <linux/init.h>
    #include <linux/module.h>
    
    MODULE_LICENSE("GPL");
    
    static int num = 10;
    static void show(void)
    {
        printk(KERN_ALERT "show(),num=%d
    ", num);
    }
    
    static int hello_init(void)
    {
        printk(KERN_ALERT "hello
    ");
        return 0;
    }
    static void hello_exit(void)
    {
        printk(KERN_ALERT "Goodbye
    ");
    }
    
    EXPORT_SYMBOL(show);
    
    module_init(hello_init);
    module_exit(hello_exit);

    show.c

    #include <linux/module.h>
    
    MODULE_LICENSE("GPL");
    
    extern void show(void);
    //在这个模块中调用hello模块中的show函数,要在hello中使用export_symbol
    //1.要先编译被调用的模块,将Module.symvers拷贝到b模块下
    //2.编译b模块
    //3.加载a模块,再加载b模块
    //4.卸载b模块,再卸载a模块
    static int show_init(void)
    {
        printk(KERN_ALERT "show_init
    ");
        show();
        return 0;
    }
    
    static void show_exit(void)
    {
        printk(KERN_ALERT "show_exit
    ");
    }
    
    module_init(show_init);
    module_exit(show_exit);

    3.现象

    # insmod hello1.ko 
    # insmod show.ko 
    # rmmod show
    # rmmod hello1
    # dmesg | tail -5
    [ 6039.628712] hello
    [ 6047.007841] show_init
    [ 6047.010223] show(),num=10
    [ 6051.315539] show_exit
    [ 6055.772762] Goodbye
  • 相关阅读:
    redis发布订阅
    redis学习笔记(面试题)
    redis安全 (error) NOAUTH Authentication required
    HDU3001 Travelling —— 状压DP(三进制)
    POJ3616 Milking Time —— DP
    POJ3186 Treats for the Cows —— DP
    HDU1074 Doing Homework —— 状压DP
    POJ1661 Help Jimmy —— DP
    HDU1260 Tickets —— DP
    HDU1176 免费馅饼 —— DP
  • 原文地址:https://www.cnblogs.com/ZQQH/p/8556006.html
Copyright © 2011-2022 走看看