[dpdk-dev] driver initialization in DPDK 2.0 built into a shared library.

Zoltan Kiss zoltan.kiss at linaro.org
Thu Jul 16 15:00:49 CEST 2015



On 14/07/15 19:21, Polevoy, Igor wrote:
> Hi,
> We are developing an application that uses DPDK PMD functionality .
> We are using a linux shared library which contains the network packets processing code and it is statically linked with all the necessary DPDK libs.
> The .so is loaded by the main program.
> For the DPDK compilation we have added the -fPIC to the GCC options.
>
> While it all worked fine with DPDK 1.6 where we had the rte_pmd_init_all method, in the 2.0 version the
> drivers registration methods (PMD_REGISTER_DRIVER) are not called when the shared library is loaded.
>
> Although, I can go along the lines of the rte_pmd_init all and manually call the driver registration, I'm concerned
> that DPDK has other drivers initialization calls, and I don't actually know which are needed or could be needed and when.
>
> Do you have any advice on that? What is the best way to resolve this issue?
>
> Thank you
> Igor.
>

I've seen a similar problem, but in a different setup. My app (OVS) 
links to ODP-DPDK statically, which then links to DPDK code statically. 
I found that the devinitfn_* functions are not called because OVS 
doesn't call directly into the DPDK library, only into ODP-DPDK. The 
workaround for me was to refer to those functions in the ODP-DPDK code:

#define PMD_EXT(drv)  extern void devinitfn_##drv(void);
PMD_EXT(bond_drv)
PMD_EXT(em_pmd_drv)
...

But there might be better solutions than that. This one is fragile, if 
you update DPDK you have to remember adding these references for new PMDs.

Zoli


More information about the dev mailing list