Openharmony 交叉编译haveged

一、下载源码

网址:https://github.com/jirka-h/haveged

下载zip后将其拷贝到openharmony的源码目录比如我这里在源码的third_party目录下创建了一个haveged的文件夹将下载好的源代码解压后放进去

二、配置SDK的环境

这里主要是参考了https://ost.51cto.com/posts/22682

首先需要编译sdk在源码根目录下执行

./build.sh --product-name ohos-sdk --target-cpu arm64 --ccache

sdk编译完成后需要将编译的native文件夹解压:

unzip out/sdk/packages/ohos-sdk/linux/native-linux-x64-xxxx-Release.zip -d out/sdk/packages/ohos-sdk/linux/

接着需要将sdk引入到环境变量中

export OHOS_SDK= out/sdk/packages/ohos-sdk/linux/ # 此处是我的ohos_sdk解压目录,请替换为你自己的解压目录
export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos"
export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos"
export LD="${OHOS_SDK}/native/llvm/bin/lld --target=aarch64-linux-ohos"
export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
export CFLAGS="-fPIC -D__MUSL__=1"
export CXXFLAGS="-fPIC -D__MUSL__=1"

你也可以将上述指令写到一个shell脚本中比如下面的cc_env.sh:

#!/bin/bash
#aarch64-linux-ohos
export OHOS_SDK=/home/yuwei/ZP37A/out/sdk/ohos-sdk/linux # 此处是我的ohos_sdk解压目录,请替换为你自己的解压目录
export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos"
export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos"
export LD="${OHOS_SDK}/native/llvm/bin/lld --target=aarch64-linux-ohos"
export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
export CFLAGS="-fPIC -D__MUSL__=1"
export CXXFLAGS="-fPIC -D__MUSL__=1"

三、编译

进入到haveged的源码中

cd third_party/haveged/

在编译之前需要修改一些代码如下:

在src/haveged.h下加入代码:

#ifndef HAVEGED_H
#define HAVEGED_H

#include "havege.h"
++ #define NO_COMMAND_MODE 1

在src/haveged.c中删除run_daemon最外层的死循环:

在这里插入图片描述

接着在编译时会有四个关于continue的报错可以将其删除或者直接return掉

第一处

在这里插入图片描述

第二处
在这里插入图片描述

第三处、第四处

在这里插入图片描述

改完上面四处的代码后这里解释一下首先定义NO_COMMAND_MODE是因为我的设备中如果不定义NO_COMMAND_MODE会报一个信号量创建失败导致整个进程无法启动的问题,所以这边定义NO_COMMAND_MODE将这种创建信号量的问题跳过,另外由于huaveged我主要是用来在开机时执行一次将随机熵迅速拉高,但是在run_daemon中我发现死循环只有第一次才会向dev/random中加入随机熵,后面是每过600s执行一次,我的目的是只在开机时增加,所以就将死循环去掉了。这样开机时就执行一次就退出了不会太影响系统的开销。继续编译的流程,下面开始编译代码:

source ../cc_env.sh
./configure --host=aarch64 --prefix=$PWD/install
make && make install

编译出来的可执行文件在install/bin下,将haveged可执行文件拷贝出来push到openharmony的开发板中,执行haveged -F

即可看到如下打印:

haveged starting up

问题:

1.如果你编译的时候发现报错如下

提示找不到 libhaveage.so 大概率是configure 时指定的host是aarch64-linux 需要先指定host为aarch64就可以编译通过了。

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