在DPDK编译完成之后,默认情况下执行make install会将目标文件安装到系统的/usr/local目录下。通过查看DPDK的安装Makefile文件mk/rte.sdkinstall.mk,可知其将prefix指向了/usr/local目录。
ifdef T # defaults with T= will install an almost flat staging tree
export prefix ?=
kerneldir ?= $(prefix)/kmod
else
ifeq ($(RTE_EXEC_ENV),linuxapp)
kerneldir ?= /lib/modules/$(shell uname -r)/extra/dpdk
else
kerneldir ?= /boot/modules
endif
prefix ?= /usr/local
endif
安装install完成之后,/usr/local目录如下,DPDK的目标文件主要安装在了4个大目录下:/usr/local/bin、/usr/local/lib、/usr/local/sbin和/usr/local/share目录。
$ ls /usr/local/bin
dpdk-pdump dpdk-pmdinfo dpdk-procinfo dpdk-test-compress-perf dpdk-test-crypto-perf dpdk-test-eventdev
$ ls /usr/local/include/
dpdk
$ ls /usr/local/lib
libdpdk.a librte_eal.a librte_kvargs.a librte_net.a
$
$ ls /usr/local/sbin
dpdk-devbind
$
$ ls /usr/local/share/
applications dpdk info man
$
$ ls /usr/local/share/applications/
$ ls /usr/local/share/dpdk/
build buildtools examples mk usertools
如果要更改默认的安装路径,只需要在make install时指定prefix即可。如将/usr/local修改为指定目录/home/build,命令如下:
$ make install prefix=/home/build
继续查看mk/rte.sdkinstall.mk文件,如下。如果需要更细致的控制DPDK安装路径,以下的参数都可以在install命令行指定。如指定exec_prefix路径可更改DPDK的bin、sbin和lib的安装目录。当然也可单独为每一项指定安装目录,参数分别为bindir、sbindir和libdir。
exec_prefix ?= $(prefix)
bindir ?= $(exec_prefix)/bin
sbindir ?= $(exec_prefix)/sbin
libdir ?= $(exec_prefix)/lib
includedir ?= $(prefix)/include/dpdk
datarootdir ?= $(prefix)/share
docdir ?= $(datarootdir)/doc/dpdk
datadir ?= $(datarootdir)/dpdk
mandir ?= $(datarootdir)/man
sdkdir ?= $(datadir)
targetdir ?= $(datadir)/$(RTE_TARGET)
关于内核模块,默认情况下编译出来的内核模块安装在/boot/modules,可通过指定kerneldir变量的值进行修改。
另外一个修改安装顶层目录的方法是,指定DESTDIR变量。文件mk/rte.sdkinstall.mk在定义的最终安装目录规则为:$(DESTDIR)/$(prefix)。如下指定DESTDIR=/home,prefix=test/dpdk:
$ make install DESTDIR=/home prefix=test/dpdk
安装完成之后,DPDK目标文件安装到了/home/test/dpdk目录下:
$ ls /home/test/dpdk/
bin include lib sbin share
DPDK的examples示例编译的目标程序文件,由mk/rte.app.mk控制安装。默认情况下安装在$(RTE_OUTPUT)/app目录下,即相应example的build/app目录下,如l3fwd示例程序,其安装目录位于:examples/l3fwd/build/app/。
#
# install app in $(RTE_OUTPUT)/app
#
$(RTE_OUTPUT)/app/$(APP): $(APP)
@echo " INSTALL-APP $(APP)"
@[ -d $(RTE_OUTPUT)/app ] || mkdir -p $(RTE_OUTPUT)/app
$(Q)cp -f $(APP) $(RTE_OUTPUT)/app
示例程序l3fwd编译如下:
root@ubcontainer:~/dpdk-19.02/examples/l3fwd# make
CC main.o
CC l3fwd_lpm.o
CC l3fwd_em.o
LD l3fwd
INSTALL-APP l3fwd
INSTALL-MAP l3fwd.map
root@ubcontainer:~/dpdk-19.02/examples/l3fwd#
最后,将DPDK的编译和安装在一条命令执行,如下。指定T目标变量。由以上文件mk/rte.sdkinstall.mk可知,在指定了T之后,prefix为空,即其默认值不再时/usr/local,所以如下的命令相当于在不指定T的情况下,将prefix指定为空的效果:make install DESTDIR=/home/test/dpdk prefix=。
root@ubcontainer:~/dpdk-19.02# make install DESTDIR=/home/test/dpdk T=x86_64-native-linuxapp-gcc
完