CLI存储【免费下载链接】nvme-cliNVMe management command line interface.项目地址https://gitcode.com/gh_mirrors/nv/nvme-cli点击查看免费下载导读本文基于 nvme-cli 仓库的官方构建文档 Documentation/BUILDING.md系统讲解从源码编译 nvme-cli 与 libnvme 的完整路径包括 meson 与 Makefile 包装层的使用、可选功能依赖json-c、openssl、keyutils 等的配置语义、安装路径与调试/消毒器构建、scripts/build.sh封装脚本、muon 最小静态构建、WindowsMSYS2 UCRT64构建以及发行版打包与内核版本要求。读完本文你将能够根据自身环境现代发行版、老旧发行版、Windows、嵌入式交叉编译选择最合适的构建方式并精确掌握每个 meson 选项的作用与默认值。构建系统概览meson 为基座多套封装并存nvme-cli 以 meson 作为官方构建系统但针对不同环境提供了多种入口现代系统直接使用meson或顶层Makefile包装层老旧发行版meson 版本过旧时可使用samuraininja 的轻量替代muonmeson 的轻量替代组合二者对构建环境依赖极小且有scripts/build.sh提供一键环境搭建Windows通过 MSYS2 的 UCRT64 环境构建。一条最小构建路径仅需三样工具gcc或 clangninjameson 1.0.0 或更高版本从 nvme-cli 3.x 开始libnvme 已完全并入 nvme-cli 源码树构建 libnvme 不再需要单独的外部仓库或软件包所有 libnvme 与 libnvme-mi 代码均随 nvme-cli 一同编译——这一点在 Documentation/BUILDING.md 中有明确说明也直接简化了后续所有构建步骤。nvme-cli 3.x 及之后的依赖模型从 3.x 起核心依赖被显著收敛。下表汇总了构建时的库依赖关系库依赖类型说明libnvme、libnvme-mi集成无外部依赖随 nvme-cli 源码一起编译json-c可选建议安装缺失时所有插件被禁用且 JSON 输出格式不可用libkmod可选缺失时 nvme-cli 无法在需要时加载 nvme-fabrics 内核模块json-c 的“可选但强烈建议”定位在源码中有直接印证nvme-cli 在 src/nvme-json.c 中实现了自定义序列化器util_json_object_string_to_number()通过json_object_set_serializer()安装到 json 对象上并在序列化时调用 json-c 的printbuf_memappend()。该函数以私有符号版本JSONC_PRIVATE导出意味着 json-c 并不承诺其 ABI 长期稳定——这是选用 json-c 时需要注意的兼容性事实。可选功能依赖每个 meson 选项背后的能力所有可选库均可通过-Doptionenabled显式启用、-Doptiondisabled显式禁用默认值多为auto检测到即使用下表整理自 Documentation/BUILDING.md选项默认值最低版本解锁的功能json-cauto0.13/etc/nvme/config.json解析、全部厂商插件、JSON 输出格式opensslauto3.0NVMe-TCP 上的 TLS、主机认证若 LibreSSL 提供openssl/core_names.h也可用keyutilsauto1.5NVMe-oF 认证的密钥管理libkmodauto5需要时加载 nvme-fabrics 模块libdbusdisabled—NVMe-MI 的端点发现liburingdisabled2.2通过 io_uring 执行异步 admin 与 I/O passthrough 命令pythonauto3.6libnvme 的 Python 绑定nvme-discoverdautolibsystemd 253nvme-discoverd 守护进程见下文 Daemons 与 systemdmdnsautolibsystemd 258nvme-discoverd 中的 mDNS 发现见下文 Daemons 与 systemd一个显式禁用的例子关闭 Python 绑定$ meson setup .build -Dpythondisabled这些选项的定义与取值约束均可在 meson_options.txt 中查到例如python是feature类型值为auto而plugins是array类型。如需查看包括 meson 内建选项在内的完整列表$ meson configure .build守护进程与 systemd 版本门槛nvme-discoverd 及其 mDNS 能力在构建期libsystemd与运行期服务管理器及其他 systemd 服务都依赖 systemd且两个阶段的版本要求一致功能最低 systemd 版本原因nvme-discoverd253使用Typenotify-reloadnvme-discoverd 中的 mDNS258使用 systemd-resolved 的BrowseServices方法运行行为上nvme-discoverd 启动时会检查 systemd-resolved 是否提供BrowseServices若不提供守护进程仅记录一条警告并以无 mDNS 模式运行不会因此失败。这一点与 meson_options.txt 中对nvme-discoverd、mdns选项的说明分别要求 libsystemd ≥ 253、≥ 258相互印证。标准 meson 构建流程配置Configure由于 libnvme 已并入源码树配置无需任何特殊参数直接$ meson setup .buildmeson 的--wrap-mode参数可控制额外依赖的解析方式取值如下--wrap-mode {default,nofallback,nodownload,forcefallback,nopromote}注意nvme-cli 的default实际被设置为nofallback即默认不会自动回退到下载 subproject 依赖。编译Build$ meson compile -C .build安装Install# meson install -C .build需要静态库而非共享库时在配置阶段指定$ meson setup --default-librarystatic .build运行单元测试$ meson test -C .build安装路径与发行版式安装meson 默认将一切安装到/usr/local可执行文件在/usr/local/bin库在/usr/local/lib配置在/usr/local/etc等由两个 meson 内建选项控制其默认值在 meson.build 与 meson.build 中设置选项默认值--prefix/usr/local--sysconfdiretc相对 prefix即/usr/local/etc若希望像 Linux 发行版那样安装到系统标准位置/usr/bin、/usr/lib、/etc等在配置时传入$ meson setup .build --prefix /usr --sysconfdir /etc生产环境安装可再追加--buildtype release以禁用调试符号并开启优化$ meson setup .build --prefix /usr --sysconfdir /etc --buildtype release调试与消毒器Sanitizer构建调试构建关闭优化、开启调试符号$ meson setup .build --buildtypedebug启用 AddressSanitizer运行时检测内存错误$ meson setup .build -Db_sanitizeaddress若在 sanitizer 构建时遇到链接问题需要预加载libasan.so$ meson setup .build -Db_sanitizeaddress \ LD_PRELOAD/lib64/libasan.so.6 ninja -C .build testUndefined Behavior Sanitizer 同样受支持-Db_sanitizeundefined同时启用两者$ meson setup .build -Db_sanitizeaddress,undefinedscripts/build.sh 封装脚本CI 与多配置构建scripts/build.sh 是 CI 使用的构建脚本也可用于日常配置与构建。不带参数运行时它以默认配置meson、gcc、默认选项构建项目。切换编译器为 clangscripts/build.sh -c clang启用全部 fallback 依赖下载scripts/build.sh fallback脚本支持丰富的命令行参数详见其 usage 输出包括-b [release|debug]构建类型-c [gcc|clang]编译器-m [meson|muon]构建工具-a使用 clang analyzer 做静态分析-p启用覆盖率报告-s以 ASanUBSan 运行测试-x以 valgrind 运行测试-t [arm|ppc64le|s390x|i386]交叉编译目标--e2e-controller、--e2e-ns1等为tests配置指定真实硬件端到端测试设备脚本内置了多种 meson 配置模板default、libdbus、liburing、fallback、cross、distro、docs、static、minimal_static、nofabrics、libnvme、tests等例如config_meson_static()会以--default-librarystatic、--wrap-modeforcefallback并禁用 keyutils/libkmod/liburing/python/openssl/nvme-discoverd 等来产出静态二进制。这些配置与 meson_options.txt 中的 e2e-* 系列选项一一对应。muon 最小静态构建scripts/build.sh -m muon会下载并自行构建samurai与muon用它们替代 meson 完成项目构建。这使构建环境依赖降到最低gccmakegit同时该配置会产出静态二进制。从脚本源码看muon 默认配置使用-Ddefault_librarystatic、-Dc_link_args-static、-Dwrap_modeforcefallback并禁用 json-c/python/openssl/keyutils/nvme-discoverd构建完成后还会用ldd检查产物确为非动态可执行文件见 scripts/build.sh。Makefile 包装层向后兼容入口顶层 Makefile 是对 meson 的向后兼容包装$ make # make install注意旧版本中 libnvme 需要手工安装nvme-cli 3.x 及之后不再需要。Makefile 内部即通过MESON_ARGS转发给meson setup/meson compile/meson install见 Makefile。Makefile 还提供两个额外目标RPM 构建基于 meson$ make rpm静态无依赖二进制构建$ make static若不清楚如何使用可先查看顶层文档$ man nvme或查看命令简要摘要$ nvme help按需构建特定厂商插件默认情况下所有厂商插件都会构建。若只想构建特定插件使用plugins选项$ meson setup .build -Dpluginsintel,wdc,ocp $ meson compile -C .build或通过 Makefile 包装层$ make PLUGINSintel,wdc,ocp未使用PLUGINS时其值默认为all即选择全部插件$ make PLUGINSall不带任何厂商插件构建$ make PLUGINSMakefile 将PLUGINS变量转换为-Dplugins追加到MESON_ARGS见 Makefile。plugins选项的可选值在 meson_options.txt 中完整列出包括 amzn、config、dell、intel、wdc、ocp、micron、samsung、seagate、huawei、nvidia、solidigm 等四十余项选项留空[]即不构建任何插件。Windows 构建MSYS2 UCRT64nvme-cli 可在 Windows 上通过 MSYS2 的 UCRT64 环境构建。安装 MSYS2winget install MSYS2.MSYS2后在 UCRT64 环境中运行 scripts/win-ucrt64-setup.sh 即可安装所需的构建系统与 nvme-cli 依赖。该脚本基于 pacman 安装以下组件见 scripts/win-ucrt64-setup.shgitmingw-w64-ucrt-x86_64-toolchainMinGW 工具链mingw-w64-ucrt-x86_64-mesonmingw-w64-ucrt-x86_64-ninjamingw-w64-ucrt-x86_64-ccachemingw-w64-ucrt-x86_64-json-cmingw-w64-ucrt-x86_64-python-jsonschema脚本支持-u参数在安装前先刷新软件包数据库并升级全部软件包对应 pacman 的-Syu。环境就绪后即可按上文的标准 meson 流程meson setup→meson compile→meson install完成构建。发行版打包nvme-cli 已在众多主流发行版中提供Alpine、Arch、Debian、Fedora、FreeBSD、Gentoo、Ubuntu、Nix(OS)、openSUSE 等常见软件包名为nvme-cli。OpenEmbedded/Yoctometa-openembedded层集合中提供 nvme-cli recipe。Buildrootnvme-cli以nvme为包名提供。内核版本要求libnvme 依赖/sys/class/nvme-subsystem接口该接口自 Linux 内核 v4.15 起引入因此nvme-cli 要求内核 v4.15 或更高版本见 Documentation/BUILDING.md。构建或部署前请先确认目标系统的内核版本满足此门槛。总结如何选择构建路径根据环境差异可按以下原则选择构建方式场景推荐路径现代发行版、常规开发meson setup .build meson compile -C .build需要兼容旧工具链习惯顶层make/make installCI 或多配置验证scripts/build.sh含 clang、asan、valgrind、交叉编译等参数老旧发行版、工具链受限scripts/build.sh -m muonsamurai muon静态二进制WindowsMSYS2 UCRT64 scripts/win-ucrt64-setup.sh最小化功能集按需-Djson-cdisabled、-Dopenssldisabled等显式关闭或-Dplugins精简约插件无论选择哪条路径配置完成后都可用meson test -C .build运行单元测试、用meson configure .build查看全部可用选项确保构建产物与预期功能集一致。赞分享CLI存储【免费下载链接】nvme-cliNVMe management command line interface.项目地址https://gitcode.com/gh_mirrors/nv/nvme-cli点击查看免费下载相关推荐radare2 Windows 原生构建指南从 Meson/Ninja 编译到静态 Blob 与交叉编译radare2 Windows 原生构建指南从 Meson/Ninja 编译到静态 Blob 与交叉编译 导读 本文以 doc/windows.md http逆向工程网络安全SciPy 从源码构建完全指南系统依赖、Meson 构建与自定义配置SciPy 从源码构建完全指南系统依赖、Meson 构建与自定义配置 SciPy 使用大量编译型代码C、C、Cython、Fortran 等实现高性能科学计算数据科学高性能计算在 macOS 上从源码构建 Rnote依赖安装、Meson 编译与安装全指南在 macOS 上从源码构建 Rnote依赖安装、Meson 编译与安装全指南 本篇技术指南以仓库中的 misc/building/rnote macos b桌面应用图形学上一篇Regal 规则详解用 Rego 函数参数模式匹配替代相等性判断equals-pattern-matching下一篇解锁ROG笔记本隐藏潜力G-Helper全攻略颠覆你的Anime Matrix使用体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?