1.2 海思SS928开发 - 开发环境 - 工具链安装

1.2 开发环境 - 工具链安装

  • 为了方便使用,计划将工具链做成 SS928 SDK 仓库的一部分,并编写一个安装脚本。

创建仓库

  • 在 gitlab 上创建 SS928 SDK 仓库,并命名为 SS928_SDK_G7.3_K4.19,其中 G7.3 代表 gcc 版本为 7.3,K4.19 代表内核版本为 4.19。

  • 进入开发虚拟机,克隆仓库:

    cd ~
    mkdir -p hiss928/sdk && cd hiss928/sdk
    git clone http://gitlab.xxx.com/SDK/SS928_SDK_G7.3_K4.19.git ss928_sdk_g7.3_k4.19
    cd ss928_sdk_g7.3_k4.19 && mkdir toolchain tmp
    

拷贝工具链

  • 进入到厂商提供的工具链所在目录,使用以下命令将工具链拷贝至开发虚拟机:
    • scp aarch64-mix210-linux.tgz ubuntu@172.16.0.xx:hiss928/sdk/ss928_sdk_g7.3_k4.19/tmp
    • scp cc-riscv32-cfg5-musl-20211008-elf.tar.gz ubuntu@172.16.0.xx:hiss928/sdk/ss928_sdk_g7.3_k4.19/tmp

解压工具链

  • 进入开发虚拟机,cd ~/hiss928/sdk/ss928_sdk_g7.3_k4.19/tmp
  • aarch64:
    • 解压工具链 tar -xf aarch64-mix210-linux.tgz
    • 解压后可以得到四个文件:aarch64-mix210-linux.tar.bz2 aarch64-mix210-linux.install runtime_lib.tgz readme.txt
    • 阅读 aarch64-mix210-linux.install 安装脚本,可以得出安装步骤如下:
      • 解压两个压缩包到指定的安装目录(用户可选)
      • 将工具链加入系统路径,并写入 /etc/profile
  • riscv32:
    • 解压工具链 tar -xf cc-riscv32-cfg5-musl-20211008-elf.tar.gz
    • 解压后可以得到三个文件:cc_riscv32_musl.tar.gz README.md install.sh
    • 阅读 install.sh 安装脚本,可以得出安装步骤如下:
      • 解压压缩包到默认的安装目录(安装目录换了个名字,多此一举)
      • 为工具链创建软链接(多此一举)
      • 整理gcc库(没搞明白,先照着弄)
      • 将工具链加入系统路径,并写入 /etc/profile

