开发环境
Centos7.8,内核:3.10.0-1127.el7.x86_64
下载代码
获取spdk代码
使用git下载代码
[root@localhost Packages]# git clone https://github.com/spdk/spdk.git
Cloning into 'spdk'...
remote: Enumerating objects: 155376, done.
remote: Counting objects: 100% (920/920), done.
remote: Compressing objects: 100% (393/393), done.
remote: Total 155376 (delta 539), reused 883 (delta 518), pack-reused 154456
Receiving objects: 100% (155376/155376), 66.06 MiB | 346.00 KiB/s, done.
Resolving deltas: 100% (122025/122025), done.
这里展示编译v20.10版本,其他版本的方法类似。切换到v20.10版本:
[root@localhost Packages]# cd spdk
[root@localhost spdk]# git checkout v20.10
获取submodule
spdk以submodule的形式引用了其他的几个项目代码,其中包括:dpdk,intel-ipsec-mb,isa-l和ocf,获取spdk代码后还要将引用的submodule代码下载下来:
[root@localhost spdk]# git submodule update --init
编译流程
检查并安装依赖包
spdk提供了检查编译依赖包的脚本,用于自动检查和安装依赖包。执行脚本:
[root@localhost spdk]# ./scripts/pkgdep.sh
脚本正确执行完,spdk的编译环境就搭建好了,可以开始配置编译了。
配置和编译
使用configure
脚本完成配置,执行前可以使用configure --help
查看配置的选项,可以根据自己的需求添加。
[root@localhost spdk]# ./configure
配置完成就可以开始编译了。
[root@localhost spdk]# make
编译结果
编译完成的结果在build
目录中,其中bin目录下就是可以运行的spdk二进制文件,lib目录中时spdk提供的库:
[root@kvmit spdk]# cd build/
[root@kvmit build]# ls
bin examples fio include lib
[root@kvmit build]# cd bin/
[root@kvmit bin]# ls
iscsi_tgt iscsi_top nvmf_tgt spdk_dd spdk_lspci spdk_tgt spdk_top spdk_trace spdk_trace_record vhost
[root@kvmit build]# cd lib
[root@kvmit lib]# ls
libspdk_accel.a libspdk_bdev_null.a libspdk_blobfs_bdev.a libspdk_event_nvmf.a libspdk_log.a libspdk_sock_posix.a
libspdk_accel_ioat.a libspdk_bdev_nvme.a libspdk_conf.a libspdk_event_scsi.a libspdk_lvol.a libspdk_thread.a
libspdk_bdev.a libspdk_bdev_passthru.a libspdk_env_dpdk.a libspdk_event_sock.a libspdk_nbd.a libspdk_trace.a
libspdk_bdev_aio.a libspdk_bdev_raid.a libspdk_env_dpdk_rpc.a libspdk_event_vhost.a libspdk_net.a libspdk_util.a
libspdk_bdev_delay.a libspdk_bdev_split.a libspdk_event.a libspdk_event_vmd.a libspdk_notify.a libspdk_ut_mock.a
libspdk_bdev_error.a libspdk_bdev_virtio.a libspdk_event_accel.a libspdk_ftl.a libspdk_nvme.a libspdk_vhost.a
libspdk_bdev_ftl.a libspdk_bdev_zone_block.a libspdk_event_bdev.a libspdk_ioat.a libspdk_nvmf.a libspdk_virtio.a
libspdk_bdev_gpt.a libspdk_blob.a libspdk_event_iscsi.a libspdk_iscsi.a libspdk_rpc.a libspdk_vmd.a
libspdk_bdev_lvol.a libspdk_blob_bdev.a libspdk_event_nbd.a libspdk_json.a libspdk_scsi.a
libspdk_bdev_malloc.a libspdk_blobfs.a libspdk_event_net.a libspdk_jsonrpc.a libspdk_sock.a
因为在配置时没有选择--with-shared
选项,这里编译出来的都是静态库,二进制文件也是静态链接,所以相对较大。如果要编译动态库的形式,可以在配置时添加上shared选项,再重新编译一遍。
[root@localhost spdk]# ./configure --with-shared
编译完成就可以直接使用二进制文件和库文件了,也可以使用make install安装到系统中使用。
[root@localhost spdk]# make install