X86/Aarch64下编译PMDK工具

✨前言:

什么是PMDK?
Intel的PMDK(‌Persistent Memory Development Kit)‌是一个库,‌旨在简化持久内存的应用开发并解决一些常见挑战。‌

PMDK,‌全称为Persistent Memory Development Kit,‌是由Intel开发的一套函数库和工具的集合,‌适用于所有的持久内存(‌厂商中立)‌,‌无论这些内存来自哪个制造商。‌它包含了一系列函数库,‌如libpmem、‌libvmem、‌libpmemblk、‌libpmemlog、‌libpmemobj、‌libpmempool、‌libvmmalloc等,‌这些库的设计目的是为了方便非易失性内存的应用开发。‌通过PMDK,‌开发人员可以更容易地利用持久内存的优势,‌如高性能、‌低延迟以及数据的持久性,‌这些特性使得持久内存成为一种介于传统内存和存储之间的新技术。‌
在这里插入图片描述

具体而言,‌PMDK中的某些库,‌如libpmemobj,‌提供了基本的事务支持,‌允许应用程序用特定的语法表示事务,‌从而将应用程序从比较困难的底层细节中解放出来。‌这种支持对于需要自己实现简单数据库系统的应用程序来说尤为重要。‌通过PMDK,‌开发人员可以更加专注于应用程序的核心功能,‌而不是花费大量时间处理底层细节。‌
此外,‌PMDK还支持Hadoop等大数据处理框架,‌通过配置PMDK库的路径和包含文件的路径,‌可以构建支持PMDK的Hadoop本地库,‌从而提高大数据处理的性能和效率。‌
持久内存开发套件 (PMDK), 前身为NVML,是持续丰富的开发库和工具的集合。这些库在 Linux 和 Windows 上进行调整和验证后,以这些操作系统的 DAX 功能(直接访问)为基础,允许应用程序访问持久内存作为内存映射文件,如SNIA NVM 编程模型所述。
在这里插入图片描述
总的来说,‌Intel的PMDK通过提供一系列函数库和工具,‌简化了持久内存的应用开发过程,‌解决了许多常见挑战,‌使得开发人员能够更加高效地利用持久内存的优势,‌无论是对于传统的应用程序开发还是对于大数据处理等高性能计算领域,‌PMDK都发挥了重要作用

🌟编译需要的一些库的路径

https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/
https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/

🌟1.首先编译PMDK需要如下的packages的依赖,那就是先编译好ndctl

在这里插入图片描述

🌟2.编译环境需要如下包对应的版本,需要自己下载对应的包安装编译:

pkg-config:0.27.1
make:GNU Make 4.2.1
ninja :1.13.0.git
GCC:10.2.1(10.2.0也可)
meson:0.61.5
pandoc:2.0.6
asciidoctor:2.1.0

在这里插入图片描述

✨3.编译ndctl

🌟从GitHub上的ndctl仓库克隆代码:

git clone https://github.com/pmem/ndctl.git
cd ndctl

🌟编译

安装Meson和Ninja:
Meson依赖于Ninja构建系统来实际编译代码。请确保这两个工具都已安装(已安装忽略):

sudo yum install meson ninja-build

🌟安装lib kmod meson build的时候需要依赖这个

sudo yum search kmod-devel
sudo yum install kmod-devel

🌟 libudev是ude

配置 aarch64-linux-gnu 交叉编译工具链涉及多个步骤,包括选择合适的工具链、设置环境变量以及确保目标平台的兼容性。以下是一个详细的指南: ### 工具链选择 在构建 aarch64-linux-gnu 交叉编译工具链时,可以选择使用开源工具链如 GCC 或者商业工具链如 Arm Compiler for Linux(ACfL)。GCC 是一个广泛使用的编译器,支持多种架构和操作系统。对于需要高性能优化的应用程序,Arm Compiler for Linux 提供了更好的性能优势[^1]。 ### 环境变量设置 为了确保交叉编译过程顺利进行,需要正确设置环境变量。这通常涉及到指定交叉编译器的路径以及目标平台的 sysroot 目录。例如,在 shell 脚本中可以这样设置: ```sh export CC="aarch64-linux-gnu-gcc --sysroot=/path/to/sysroot" ``` 这里的 `--sysroot` 参数指定了目标系统的根目录,这对于链接阶段非常重要,因为它告诉编译器在哪里查找目标平台的库文件和头文件[^2]。 ### 使用 Bazel 配置工具链 如果使用 Bazel 构建系统,可以通过创建自定义的 `CROSSTOOL` 文件来定义工具链。这个文件包含了关于编译器、链接器和其他工具的信息。下面是一个简化的示例: ```python # CROSSTOOL toolchain { toolchain_identifier: "gcc-linux-aarch64" host_system_name: "local" target_system_name: "aarch64" target_cpu: "aarch64" target_libc: "glibc" compiler: "gcc" abi_version: "gcc" abi_libc_version: "glibc" tool_path { name: "gcc" path: "/usr/bin/aarch64-linux-gnu-gcc" } tool_path { name: "ld" path: "/usr/bin/aarch64-linux-gnu-ld" } tool_path { name: "ar" path: "/usr/bin/aarch64-linux-gnu-ar" } tool_path { name: "cpp" path: "/usr/bin/aarch64-linux-gnu-cpp" } tool_path { name: "gcov" path: "/usr/bin/aarch64-linux-gnu-gcov" } tool_path { name: "nm" path: "/usr/bin/aarch64-linux-gnu-nm" } tool_path { name: "objdump" path: "/usr/bin/aarch64-linux-gnu-objdump" } tool_path { name: "strip" path: "/usr/bin/aarch64-linux-gnu-strip" } cxx_flag: "-std=c++11" cxx_flag: "-stdlib=libstdc++" } ``` 在这个例子中,`tool_path` 指令定义了各种工具的路径,而 `cxx_flag` 则设置了 C++ 编译标志。这些配置项帮助 Bazel 理解如何调用交叉编译工具并生成适用于目标平台的代码[^1]。 ### 构建依赖项 当构建复杂的项目时,可能还需要预先构建一些依赖项。例如,在构建 OpenGL 应用程序时,可能需要先交叉编译 eudev 这样的库。构建完成后,可以在安装目录下找到生成的文件,并将它们用于后续的编译步骤。以下是构建 eudev 的基本命令: ```sh cd /path/to/eudev-source ./configure --host=aarch64-linux-gnu --prefix=/path/to/install-dir make make install ``` 这里的关键是使用 `--host` 参数指定目标架构,并通过 `--prefix` 设置安装目录。这样,生成的二进制文件和库文件就会被放置在一个特定的位置,方便后续的交叉编译过程引用[^4]。 ### 示例:构建 OpenCPN OpenCPN 是一个流行的航海导航软件,它也可以通过交叉编译的方式为目标平台构建。首先,需要配置 Buildroot 并启用必要的依赖项: ```sh make ARCH=arm64 rockchip_rk3568_defconfig make ARCH=arm64 menuconfig make ARCH=arm64 savedefconfig ``` 这些命令会配置 Buildroot 以支持 Rockchip RK3568 平台,并保存当前的配置选项。之后,可以开始构建 OpenCPN: ```sh make opencpn ``` Buildroot 会自动处理所有依赖项并生成适用于目标平台的可执行文件[^3]。 ### 总结 通过上述步骤,可以有效地配置 aarch64-linux-gnu 交叉编译工具链,并利用 Bazel 和其他构建工具生成适用于 ARM64 架构的目标代码。此外,合理管理和预编译依赖项也是确保交叉编译成功的重要环节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天Aileft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值