DPDK patches and discussions
 help / color / mirror / Atom feed
From: Umar Farooq <umar1.farooq1@gmail.com>
To: dev@dpdk.org
Subject: [dpdk-dev] EAL PCI dev problem when using .a file to compile app
Date: Thu, 18 Jun 2015 13:07:33 +0500	[thread overview]
Message-ID: <CALOK9fLSOM4u=f1MRWsnzj97qrmRm-1eX6ybkgJmw4x-THXkGQ@mail.gmail.com> (raw)

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

             reply	other threads:[~2015-06-18  8:08 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-18  8:07 Umar Farooq [this message]
2015-06-18 10:06 ` Bruce Richardson
2015-06-19  5:15   ` Umar Farooq

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CALOK9fLSOM4u=f1MRWsnzj97qrmRm-1eX6ybkgJmw4x-THXkGQ@mail.gmail.com' \
    --to=umar1.farooq1@gmail.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).