当前位置:  技术问答>linux和unix

module_init(fn)其中fn的参数是如何传递的

    来源: 互联网  发布时间:2016-12-05

    本文导语:  如题,我最近看了一个板子的BSP文件,在定义了板子上的各个资源后,有如下调用 814 static int __init mach_mpc85xx_fixup(struct platform_device *pdev) 815 { 816     ppc_sys_fixup_mem_resource(pdev, CCSRBAR); 817     return 0; 818 } 819...

如题,我最近看了一个板子的BSP文件,在定义了板子上的各个资源后,有如下调用

814 static int __init mach_mpc85xx_fixup(struct platform_device *pdev)
815 {
816     ppc_sys_fixup_mem_resource(pdev, CCSRBAR);
817     return 0;
818 }
819 
820 static int __init mach_mpc85xx_init(void)
821 {
822     ppc_sys_device_fixup = mach_mpc85xx_fixup;
823     return 0;
824 }
825 
826 postcore_initcall(mach_mpc85xx_init);//这里的postcore_initcall定义为module_init,
//这里只传了一个函数名进去,那么函数参数是怎么传递进去的呢?
//mach_mpc85xx_fixup(struct platform_device *pdev)里的pdev是在哪个地方定义的呢?

                                             

|
mach_mpc85xx_fixup(struct platform_device *pdev)里的pdev是在哪个地方定义的呢?

==>  这个pdev是通过platform_device_register注册后传递的。

|
这个是驱动程序
module_init相当于程序的main,是个入口点
跳转到init mach_mpc85xx_init这执行

struct platform_device *pdev的定义在什么地方,不知道,等待高人解答

菜鸟的解答,欢迎指正

|
对于module_init分2种情况,一种是内核不支持module,一种是支持。

内核不支持module时,module_init实际上会展开成顶一个位于.initcall6.init section中的一个函数指针变量的赋值。在这种情况下,内核初始化时(在kernel_init内核线程中),会执行对应section的所有函数。

内核支持module时,module_init实际上会展开成
#define module_init(initfn)                                     
         static inline initcall_t __inittest(void)               
         { return initfn; }                                      
         int init_module(void) __attribute__((alias(#initfn)));
在这种情况下,在用insmod之类加载模块时,最终会调用模块的init函数。

自己可以看看insmod的代码+内核kernel/module.c代码分析,如果懒的话,也可以看看IBM developer works上的一篇介绍文章:http://www.ibm.com/developerworks/cn/linux/l-lkm/

|
举个例子


//定义模块,文件名hello.c

#include 

static int count;
static char *string;


MODULE_PARM(count,"I");//定义需要传入到模块的参数,"I",为整型
MODULE_PARM(string,"s");//"s"为字符串类型

int fun(int a,char *b)
{

}

module_init(fun);
//------
//------




命令行下:
编译模块后
加载模块,加载形式为

#insmod hello.ko count=0 string="hello"

OK,这就将两个参数传给了fun



    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 驱动都是从 module_init (...); 开始


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3