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