天嵌 ARM开发社区

 找回密码
 注册
查看: 1465|回复: 2

EXPORT_SYMBOL导出后该如何使用,Makefile怎么连接它

[复制链接]
dreagonwoo 发表于 2014-7-30 17:21:30 | 显示全部楼层 |阅读模式
在驱动模块里有我
EXPORT_SYMBOL(print_test);
驱动A的Makefile
KERNEL_DIR ?= /opt/EmbedSky/linux-2.6.30.4
modules:
        $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
生成Module.symvers文件里有如下信息
0x00000000        led_print        /mnt/arm9/devlesson/mydevtimer0export/mydevtimer        EXPORT_SYMBOL_GPL
0x00000000        print_task        /mnt/arm9/devlesson/mydevtimer0export/mydevtimer        EXPORT_SYMBOL
******************************************************************
据说要引用EXPORT_SYMBOL的函数需要在【调用者】的Makefile加入环境变量KBUILD_EXTRA_SYMBOLS
于是我在调用驱动B的Makefile加入
KBUILD_EXTRA_SYMBOLS=/mnt/arm9/devlesson/mydevtimer0/Module.symvers
KERNEL_DIR ?= /opt/EmbedSky/linux-2.6.30.4
modules:
        $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules
编译通过
************************************
在开发板里insmod B.ko提示错误
insmod: can't insert 'B.ko': File exists

***********************************************************
另外一个困惑的问题,EXPORT_SYMBOL是不是只能提供给另一个【驱动调用】,而不能提供给【用户程序】???因为我写用户测试程序调用print_test提示
undefined reference to `print_test'
那么所谓的用户API接口,内核如何提供内用户程序呢????
Calvin 发表于 2014-7-30 17:54:01 | 显示全部楼层
这样的用法还真没用过,建议你参考一下源码树里面的Makefile
 楼主| dreagonwoo 发表于 2014-7-31 08:56:26 | 显示全部楼层
已经解决两个模块相互调用EXPORT_SYMBOL导出函数
当初为了图省事,模块B在注册模块名时候与模块A相同,只要保证模块A、B注册名字不同,insmod就不会报错
alloc_chrdev_region(&devno, 0, 2, "MYDEVMOD_A");
alloc_chrdev_region(&devno, 0, 2, "MYDEVMOD_B");
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-17 21:16 , Processed in 1.031244 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表