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 ]; thenCUR_DIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd )
    elseCUR_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.0mv libgcc.a libgcc_org.acp libgcc-origin-noop.a libgcc.apopdecho "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
    
  • 推送代码到远端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenHarmony轻量系统开发【12】OneNET云接入

12.1 OneNET云介绍 通常来说&#xff0c;一个物联网产品应当包括设备、云平台、手机APP。我将在鸿蒙系统上移植MQTT协议、OneNET接入协议&#xff0c;实现手机APP、网页两者都可以远程&#xff08;跨网络&#xff0c;不是局域网的&#xff09;访问开发板数据&#xff0c;并控制…

如何在阿里云主机上安装FreeBSD14系统

文章目录 在阿里云主机上安装FreeBSD14系统准备阿里云云主机识别目标磁盘下载 FreeBSD14解压缩 FreeBSD14系统镜像创建可启动的磁盘启动 FreeBSD14在阿里云主机上安装FreeBSD14系统 阿里云主机不支持 FreeBSD14 系统的镜像,因此需要手动进行安装。 准备阿里云云主机 在阿里云…

项目_预览和模拟器运行_真机运行鸿蒙应用---HarmonyOS4.0+鸿蒙NEXT工作笔记002

然后再来看如何使用预览,可以看到 右侧有个preview,点开就可以了 然后再有一个tools,这里 Device Manager,这个是模拟器 点开以后可以看到让我们连接,本地模拟器,还是远程模拟器,还是远程设备 这里我们选择phone 如果选择remote device,这个需要登录华为账号,会自动弹出来登…

前端网络---http协议演变

http协议的演变 什么是http协议&#xff1f; HTTP 协议全称为 Hypertext Transfer Protocol&#xff0c;即超文本传输协议&#xff0c;是互联网上应用最为广泛的一种网络传输协议 http协议演变 1991年0.9版本-------1996年1.0版本-------1997年1.1版本--------2015年2版本-…

探索SQL深入理解数据库操作的关键概念与技巧【文末送书】

文章目录 SQL语言从入门到精通入门篇进阶篇高级篇深入理解SQL SQL语言从入门到精通&#xff08;软件开发视频大讲堂&#xff09;【文末送书】 SQL语言从入门到精通 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库…

Linux命令-du命令(显示每个文件和目录的磁盘使用空间)

说明 du命令 也是查看使用空间的&#xff0c;但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间 的查看&#xff0c;还是和df命令有一些区别的 语法 du(选项)(参数)选项 -a, --all 显示目录中个别文件的大小。 -B, --block-size大小 使用指定字节数的块 -b, -…

数据结构-贪心策略(贪心算法)

贪心算法 1.贪心算法的核心思想 局部最优思想:在每一步决策时做出对当前看起来最优的解,并且期望这些局部最优的选择能成全全局最优解.全局最优构造:对于给定的问题&#xff0c;其全局最优解可以通过将问题分解为一系列子问题&#xff0c;然后在每个子问题上独立做出贪心选择来…

李飞飞团队发布《2024年人工智能指数报告》,预测人工智能未来发展趋势

昨天&#xff0c;斯坦福大学 Human-Center Artificial Intelligence (HAI)研究中心发布了《2024年人工智能指数报告》。 由斯坦福大学发起的人工智能指数&#xff08;AI Index&#xff09;是一个追踪 AI 动态和进展的非营利性项目&#xff0c;旨在全面研究 AI 行业状况&#xf…

Android Framework 常见解决方案(29)添加应用开发的共享库

1 原理说明 通过设置配置文件public.libraries.txt以及在system分区下添加so动态库的方式&#xff0c;让系统扩展动态库。关于动态库的拷贝较为简单&#xff0c;直接配置即可&#xff0c;这里主要解读下配置文件public.libraries.txt。 1.1 public.libraries.txt配置文件是什…

Redis主从复制及其原理

