当前位置: 技术问答>linux和unix
以模块B对kernel中的函数指针进行赋值可行否?
来源: 互联网 发布时间:2017-01-14
本文导语: 我现在在做模块移植。以前模块A的功能是全部写在内核的/net/bridge目录下的。现在我要做的事就是把模块A的功能全部移值出来,形成一个模块B,模块B会以insmod的形式运行。 移值的具体方法为:以前模块A嵌在bridge中...
我现在在做模块移植。以前模块A的功能是全部写在内核的/net/bridge目录下的。现在我要做的事就是把模块A的功能全部移值出来,形成一个模块B,模块B会以insmod的形式运行。
移值的具体方法为:以前模块A嵌在bridge中的功能函数,全部放到模块B中去。而在bridge目录里各个文件中的原调用点,全部放上函数指针,因为功能函数经过整合,所以放函数指针的位置大概只有五六处,还可以容忍。
同时kernel里对外提供一个接口,让模块B对这些函数指针进行赋值,把原来的处理函数赋给这些指针。以便kernel调用。
我的问题是:
1.以上的思路是否可行?如果可行,能否提供一个例子让我参考一下。或者贴部分代码示意一下?
2.模块B中还有些数据是kernel里的函数指针运行时要使用的。我就在模块B中用static定义这些数据,在kernel中用extern声明一下,是不是就可以用了?
如果不是,要如何才可用?也请给个例子。。。。。。。
多谢诸位赐教~~~~
|
1、 估计不行内嵌的模块会先于insmod,被调用会发现你的函数指针为空(非法更杯具)。
2、 被声明static的变量只能在本文件内有效,在别的地方extern声明编译“应该”是会出错的,如果你真的想给外部使用你的数据应该是提供接口,而不是让别人直接访问你的数据,如果非要直接访问数据,那么你就没必要分模块了。
2、 被声明static的变量只能在本文件内有效,在别的地方extern声明编译“应该”是会出错的,如果你真的想给外部使用你的数据应该是提供接口,而不是让别人直接访问你的数据,如果非要直接访问数据,那么你就没必要分模块了。
|
可以的,EXPORT_SYMBOL 了就可以复制那些了。使用的时候判断是不是为空咯
|
当然可以了,linux是单内核结构,所有kernel模块都是共享内存地址的,
比如说linux的设备驱动程序就是这样的,我们去填充file_operations里面得各个函数指针,
而这些函数指针则是有内核中的其他模块调用的
比如说linux的设备驱动程序就是这样的,我们去填充file_operations里面得各个函数指针,
而这些函数指针则是有内核中的其他模块调用的
|
怎么可以用static申明变量,然后再其他模块中间用extern来应用了,就直接定义成全局变量就可以了
|
对,第1点,保证B这个内核模块在/net/***代码执行前加载即可.
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。