一、环境配置
- 源码环境:OpenHarmony 4.1 Release
- 平台硬件: RK3568
- 平台软件:OpenHarmony 4.1 Release 32bit(4.1.7.8)
- fio版本:3.37
二、fio简介
fio是一个I/O测试工具,可以运行在Linux、Windows等多种系统之上,可以用来测试本地磁盘、网络存储等的I/O性能。
fio官网:https://fio.readthedocs.io/en/latest/fio_doc.html
fio源码下载:https://brick.kernel.dk/snaps/
三、交叉编译fio源码
将下载的fio源码fio-3.37.tar.gz放入OpenHarmony项目源码third_party/目录下进行解压
$ cd third_party
$ tar -zxvf fio-3.37.tar.gz
3.1、配置交叉编译环境
在third_party/fio-3.37/目录下创建交叉编译环境的配置脚本fio_env32.sh和fio_env64.sh
fio_env32.sh文件如下
#!/bin/bash make clean
#arm-linux-ohos ./configure --cpu=aarch64 --prefix=$PWD/install
SDK_PATH=../../prebuilts/ohos-sdk/linux/11/native
CUR_PATH=$(pwd)
cd $SDK_PATH
export OHOS_SDK=$(pwd)
cd $CUR_PATH
export AS=${OHOS_SDK}/llvm/bin/llvm-as
export CC="${OHOS_SDK}/llvm/bin/clang --target=arm-linux-ohos"
export CXX="${OHOS_SDK}/llvm/bin/clang++ --target=arm-linux-ohos"
export LD="${OHOS_SDK}/llvm/bin/lld --target=arm-linux-ohos"
export STRIP=${OHOS_SDK}/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/llvm/bin/llvm-ar
export CFLAGS="-fPIC -D__MUSL__=1"
export CXXFLAGS="-fPIC -D__MUSL__=1"
fio_env64.sh文件如下
#!/bin/bash
#aarch64-linux-ohos ./configure --cpu=aarch64 --prefix=$PWD/install
SDK_PATH=../../prebuilts/ohos-sdk/linux/11/native
CUR_PATH=$(pwd)
cd $SDK_PATH
export OHOS_SDK=$(pwd)
cd $CUR_PATH
export AS=${OHOS_SDK}/llvm/bin/llvm-as
export CC="${OHOS_SDK}/llvm/bin/clang --target=aarch64-linux-ohos"
export CXX="${OHOS_SDK}/llvm/bin/clang++ --target=aarch64-linux-ohos"
export LD="${OHOS_SDK}/llvm/bin/lld --target=aarch64-linux-ohos"
export STRIP=${OHOS_SDK}/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/llvm/bin/llvm-ar
export CFLAGS="-fPIC -D__MUSL__=1"
export CXXFLAGS="-fPIC -D__MUSL__=1"
3.2、编译fio源码
编译前我们先分清楚cpu架构位数和软件架构的位数有什么区别,这个决定了我们选择fio_env32.sh还是fio_env64.sh,选择aarch64还是arm
首先,hdc shell getconf LONG_BIT 输出的是OS位数,决定了我们使用fio_env32.sh还是fio_env64.sh,当然,64位OS也向下支持32位,但32位却不能运行64位,建议使用对应版本的fio_env.sh。
其次 hdc shell uname -a 输出的是cpu架构,决定了我们--cpu = arm 还是等于aarch64 。当然也有x86、x86_64等,选对应的即可。
注意:
交叉编译环境与设备CPU架构和软件系统架构有关,需根据实际情况配置和修改。
- RK3568 cpu架构为aarch64,查看方法如下:
> hdc shell uname -a
Linux localhost 5.10.184 #1 SMP Sun Jun 16 01:10:03 CST 2024 aarch64
- 设备系统软件架构为32bit,查看方法如下:
> hdc shell getconf LONG_BIT
32
在third_party/fio-3.37/目录下运行fio_env32.sh,此处以32为例:
$ cd third_party/fio-3.35/
$ source fio_env32.sh
接着上面步骤,在third_party/fio-3.37/目录下执行下面的命令
#配置fio编译环境,cpu架构为aarch64; 安装文件生成路径为./install
$ ./configure --cpu=aarch64 --prefix=$PWD/install
Operating system Linux
CPU arm64
Big endian no
Compiler /home/oh4.1/prebuilts/ohos-sdk/linux/11/native/llvm/bin/clang --target=arm-linux-ohos
Cross compile yes
Static build no
Wordsize 32
...
TCMalloc support no
se