免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5079 | 回复: 8

当每个C文件里都有module_init时,怎么把多个C文件编译成一个ko文件? [复制链接]

论坛徽章:
0
发表于 2014-08-26 12:02 |显示全部楼层
是这样的:我用platform平台总线做驱动,有两个文件:

(1)平台设备led_dev.c

(2)平台驱动led_drv.c

l现在问题是,

led_dev.c中有:

int __init led_dev_init(void)
{
    platform_device_register(&led_device);  
   
    return 0;
}

module_init(led_dev_init);



led_drv.c中有:

int __init led_drv_init(void)
{
    platform_driver_register(&led_driver);
   
    return 0;
}

module_init(led_drv_init);

采用编译成模块时,
Makefile这样写:obj-m += led_dev.o led_drv.o
是可以把led_dev.c编译成led_dev.ko
         把led_drv.c编译成led_drv.ko

然后加载时insmod两次就行了!

但现在我想:能不能仅编译成一个ko文件,

加载时只需insmod一次就行了?

为达到此效果,我的Makefile改成这样:
obj-m += led.o
led-objs := led_dev.o led_drv.o
但编译会报错: multiple definition of `init_module'

请问:各位有什么方法呢?不妨赐教啊!小弟谢过~

论坛徽章:
0
发表于 2014-08-26 18:17 |显示全部楼层
吃饱了撑得

论坛徽章:
0
发表于 2014-08-26 18:29 |显示全部楼层
大神 有何赐教呢?

论坛徽章:
1
射手座
日期:2013-11-07 09:19:48
发表于 2014-08-27 13:12 |显示全部楼层
两个文件里面只定义一个module_init,在其中把需要做的事都做了。

论坛徽章:
0
发表于 2014-08-27 16:38 |显示全部楼层
guocslock 发表于 2014-08-27 13:12
两个文件里面只定义一个module_init,在其中把需要做的事都做了。


看来也只能那样了!

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
发表于 2014-08-27 21:47 |显示全部楼层
必须只能那样

一个ko里边只能有一个module_init

论坛徽章:
0
发表于 2014-08-28 00:53 |显示全部楼层
thanks

论坛徽章:
0
发表于 2015-04-24 17:20 |显示全部楼层
你想违背设备-总线-驱动模型

论坛徽章:
0
发表于 2015-05-04 20:58 |显示全部楼层
没事找事型的,违背了驱动的设备、驱动的分离思想
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP