x4412开发板&ibox卡片电脑项目实战18-驱动中导出符号
来源:互联网 发布:鼓浪屿酒店推荐 知乎 编辑:程序博客网 时间:2024/05/20 19:18
在驱动调试时,经常需要驱动互调,即在A驱动中调用B驱动中的相关函数。这时,驱动中的导出符号功能就可以大显身手了。/proc/kallsyms文件对应着内核符号表,它记录了符号以及符号所在的内存地址。
模块可以使用如下宏导出符号到内核符号表:
EXPORT _ SYMBOL(符号名);EXPORT _ SYMBOL _ GPL(符号名);
其他模块需要使用导出的符号时,只需声明一下即可。假设我们需要实现一个驱动,实现如下功能:
一:通过加载模块传递两个整型变量,模块加载成功后打印出传递的两个变量的和;
二:将模块中的变量相加的函数声明出去,以供其他模块使用;
我们继续在上一个实验的基础上修改,最终的hello-x4412.c源码如下:
#include <linux/module.h>#include <linux/init.h> static int a = 0;static int b = 0; module_param(a,int,0644);MODULE_PARM_DESC(str,"integer variablea"); module_param(b,int,0644);MODULE_PARM_DESC(str,"integer variableb"); int x4412_add(int a,int b){ returna+b;} EXPORT_SYMBOL(x4412_add); static int __devinit hello_x4412_init(void){ printk("thesum is:%d\r\n",a+b); return0;} static void hello_x4412_exit(void){ printk("Goodbye,x4412!\r\n");} module_init(hello_x4412_init);module_exit(hello_x4412_exit); MODULE_LICENSE("GPL");MODULE_AUTHOR("www.9tripod.com");MODULE_ALIAS("a character driversample");MODULE_DESCRIPTION("hello x4412 driver");
编译内核后,加载驱动验证驱动的正确性:
[root@x4412 mnt]# insmod hello-x4412.ko[ 1296.312641] the sum is:0[root@x4412 mnt]# rmmod hello-x4412.ko[ 1300.008432] Goodbye,x4412![root@x4412 mnt]# insmod hello-x4412.ko a=10 b=20[ 1307.283039] the sum is:30[root@x4412 mnt]#
可见,在加载模块时不传递变量时,其求和结果为0,和我们预定义的一致。当传递变量时,结果也和我们期望的一致。再查看/proc/kallsyms下是否生成了对应的符号列表:
[root@x4412 mnt]# more /proc/kallsyms |grep x4412c0023fe8 t init_rc_map_x4412……bf00c000 t $a [hello_x4412]bf00c014 t hello_x4412_exit [hello_x4412]bf00c030 t hello_x4412_init [hello_x4412]bf00c030 t $a [hello_x4412]bf00c058 t $d [hello_x4412]bf00c014 t cleanup_module [hello_x4412]bf00c030 t init_module [hello_x4412]bf00c000 T x4412_add [hello_x4412][root@x4412 mnt]#
在最后一行即为我们导出的符号x4412_add。
0 0
- x4412开发板&ibox卡片电脑项目实战18-驱动中导出符号
- x4412开发板&ibox卡片电脑项目实战18-驱动中导出符号
- x4412开发板&ibox卡片电脑项目实战11-linux驱动的调试方法
- x4412开发板&ibox卡片电脑项目实战12-linux驱动的加载方法
- x4412开发板&ibox卡片电脑项目实战14-linux驱动的编写步骤
- x4412开发板&ibox卡片电脑项目实战15-移植第一个hello x4412内核驱动
- x4412开发板&ibox卡片电脑项目实战16-将hello x4412驱动编译成模块
- x4412开发板&ibox卡片电脑项目实战1-uboot编译脚本解析
- x4412开发板&ibox卡片电脑项目实战2-内核编译脚本解析
- x4412开发板&ibox卡片电脑项目实战3-文件系统编译脚本解析
- x4412开发板&ibox卡片电脑项目实战5-修改内核LOGO
- x4412开发板&ibox卡片电脑项目实战6-配置内核
- x4412开发板&ibox卡片电脑项目实战7-Linux内核的引导
- x4412开发板&ibox卡片电脑项目实战10-使用buildroot搭建linux文件系统
- x4412开发板&ibox卡片电脑项目实战17-模块传参实验
- x4412开发板&ibox卡片电脑项目实战19-linux文件操作实验
- x4412开发板&ibox卡片电脑项目实战20-C库函数文件操作实验
- x4412开发板&ibox卡片电脑项目实战4-在uboot中添加开机LOGO
- x4412开发板&ibox卡片电脑项目实战11-linux驱动的调试方法
- x4412开发板&ibox卡片电脑项目实战12-linux驱动的加载方法
- x4412开发板&ibox卡片电脑项目实战14-linux驱动的编写步骤
- x4412开发板&ibox卡片电脑项目实战15-移植第一个hello x4412内核驱动
- x4412开发板&ibox卡片电脑项目实战16-将hello x4412驱动编译成模块
- x4412开发板&ibox卡片电脑项目实战18-驱动中导出符号
- x4412开发板&ibox卡片电脑项目实战17-模块传参实验
- x4412开发板&ibox卡片电脑项目实战19-linux文件操作实验
- x4412开发板&ibox卡片电脑项目实战20-C库函数文件操作实验
- DOS简易版C语言贪吃蛇
- Java编码测试
- 操作系统--输入输出--控制方式
- 操作系统-程序计数器
- 5种服务器网络编程模型讲解