From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 69D36C5C0 for ; Thu, 18 Jun 2015 12:06:22 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga103.jf.intel.com with ESMTP; 18 Jun 2015 03:06:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,638,1427785200"; d="scan'208";a="745733334" Received: from bricha3-mobl3.ger.corp.intel.com ([10.243.20.21]) by fmsmga002.fm.intel.com with SMTP; 18 Jun 2015 03:06:19 -0700 Received: by (sSMTP sendmail emulation); Thu, 18 Jun 2015 11:06:18 +0025 Date: Thu, 18 Jun 2015 11:06:18 +0100 From: Bruce Richardson To: Umar Farooq Message-ID: <20150618100618.GC7972@bricha3-MOBL3> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Organization: Intel Shannon Ltd. User-Agent: Mutt/1.5.23 (2014-03-12) Cc: dev@dpdk.org 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: Thu, 18 Jun 2015 10:06:22 -0000 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