xref: /spdk/doc/porting.md (revision 9efad7468f30e1c5f7442823f5a8b17acd1e6a9b)
1# SPDK Porting Guide {#porting}
2
3SPDK is ported to new environments by implementing the *env*
4library interface.  The *env* interface provides APIs for drivers
5to allocate physically contiguous and pinned memory, perform PCI
6operations (config cycles and mapping BARs), virtual to physical
7address translation and managing memory pools.  The *env* API is
8defined in include/spdk/env.h.
9
10SPDK includes a default implementation of the *env* library based
11on the Data Plane Development Kit ([DPDK](http://dpdk.org/)).
12This DPDK implementation can be found in `lib/env_dpdk`.
13
14DPDK is currently supported on Linux and FreeBSD only.
15Users who want to use SPDK on other operating systems, or in
16userspace driver frameworks other than DPDK, will need to implement
17a new version of the *env* library.  The new implementation can be
18integrated into the SPDK build by updating the following line
19in CONFIG:
20
21```bash
22CONFIG_ENV?=$(SPDK_ROOT_DIR)/lib/env_dpdk
23```
24