编写安装脚本

  • 以上两个工具链默认的安装脚本不符合需求,需求如下:

    • 默认安装目录为仓库下的 toolchain 目录,且不可更改
    • 未安装工具链时才执行安装操作
    • 只在需要使用的时候将工具链加入系统路径(由于本人虚拟机里面工具链超级多)
  • 准备安装需要的文件:

    • cp -f aarch64-mix210-linux.tar.bz2 runtime_lib.tgz ~/hiss928/sdk/ss928_sdk_g7.3_k4.19/toolchain
    • cp -f cc_riscv32_musl.tar.gz ~/hiss928/sdk/ss928_sdk_g7.3_k4.19/toolchain
  • 创建脚本文件:

    • cd ~/hiss928/sdk/ss928_sdk_g7.3_k4.19
    • touch env_setup.sh
    • chmod a+x env_setup.sh
  • 编写脚本,脚本内容如下:

    #!/bin/bash
    
    # 获取当前脚本所在目录
    # 支持不进入到当前目录使用,例如 source ~/xxx/ss928_sdk_g7.3_k4.19/env_setup.sh
    echo "$0" | grep -q "bash"
    if [ $? -eq 0 ]; then
        CUR_DIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd )
    else
        CUR_DIR=$(dirname $0)
    fi
    
    # 默认安装目录
    TOOLCHAIN_PATH=${CUR_DIR}/toolchain
    
    # aarch64 工具链
    AARCH64_TOOLCHAIN=aarch64-mix210-linux
    AARCH64_TOOLCHAIN_TAR=${TOOLCHAIN_PATH}/${AARCH64_TOOLCHAIN}.tar.bz2
    AARCH64_RUNTIME_LIB=${TOOLCHAIN_PATH}/runtime_lib.tgz
    AARCH64_TOOLCHAIN_READY=${TOOLCHAIN_PATH}/aarch64_ready
    
    # 通过判断文件 aarch64_ready 的存在,来确定 aarch64 工具链是否已安装
    if [ ! -f ${AARCH64_TOOLCHAIN_READY} ]; then
        # 解压工具链
        tar -xvf ${AARCH64_TOOLCHAIN_TAR} -C ${TOOLCHAIN_PATH}
        tar -xvf ${AARCH64_RUNTIME_LIB} -C ${TOOLCHAIN_PATH}/${AARCH64_TOOLCHAIN}
        echo "ok" > ${AARCH64_TOOLCHAIN_READY}
    fi
    
    # riscv32 工具链
    RISCV32_TOOLCHAIN=cc_riscv32_musl
    RISCV32_TOOLCHAIN_TAR=${TOOLCHAIN_PATH}/${RISCV32_TOOLCHAIN}.tar.gz
    RISCV32_TOOLCHAIN_READY=${TOOLCHAIN_PATH}/riscv32_ready
    
    # 通过判断文件 riscv32_ready 的存在,来确定 riscv32 工具链是否已安装
    if [ ! -f ${RISCV32_TOOLCHAIN_READY} ]; then
        # 解压工具链
        tar -xvf ${RISCV32_TOOLCHAIN_TAR} -C ${TOOLCHAIN_PATH}
        # 整理gcc库
        pushd ${TOOLCHAIN_PATH}/${RISCV32_TOOLCHAIN}/lib/gcc/riscv32-linux-musl/7.3.0
        mv libgcc.a libgcc_org.a
        cp libgcc-origin-noop.a libgcc.a
        popd
        echo "ok" > ${RISCV32_TOOLCHAIN_READY}
    fi
    
    # 加入系统路径
    TMP_PATH=${PATH}:${TOOLCHAIN_PATH}/${AARCH64_TOOLCHAIN}/bin
    export PATH=${TMP_PATH}:${TOOLCHAIN_PATH}/${RISCV32_TOOLCHAIN}/bin
    

安装工具链

  • 执行命令 source ./env_setup.sh 即可完成安装。

测试工具链

  • aarch64:
    • 查看 gcc 版本,aarch64-mix210-linux-gcc -v,可以看到版本为 gcc version 7.3.0 (HC&C V1R3C00SPC200B042_20221123)
    • 查看默认的 c++ 标准 aarch64-mix210-linux-g++ -E -dM - < /dev/null | grep __STDC_VERSION__,报错如下:
      • error while loading shared libraries: libisl.so.19: cannot open shared object file: No such file or directory
      • 库版本不匹配导致的,官方建议的虚拟机版本为 ubuntu 18.04,其 libisl 的版本为 libisl.so.19,而本人使用的虚拟机为 ubuntu 22.04,libisl 的版本为 libisl.so.23
      • 解决方法:sudo ln -sf /usr/lib/x86_64-linux-gnu/libisl.so.23 /usr/lib/x86_64-linux-gnu/libisl.so.19
    • 创建一个只有 main 函数的文件,aarch64-mix210-linux-g++ xx.cpp,编译通过,即说明工具链可正常使用。
  • riscv32:
    • 查看 gcc 版本,riscv32-linux-musl-gcc -v,可以看到版本为 gcc version 7.3.0 (20211008)
    • 查看默认的 c++ 标准 riscv32-linux-musl-g++ -E -dM - < /dev/null | grep __STDC_VERSION__,输出为 #define __STDC_VERSION__ 201112L
    • 创建一个只有 main 函数的文件,riscv32-linux-musl-g++ xx.cpp,编译通过,即说明工具链可正常使用。

完善仓库

  • cd ~/hiss928/sdk/ss928_sdk_g7.3_k4.19/toolchain && touch .gitignore,文件内容如下:

    aarch64-mix210-linux/
    aarch64_ready
    cc_riscv32_musl/
    riscv32_ready
    
  • tmp 目录如不需要可以删除掉,最后仓库目录结构如下:

    .
    ├── env_setup.sh
    ├── README.md
    └── toolchain
        ├── aarch64-mix210-linux.tar.bz2
        ├── cc_riscv32_musl.tar.gz
        └── runtime_lib.tgz
    
  • 推送代码到远端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

专注的罗哈哈

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

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

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

打赏作者

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

抵扣说明:

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

余额充值