[dpdk-users] DPDK 16.04 shared object changes cause PMD drivers to not be loaded
Aurojit Panda
aurojit at gmail.com
Tue Apr 19 03:41:38 CEST 2016
Hi
I was trying to run testpmd from DPDK 16.04 on Linux with kernel version 4.4.0-1 (ld version 2.26). My machine has two
XL710QDA2 NICs, and I built DPDK as a shared, combined library (i.e., CONFIG_RTE_BUILD_SHARED_LIB=y and
CONFIG_RTE_BUILD_COMBINE_LIBS=y in config/common_linuxapp). I found that the issue is due to ld not linking against all
libraries with the new linker script (introduced in 948fd64befc3726) but am not sure how to fix this. As evidence for
this being caused by this change:
$ LD_TRACE_LOADED_OBJECTS=y ./testpmd -c 0x1c00 -n 4 -w 82:00.0 -w 82:00.1 --file-prefix "send" -- -i
linux-vdso.so.1 (0x00007ffe11b3e000)
librte_distributor.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_distributor.so.1.1
(0x00007fa55eb85000)
librte_reorder.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_reorder.so.1.1 (0x00007fa55e982000)
librte_pipeline.so.3.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_pipeline.so.3.1 (0x00007fa55e77d000)
librte_table.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_table.so.2.1 (0x00007fa55e55e000)
librte_port.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_port.so.2.1 (0x00007fa55e34e000)
librte_timer.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_timer.so.1.1 (0x00007fa55e145000)
librte_hash.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_hash.so.2.1 (0x00007fa55df37000)
librte_jobstats.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_jobstats.so.1.1 (0x00007fa55dd35000)
librte_lpm.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_lpm.so.2.1 (0x00007fa55db2e000)
librte_power.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_power.so.1.1 (0x00007fa55d91f000)
librte_acl.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_acl.so.2.1 (0x00007fa55d705000)
librte_meter.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_meter.so.1.1 (0x00007fa55d504000)
librte_sched.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_sched.so.1.1 (0x00007fa55d2fd000)
librte_vhost.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_vhost.so.2.1 (0x00007fa55d0e6000)
librte_kvargs.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_kvargs.so.1.1 (0x00007fa55cee4000)
librte_mbuf.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_mbuf.so.2.1 (0x00007fa55cce2000)
librte_ip_frag.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_ip_frag.so.1.1 (0x00007fa55cada000)
libethdev.so.3.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/libethdev.so.3.1 (0x00007fa55c84f000)
librte_cryptodev.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_cryptodev.so.1.1 (0x00007fa55c647000)
librte_mempool.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_mempool.so.1.1 (0x00007fa55c444000)
librte_ring.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_ring.so.1.1 (0x00007fa55c242000)
librte_eal.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_eal.so.2.1 (0x00007fa55bfe1000)
librte_cmdline.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_cmdline.so.2.1 (0x00007fa55bdd8000)
librte_cfgfile.so.2.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_cfgfile.so.2.1 (0x00007fa55bbd6000)
librte_pmd_bond.so.1.1 => /home/apanda/e2d2/3rdparty/dpdk/build/lib/librte_pmd_bond.so.1.1 (0x00007fa55b9c4000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa55b7ae000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fa55b5aa000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fa55b38d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa55afe9000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa55ed87000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa55aceb000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fa55aae3000)
As you can see librte_pmd_i40e.so is missing from the list of files. Furthermore, using
$ LD_PRELOAD="../lib/librte_pmd_i40e.so" ./testpmd -c 0x1c00 -n 4 -w 82:00.0 -w 82:00.1 --file-prefix "send" -- -i
correctly enumerates the NICs.
I unfortunately do not how to fix the linker script as checked in, but wanted to report this bug in case someone has a fix.
Thanks
Panda
More information about the users
mailing list