移植hdf5到hi3519

1.编译环境

2.移植步骤

  • cmake配置:cmake-gui

选择源码路径,编译配置文件路径,编译器,点击configure(其会报错,不用管,再次点击即可),选择安装路径,点击generate

  • 参考如下脚本来安装:

    • 1)更改一下交叉编译工具
    • 2)如果ssh工具没有,可以使用telnet,该库的移植需要在宿主机编译,在目标机执行一些初始化的程序,生成一些arm平台的配置文件,然后在继续编译
#!/bin/sh
# to cross compile the hdf5 library on arm we need some generated source code
# from the target platform.
# This script does the following:
# 1. setup a cmake build
# 2. try to build with pre generated files (you have to generate them)
#    Place them in arm_files/generated/${platform}
#    (relative to the directory you start this script) eg:
#
#    arm_files/generated/
#    ├── sam9
#    │   ├── H5lib_settings.c
#    │   └── H5Tinit.c
#    └── xilinx
#        ├── H5lib_settings.c
#        └── H5Tinit.c
#   
# 2. OR connect via ssh with this script to your arm target and it will
#    generate the files on the fly
#
# preconditions:
# -------------
# - we need cmake
# - we need a cross compiler reachable within $PATH so cmake can detect
# - download source code: hdf5-1.8.16.tar.bz2
# - extract tarball
# - go into extracted tarball and start this script
#   eg ./build_hdf5.sh generate
#   OR if you have pregenerated files for H5lib_settings.c and H5Tinit.c
#   ./build_hdf5.sh
##########################################################

g_generate_on_host="192.168.0.6"

g_generate="$1"
G_GENERATE_H5DETECT="H5Tinit.c"
G_GENERATE_H5MAKE_LIBSETTINGS="H5lib_settings.c"
G_INITIAL_DIR="$PWD"

function cmake_tool_chain_helper()
{
    local toolchain="$1"
    local build_dir="$2"

    cat << EOF > $build_dir/${toolchain}.cmake
    set(CMAKE_SYSTEM_NAME Linux)
    set(CMAKE_SYSTEM_PROCESSOR arm)

    set(CMAKE_C_COMPILER    $toolchain-gcc)
    set(CMAKE_CXX_COMPILER  $toolchain-g++)

    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
EOF
}

function generate_fake_tools()
{
    echo "#!/bin/sh" > H5detect
    echo "#!/bin/sh" > H5make_libsettings
    chmod +x H5detect H5make_libsettings
}

function build_for_platform()
{
    local platform="$1"
    local build_dir="$2"
    local toolchain="$3"
    local install_dir="$4"

    test -e "$build_dir" || mkdir -p "$build_dir"
    cd "$build_dir"

    cmake_tool_chain_helper "$toolchain" "$build_dir"

    # run 2 times as errors will occur due to not supported cross compiling
    # 1st run configure
    # 2nd run generate Makefiles
    for x in 1 2 ; do
        cmake -G "Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE="${build_dir}/${toolchain}.cmake" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${install_dir}" \
            -DBUILD_TESTING=false -DHDF5_BUILD_EXAMPLES=false -DCMAKE_CXX_FLAGS="-D_GNU_SOURCE" -DCMAKE_C_FLAGS="-D_GNU_SOURCE" ..
    done

    # make: it will fail several time due to plattform depending files to be generated
    # we have them allready generated on the arm platform
    # so we replace the tools with a fake tools
    local path_gen_files="${G_INITIAL_DIR}/arm_files/generated/${platform}"
    if [ "$g_generate" == "generate" ] ;then
        local dir=/path/on/device/

        path_gen_files="/tmp/h5_generated"
        test -e "$path_gen_files"  || mkdir "$path_gen_files"

        for x in  bin/H5detect bin/H5make_libsettings H5detect H5make_libsettings; do
            test -e "$x" && rm "$x"
        done

        # try to generate files on host -> this will fail
        make

        echo "-------------------"
        echo "# ---> copy files to target"
        echo "-------------------"
        scp bin/H5detect bin/H5make_libsettings libhdf5.settings root@${g_generate_on_host}:${dir} || exit 1

        echo "-------------------"
        echo "# ---> chmod those files"
        echo "-------------------"
        ssh root@${g_generate_on_host} "cd $dir &> /dev/null ; chmod +x H5detect H5make_libsettings"

        echo "-------------------"
        echo "# ---> generate "$path_gen_files"/$G_GENERATE_H5DETECT"
        echo "-------------------"
        ssh root@${g_generate_on_host} "cd $dir &> /dev/null ; ./H5detect" > "$path_gen_files"/$G_GENERATE_H5DETECT

        echo "-------------------"
        echo "# ---> generate "$path_gen_files"/$G_GENERATE_H5MAKE_LIBSETTINGS"
        echo "-------------------"
        ssh root@${g_generate_on_host} "cd $dir &> /dev/null ; ./H5make_libsettings" > "$path_gen_files"/$G_GENERATE_H5MAKE_LIBSETTINGS
    fi

    # below steps needs to be done twice as make tries to generate with arm binary on x86 (H5detect)
    # and second for H5make_libsettings
    make
    generate_fake_tools
    cp "$path_gen_files"/$G_GENERATE_H5MAKE_LIBSETTINGS .
    cp "$path_gen_files"/$G_GENERATE_H5DETECT .

    make
    generate_fake_tools
    cp "$path_gen_files"/$G_GENERATE_H5MAKE_LIBSETTINGS .
    cp "$path_gen_files"/$G_GENERATE_H5DETECT .


    # no start the real build
    make -j4
    make install
}

#build_for_platform "xilinx" "$PWD/build_xilinx" "arm-xilinx-linux-gnueabi" "$PWD/install_xilinx"
#build_for_platform "sam9" "$PWD/build_sam9" "arm-none-linux-gnueabi" "$PWD/install_sam9"</code><!--more-->
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值