zoukankan      html  css  js  c++  java
  • linux驱动开发---导出内核符号

    导出内核符号模板代码,验证小实例:

    /**
    *Copyright (c) 2013.TianYuan
    *All rights reserved.
    *
    *文件名称: Esdexp.c
    *文件标识: 导出内核符号,此文件中的函数模块被Esdimp.c调用
    *
    *当前版本:1.0
    *作者:wuyq 
    *
    *取代版本:xxx
    *原作者:xxx
    *完成日期:2013-11-18
    */
    #include <linux/init.h>
    #include <linux/module.h>
    
    //声明内核模块的许可权,如果不声明LISCENSE,模块加载时将收到内核被污染(kernel tainted)的警告
    MODULE_LICENSE("GPL");
    
    int esdexp_mult(int x, int y)
    {
    	printk("enter esdexp_mult!
    ");
    	return (x*y);
    }
    
    int esdexp_divd(int x, int y)
    {
    	printk("enter esdexp_divd!
    ");
    	return (x/y);
    }
    
    /*导出内核符号,定义的函数可以被其他函数调用*/
    EXPORT_SYMBOL(esdexp_mult);
    EXPORT_SYMBOL(esdexp_divd);
    /**
    *Copyright (c) 2013.TianYuan
    *All rights reserved.
    *
    *文件名称: Esdimp.c
    *文件标识: 验证Esdexp.c中的模块
    *
    *当前版本:1.0
    *作者:wuyq 
    *
    *取代版本:xxx
    *原作者:xxx
    *完成日期:2013-11-18
    */
    #include <linux/init.h>
    #include <linux/module.h>
    /*两个ko文件, 安装应该有顺序的 modprob*/
    
    //声明内核模块的许可权,如果不声明LISCENSE,模块加载时将收到内核被污染(kernel tainted)的警告
    MODULE_LICENSE("GPL");
    
    extern int esdexp_mult(int ,int );
    extern int esdexp_divd(int ,int );
    
    static int __init esdimp_init(void)
    {
    	int result = 0;
    	/*编译器、代码可移植性、健壮性 */
    	printk("enter esdimp_init!
    ");
    /*局部变量分配在栈内存中,赋初值。默认不一定为0*/	
    /*局部变量应该放在函数内,可执行代码之前。且赋初值。即:函数开头,否则会有警告信息。*/
    	result = esdexp_mult(10, 17);
    	printk("result = %d
    ", result);
    	return 0;
    }
    
    static void __exit esdimp_exit(void)
    {
    	int result = 0;
    	printk("enter esdimp_exit!
    ");
    	result = esdexp_mult(1000, 60);
    	printk("result = %d
    ", result);
    }
    
    module_init(esdimp_init);
    module_exit(esdimp_exit);
    
    KERNELDIR ?=/root/Desktop/work/ldd3/linux-2.6.31_TX2440A
    PWD := $(shell pwd)
    obj-m += Esdimp.o Esdexp.o
    #obj-m += Esdexp.o
    
    default:
    	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
    
    clean:
    	@rm -f *.o *.ord* *.sy* *.mod.* *.ko

    http://blog.csdn.net/waldmer/article/details/17575577
  • 相关阅读:
    属性与字段的区别
    修改LVDS支持1024*600分辨率
    Altium designer 10如何设置标题栏
    嵌入式C开发人员的最好的0x10道笔试题
    进程线程及堆栈关系的总结
    GDB调试
    c语言
    如何使用autotools生成Makefile
    ubuntu NFS
    Ubuntu安装配置TFTP服务
  • 原文地址:https://www.cnblogs.com/pengkunfan/p/3833588.html
Copyright © 2011-2022 走看看