[dpdk-dev] EAL PCI dev problem when using .a file to compile app
Bruce Richardson
bruce.richardson at intel.com
Thu Jun 18 12:06:18 CEST 2015
On Thu, Jun 18, 2015 at 01:07:33PM +0500, Umar Farooq wrote:
> Hi
>
> I am trying to write an application "abc" using DPDK 2.0.0 that calls
> rte_eal_init to test if EAL is setup correctly. I have run "helloworld" and
> "l2fwd" applications and they run fine on my setup.
>
> A new thing that i am trying is to create a libdpdk.a file using build
> target "x86_64-native-linuxapp-gcc" and use it to compile my application.
> The application simply calls "rte_eal_init(argc, argv)" and exits. It
> compiles successfully and runs but the EAL doesn't initialize the PCI
> devices.
>
> The flow is this:
>
> 1. The method to create libdpdk.a is by using this shell script:
> #bin/bash
> rm -f libdpdk.a
> cp /path_to/dpdk/x86_64-native-linuxapp-gcc/lib/* .
> DPDK_LIBS=$(ls *.a)
> for file in *.a; do
> ar -x "$file"
> done
> ar -rcs libdpdk.a *.o
>
> 2. Application is compiled using the command:
> gcc abc.c /path_to/dpdk/libdpdk.a
> -I/path_to/dpdk/x86_64-native-linuxapp-gcc/include -lpthread -lrt -ldl
> -mssse3 -lm -o abc
>
> 3. After the successful compilation, the app is run using the command:
> ./abc -c c -n 4 -b 00:03.0
>
> 4. Application calls rte_eal_init(argc, argv), which calls
> rte_eal_pci_probe(), which calls pci_probe_all_drivers().
>
> 5. In the last function called, pci_probe_all_drivers(struct rte_pci_device
> *dev) in
> dpdk/lib/librte_eal/common/eal_common_pci.c file, the control never enters
> the loop:
> TAILQ_FOREACH(dr, &pci_driver_list, next) {
> rc = rte_eal_pci_probe_one_driver(dr, dev);
> if (rc < 0)
> /* negative value is an error */
> return -1;
> if (rc > 0)
> /* positive value means driver not found */
> continue;
> return 0;
> }
>
> and the function always returns 1.
>
> If the application is compiled using normal Makefile as used by l2fwd or
> helloworld example apps, this problem doesn't occur and application calls
> the "rte_eal_pci_probe_one_driver(dr, dev)" in "TAILQ_FOREACH" loop.
>
> The question is what am I missing while creating the libdpdk.a and
> compiling application using it?
>
> Thanks for your time.
>
> Regards
> Umar
This may be due to a missing "--no-as-needed" flag in the link stage of your
application. If so, the drivers are not getting registered at startup, so pci
probing fails to find your devices.
/Bruce
More information about the dev
mailing list