From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wg0-f48.google.com (mail-wg0-f48.google.com [74.125.82.48]) by dpdk.org (Postfix) with ESMTP id 558EEC67E for ; Fri, 19 Jun 2015 07:16:13 +0200 (CEST) Received: by wgez8 with SMTP id z8so80090157wge.0 for ; Thu, 18 Jun 2015 22:16:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :content-type; bh=2NM/Dh+Pgvp/kMpwmIxk9h/VNuBmM+dyKVQ54JBIKbg=; b=rsnWE1MNFN+onWrm0soeemGmramuAlhrJGa1qa0ZbEI0FTQb7w49Y/bUVO70yv+HjI usZ7oUPQyUzMVMJiKXhiE6TVtOcD/msvUTukYyarvGmi0QpE7CReHMqZE2LL1ho77rNT r3yX9jnDA+EfxYpQRN4lx3ETjwuQiTQoZjD1pzwBjP2XKPDUt3/aLTtZSAMfsBW8WTGa iu/cObyeQRz7MKgaiXP3MIZSeJu59/2NKXlCUozmwGy9vTx66PoQaEYqI79MGmfS5ymg cw+s7elnBbllSwxPvhRAvV8A8a443aBCrAFl0VM5e5gjqXS/VgBPr/+kw+DN1+rA+xDG U5/w== X-Received: by 10.194.173.8 with SMTP id bg8mr21397151wjc.65.1434690973180; Thu, 18 Jun 2015 22:16:13 -0700 (PDT) MIME-Version: 1.0 Received: by 10.194.56.199 with HTTP; Thu, 18 Jun 2015 22:15:32 -0700 (PDT) In-Reply-To: <20150618100618.GC7972@bricha3-MOBL3> References: <20150618100618.GC7972@bricha3-MOBL3> From: Umar Farooq Date: Fri, 19 Jun 2015 10:15:32 +0500 Message-ID: To: dev@dpdk.org Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] EAL PCI dev problem when using .a file to compile app X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 19 Jun 2015 05:16:13 -0000 Thanks Bruce. In application compilation command, after adding the "--no-as-needed" flag and some additional flags including "-Wl,-lrte_pmd_bond -Wl,-lrte_pmd_vmxnet3_uio -Wl,-lrte_pmd_virtio_uio -Wl,-lrte_pmd_enic -Wl,-lrte_pmd_i40e -Wl,-lrte_pmd_fm10k -Wl,-lrte_pmd_ixgbe -Wl,-lrte_pmd_e1000 -Wl,-lrte_pmd_ring -Wl,-lrte_pmd_af_packet" solved the issue. On Thu, Jun 18, 2015 at 3:06 PM, Bruce Richardson < bruce.richardson@intel.com> wrote: > 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 >