为什么要有主从复制 为了避免服务的单点故障&#xff0c;通过给主从复制可以把数据复制多个副本放在不同的服务器上&#xff0c;拥有数据副本的服务器可以用于处理客户端的读请求&#xff0c;扩展整体的性能 Redis的主从复制搭建 准备3台机器&#xff0c;主服务器ip为192.16…

云服务器租用一年、1个月优惠价格表,阿里/腾讯/京东/华为云

现在租一个服务器多少一个月&#xff1f;优惠价格低至3.8元1个月&#xff0c;租用一个月云服务器收费价格表&#xff1a;阿里云和腾讯云2核2G3M服务器优惠价格61元一年&#xff0c;折合一个月5元&#xff0c;京东云轻量云主机5.8元一个月&#xff0c;华为云服务器优惠价格3.8元…

未来交通:UWB模块引领智能交通系统的发展方向

随着城市化进程的加速和交通需求的不断增长&#xff0c;智能交通系统正成为解决城市交通问题的重要途径之一。UWB不断发展正在引领智能交通系统的发展方向。UWB模块作为UWB技术的核心组成部分&#xff0c;具有精准定位、快速响应、抗干扰等特点&#xff0c;为智能交通系统的构建…

Swift-19-基础入门

从本章开始大概用10篇左右文章介绍下Swift语言的基本用法。 简介 Objective-C作为一门比较老的语言&#xff0c; 缺少很多现代语言所具备的高级特性。Swift是目标是比C&#xff0c;C, ObjC更安全可靠&#xff0c;从而减少开发者对在应用运行时出错的代码进行调试的时间成本。本…

github,raw.githubusercontent.com 等网址登陆不上不去的设置方法

目录 提示域名解析错误&#xff1a; 出现的现象&#xff1a; 解决办法&#xff1a;修改host host改完不生效 解决方案1&#xff1a; 解决方案2&#xff1a; 提示域名解析错误&#xff1a; 出现的现象&#xff1a; 登陆github&#xff0c;raw.githubusercontent.com 等网…

Jmeter 接口造10w条用户数据

1、将mysql-connector-java-5.1.22-bin.jar放到D:\apache-jmeter-5.5\lib\ext目录下 2、在测试计划中&#xff0c;添加mysql-connector-java-5.1.22-bin.jar包路径 3、添加-线程组-添加-配置元件-jdbc connection configuration 4、配置jdbc连接参数 设置变量名称&#xff1a;…

pyqt之QNetworkAccessManager

QNetworkAccessManager是Qt自带的一个网络请求库&#xff0c;网上很多说的很模糊&#xff0c;在这总结一下 # coding: utf-8 import json import sys from pathlib import Path from typing import Union from urllib.parse import urlencodefrom PyQt5.QtNetwork import QNetw…

关于 AssertionError: Torch not compiled with CUDA enabled 问题

你好&#xff0c;我是 shengjk1&#xff0c;多年大厂经验&#xff0c;努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注&#xff01;你会有如下收益&#xff1a; 了解大厂经验拥有和大厂相匹配的技术等 希望看什么&#xff0c;评论或者私信告诉我&#xff01; 文章目录 一…

javaWeb智能医疗管理系统

简介 在当今快节奏的生活中&#xff0c;智能医疗系统的崛起为医疗行业带来了一场革命性的变革。基于JavaWeb技术开发的智能医疗管理系统&#xff0c;不仅为医疗机构提供了高效、精准的管理工具&#xff0c;也为患者提供了更便捷、更个性化的医疗服务。本文将介绍一个基于SSM&a…

vue快速入门(二十九)echarts在vue中的使用

注释很详细&#xff0c;直接上代码 上一篇 新增内容 echarts.js的下载途径echarts的饼图示范 echarts.js&#xff0c;点击跳转&#xff0c;右键另存即可 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

python内置函数frozenset()详解

Python 内置函数 frozenset() 1. 概述 frozenset() 是 Python 中的一个内置函数&#xff0c;用于创建一个不可变的集合&#xff08;frozenset&#xff09;。与普通的集合&#xff08;set&#xff09;不同&#xff0c;frozenset 不能被修改&#xff0c;也不能添加或删除元素。…