Re: [PATCH net-next v8 0/4] net: Add Keystone NetCP ethernet driver support
From: Arnd Bergmann <arnd@arndb.de>
Date: 2015-01-29 01:14:44
Also in:
lkml, netdev
On Wednesday 28 January 2015 15:43:57 Murali Karicheri wrote:
quoted
this. Hope I am on the right track.Reproduced this. Following errors seen when building the modules. LD [M] drivers/net/ethernet/ti/keystone_netcp.o drivers/net/ethernet/ti/netcp_ethss.o: In function `init_module': netcp_ethss.c:(.init.text+0x0): multiple definition of `init_module' drivers/net/ethernet/ti/netcp_core.o:netcp_core.c:(.init.text+0x0): first defined here drivers/net/ethernet/ti/netcp_ethss.o: In function `cleanup_module': netcp_ethss.c:(.exit.text+0x0): multiple definition of `cleanup_module' drivers/net/ethernet/ti/netcp_core.o:netcp_core.c:(.exit.text+0x0): first defined here make[4]: *** [drivers/net/ethernet/ti/keystone_netcp.o] Error 1 BTW, I had to disable cpsw_ale.c to get to build keystone NetCP. I am assuming someone from TI is addressing this. drivers/net/ethernet/ti/cpsw_ale.c: In function ‘cpsw_ale_start’: drivers/net/ethernet/ti/cpsw_ale.c:759:2: error: ‘KBUILD_MODNAME’ undeclared (first use in this function) drivers/net/ethernet/ti/cpsw_ale.c:759:2: note: each undeclared identifier is reported only once for each function it appears in
I think both problems are nontrivial to fix. The first one is obviously that there are multiple init_module functions in one module. You have to either split the driver into multiple loadable modules with at most one init_module/cleanup_module pair each, or call one of the functions from the other one in the right order. The second problem is where I got stuck myself: cpsw_ale.c (also cpts.c) is getting linked into both modules, which is not allowed: It is impossible for the kernel to compile these if one driver is a module and the other one is not, and any use of KBUILD_MODNAME fails because it is unclear what the modname is if the file is compiled once to be linked into two drivers. Arnd