当前位置: 技术问答>linux和unix
驱动接口调用问题,大家指教,初学。
来源: 互联网 发布时间:2016-04-17
本文导语: 在驱动里要调用别的驱动的接口函数,比如在音频里调用i2c等。是否可以直接调用i2c驱动目录下的.h ,还是一定要调用include/linux这个下面的.h ,为什么? 还有是不是被别的驱动调用的函数要用EXPORT_SYMBOL(func_a);这...
在驱动里要调用别的驱动的接口函数,比如在音频里调用i2c等。是否可以直接调用i2c驱动目录下的.h ,还是一定要调用include/linux这个下面的.h ,为什么?
还有是不是被别的驱动调用的函数要用EXPORT_SYMBOL(func_a);这个声明?用这个声明后是否还要在.h中给出才能用?
如果要在.h中给出才能用的话,那么EXPORT_SYMBOL(func_a);这个符号具体起的是什么作用?
还有是不是被别的驱动调用的函数要用EXPORT_SYMBOL(func_a);这个声明?用这个声明后是否还要在.h中给出才能用?
如果要在.h中给出才能用的话,那么EXPORT_SYMBOL(func_a);这个符号具体起的是什么作用?
|
1,原则上,头文件只要你的程序能找到,你都可以用。但是通常我们写driver,建议只用include下的头文件!
2,是的,要用EXPORT_SYMBOL将可能被别的驱动调用的函数导出。这个申明不需要在.h中给出!你在其它驱动中要用到EXPORT_SYMBOL()导出的函数的时侯,可以先用extern声明一下该函数来自外部引用!
我觉得你没有理解“头文件的工作原理”,看看书把!
|
说得没错,不要出现类似
#include “../xxx.h"
同一级目录的可以。
#include "xxx.h"
2. 用了EXPORT_SYMBOL,应该不需要extern了。
|
头文件原则上你可以放到任何地方,只要编译器能够找到即可!
编译器如何来找了,除了编译器默认的路径之外,可以用-I指定任意个路径,比如:
gcc -o test test.c -I/path1 -I/path2 -I/path2 ...
只要在头文件存在与这些路径下,编译器就可以找到! 另外,包含和.c 文件相同路径的头文件,不需要用-I指定!
如果你用上面的 -I指定,你也可以直接给头文件加上路径,比如:
#include "/yourheader/path/head.h" #include "../../yourheader/path/head.h"之类
至于在kernel中,不建议用上面的方法,是一种规范的方法,而不是说不可以!在kernel中,通常公共部分头文件放到include目录下,私有的放到你自己模块相同的目录即可
编译器如何来找了,除了编译器默认的路径之外,可以用-I指定任意个路径,比如:
gcc -o test test.c -I/path1 -I/path2 -I/path2 ...
只要在头文件存在与这些路径下,编译器就可以找到! 另外,包含和.c 文件相同路径的头文件,不需要用-I指定!
如果你用上面的 -I指定,你也可以直接给头文件加上路径,比如:
#include "/yourheader/path/head.h" #include "../../yourheader/path/head.h"之类
至于在kernel中,不建议用上面的方法,是一种规范的方法,而不是说不可以!在kernel中,通常公共部分头文件放到include目录下,私有的放到你自己模块相同的目录即可
|
自己也不懂。。。随便也学习一下
|
能解释下头文件的工作原理吗?为什么要在同一级目录下呢,include那个目录不也是不在同一级目录吗?
|
学习ing,先沙发!
|
此帖正解!