【海思SS626

2023-10-30


在这里插入图片描述

一、概述

这篇文章主要记录在 Ubuntu18.04 安装海思SS626整个SDK的全过程,以及编译过程中遇到的问题。

编译环境:
Win10 + VMware17Pro + Ubuntu 18.04 LTS

VMware17Pro的安装可以参考:windows安装VMware最新版本(VMware Workstation 17.0 Pro)详细教程

Ubuntu 18.04 LTS 是前几天刚安装的新系统,只装了几个软件Vim、samba、ssh,这样可以避免之前安装过的软件包在无意中解决了此次编译的问题i。其安装过程记录在:【海思SS626 | 开发环境】VMware17安装Ubuntu 18.04.6

重要说明:
编译所有的海思SDK之前,要留意海思SDK中关于开发环境的几个文档,不要拿到SDK就直接按照readme去编译。SDK文档会需要按照哪些库,这样可以避免编译过程中出现不必要的错误。

编译SDK需要阅读的文档路径:
SS626ReleaseDoc\zh\01.software\board\OSDRV\SS626V100 开发环境用户指南.pdf
SS626ReleaseDoc\zh\01.software\board\OSDRV\Huawei LiteOS 开发指南.pdf

在这里插入图片描述

二、安装交叉编译工具

只要是SS626的开发主机,无论你是否需要编译SDK,都需要安装交叉编译工具,这节记录SS626的两个交叉编译工具的安装过程:

✨2.1 安装 aarch64-mix410-linux.tgz

tar -zxf aarch64-mix410-linux.tgz
cd aarch64-mix410-linux/
chmod +x aarch64-mix410-linux.install
sudo ./aarch64-mix410-linux.install
source /etc/profile

✨2.2 安装 cc-riscv32-cfg11-musl-20220523-elf.tar.gz

tar -zxf cc-riscv32-cfg11-musl-20220523-elf.tar.gz
cd cc-riscv32-cfg11-musl-20220523-elf/
sudo ./install.sh
cd cc-riscv32-cfg11-musl-20220523-elf/bin
echo "export PATH=$(pwd):\${PATH}" >> $HOME/.profile
source ~/.profile

✨2.3 检查工具链版本,打印版本则表示安装成功

aarch64-mix410-linux-gcc -v
riscv32-cfg11-musl-20220523-elf-gcc -v

在这里插入图片描述

三、安装软件包

本文的操作系统是Ubuntu18.04LTS的,这个是为了与SS626的开发包编译系统保持一致而重新安装的系统,基本没安装过其他软件。下面根据《SS626V100 开发环境用户指南.pdf》进行安装必要的软件包。
在这里插入图片描述


✨3.1 安装软件包

这里的软件包有点多,我也没去试哪些不需要装,反正总共就400多M,建议按照文档全部安装,避免编译过程中遇到问题:
在这里插入图片描述

sudo apt-get install make libc6-i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev ncurses-term libncursesw5-dev g++ u-boot-tools texinfo texlive gawk libssl-dev openssl bc p7zip-full gperf bison flex diffutils git unzip libtool autopoint gettext po4a

✨3.2 安装mtd-utils的依赖库

mtd-utils依赖以下几个库,以ubuntu为例,安装方式请参考下面命令:

sudo apt-get install zlib1g-dev liblzo2-dev uuid-dev pkg-config automake

✨3.3 安装pip和kconfiglib

LiteOS 编译需要安装的工具包括pythonpipkconfiglib,python在Ubuntu18.04系统已经默认安装了 python2.7python3.6,符合编译要求,下面只安装pip和kconfiglib,如果你的系统没有python,则需要到 python3.8 官网根据文档安装。

  • setuptools安装
    pip依赖setuptools,如果setuptools不存在,也需要安装:
    点击 setuptools源代码包下载地址,可以参考下面的命令进行安装:
unzip setuptools-50.3.2.zip
cd setuptools-50.3.2/
python3 setup.py install
tar zxf pip-20.2.4.tar.gz
cd pip-20.2.4/ 
sudo python3 setup.py install
  • kconfiglib安装
sudo pip install kconfiglib

注意:
setuptools最新版本不支持python 2.7,如果使用python 2.7,请下载setuptools 45.0.0版本以支持python 2.7。
前面都是使用python3去安装的,所以需要将 /usr/bin/python 软链接指向python3.6 避免编译出错,参考下面命令修改:

$ ls /usr/bin/python -l
lrwxrwxrwx 1 root root 9 416  2018 /usr/bin/python -> python2.7
$ cd /usr/bin
$ sudo rm python
$ sudo ln -s python3.6 python
$ ls /usr/bin/python -l
lrwxrwxrwx 1 root root 9 913 20:14 /usr/bin/python -> python3.6

✨3.4 其他配置

  • 配置默认使用bash
    执行sudo dpkg-reconfigure dash 选择no。避免遇到错误:
/bin/sh: 1: pushd: not found
/bin/sh: 1: popd: not found
  • 创建/etc/ld.so.preload 文件,并执行echo "" > /etc/ld.so.preload,以解决64bit linuxserver上某些第三方库编译失败的问题。

在这里插入图片描述

四、解压SDK,打补丁

2.1 解压 SS626V100R001C02SPC010.rar,在Windows解压也可以;

2.2 解压后,有三个目录:00.hardware、01.software、02.only for reference
在这里插入图片描述

2.3 打补丁,将ot开头的API函数转换成hi开头:

  • SS626V100R001C02SPC010\02.only for reference\software目录下的 ref_patch.shSS626V100_REF_V2.0.1.0.tgz 复制到 SS626V100R001C02SPC010目录,readme.txt 是使用说明;
    在这里插入图片描述
  • SS626V100R001C02SPC010\01.software\board\SS626V100_SDK_V2.0.1.0.tgz 复制到 SS626V100R001C02SPC010,复制后SS626V100R001C02SPC010目录如下:
    在这里插入图片描述
  • 解压 SS626V100_SDK_V2.0.1.0.tgz,并进去执行 sdk.unpack,执行后回到SS626V100R001C02SPC010目录;
  • 解压 SS626V100_REF_V2.0.1.0.tgz ,执行 ref_patch.sh

操作步骤代码如下:

# 1. 复制 ref_patch.sh 和 SS626V100_REF_V2.0.1.0.tgz
$ cp 02.only\ for\ reference/software/ref_patch.sh ./
$ cp 02.only\ for\ reference/software/SS626V100_REF_V2.0.1.0.tgz ./

# 2. 复制 SS626V100_SDK_V2.0.1.0.tgz
$ cp 01.software/board/SS626V100_SDK_V2.0.1.0.tgz ./

# 3.解压 SS626V100_SDK_V2.0.1.0.tgz 并进去执行 sdk.unpack
$ tar zxf SS626V100_SDK_V2.0.1.0.tgz 
$ cd SS626V100_SDK_V2.0.1.0/
$ ./sdk.unpack 
$ cd ..

# 4.解压 SS626V100_REF_V2.0.1.0.tgz ,执行 ref_patch.sh
$ tar zxf SS626V100_REF_V2.0.1.0.tgz 
$ chmod +x ref_patch.sh 
$ ./ref_patch.sh 

完成上面步骤后,SS626V100R001C02SPC010\SS626V100_SDK_V2.0.1.0就是以hi开头的API的SDK了。例程代码在SS626V100R001C02SPC010\SS626V100_SDK_V2.0.1.0\amp\a55_linux\mpp\sample; u-boot、内核源码在SS626V100R001C02SPC010\SS626V100_SDK_V2.0.1.0\open_source
在这里插入图片描述

在这里插入图片描述

五、编译整个SDK,及问题解决

经过前面的准备工作后,可以开始编译整个SDK包了,而且现在基本不会出现什么问题了,下面的错误汇总是没装软件包前的错误。编译前仔细阅读SS626V100_SDK_V2.0.1.0/osdrv/readme.txt文件,我编译得是emmc的,参考下面命令编译:

cd SS626V100_SDK_V2.0.1.0/osdrv/
make BOOT_MEDIA=emmc CHIP=ss626v100 all

也可以使用下面命令记录编译时长到maketime文件:

date > maketime; make BOOT_MEDIA=emmc CHIP=ss626v100 all; date >> maketime

✨5.1 错误1:/bin/sh: 1: pushd: not found

错误
pushd /home/samba/sdk/00_SS626SDK/SS626V100_SDK_V2.0.1.0/open_source/u-boot;tar xf u-boot-2020.01.tar.gz -C .;popd
/bin/sh: 1: pushd: not found
/bin/sh: 1: popd: not found

原因
从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)而不是bash(the GNUBourne-Again Shell),但Login Shell还是bash,原因是dash更快、更高效,而且它符合POSIX规范,Ubuntu在启动的时候会运行很多shell脚本,使用dash可以加快启动速度。
通过命令 ll /bin/sh 确实可以看出来用的是dash。

解决
sudo dpkg-reconfigure dash #选择no

✨5.2 错误2:ImportError: No module named kconfiglib

编译liteos时,报错

ImportError: No module named kconfiglib
build/menuconfig/Makefile.kconfig:11: recipe for target 'savemenuconfig' failed
make[1]: *** [savemenuconfig] Error 1

原因
没有 kconfiglib 模块,(No module named kconfiglib),可能pip没装好,可能kconfiglib 装在python3.6,而使用python2.7去编译,

解决:安装对应模块
pip install kconfiglib
安装时,又提示3.6已经安装该模块,打印如下,继续编译liteos仍然报错;

$ pip install kconfiglib
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: kconfiglib in /usr/local/lib/python3.6/dist-packages (14.1.0)

查看python:ls /usr/bin/python -l,是python2.7,参考下面命令改为指向python3.6

$ ls /usr/bin/python -l
lrwxrwxrwx 1 root root 9 416  2018 /usr/bin/python -> python2.7
$ cd /usr/bin/
$ sudo rm python
$ sudo ln -s python3.6 python
$ ls /usr/bin/python -l
lrwxrwxrwx 1 root root 9 913 20:14 /usr/bin/python -> python3.6

✨5.3 错误3:The autopoint command is part of the GNU gettext package

编译 util-linux-2.37.1 时,`报错``:

$ ./autogen.sh 
You must have autopoint installed to generate the util-linux build system.
The autopoint command is part of the GNU gettext package.

解决,安装 autopoint:

$ sudo apt install autopoint

✨5.4 错误4:The program ‘po4a’ was not found.

编译 xz 时,报错:

The program 'po4a' was not found.

解决,安装 po4a:

$ sudo apt install po4a

在这里插入图片描述
文章未经许可,不许转发

第一次编译时,报错很多,而且每次都要重新编译很久,所以就放弃编译整个sdk了,过了两周后,找个周末的时间,重新安装一个纯净的Ubuntu18.04,特地重新编译一次,用了一个周末的时间,终于可以完整编过。又用了四个小时记录于此博客。
记录于2023-09-15 23:11:17,有错误的地方欢迎指正。

如果文章有帮助的话,点赞

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【海思SS626 的相关文章

  • 我们如何在使用循环时调用 ansible playbook 中的变量

    我有两个文件 其中这些文件包含server names and server IP s 我想更改 替换一些特定的server names and IP addressees根据要求在两个文件中 这与这篇文章 因为它被要求开设一个新职位 ht
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • bash while 循环的布尔表达式中的 -lt 意味着什么?

    我猜测它代表小于基于输出 但是我在哪里可以找到有关此语法的文档 bin bash COUNTER 0 while COUNTER lt 10 do echo The counter is COUNTER let COUNTER COUNTE
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 链接错误:命令行中缺少 DSO

    我对 Linux 使用 Ubuntu 14 04 LTS 64 位 相当陌生 来自 Windows 并且正在尝试移植我现有的 CUDA 项目 当通过链接时 usr local cuda bin nvcc arch compute 30 co
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • grep 排除文件的数组参数

    我想从我的文件中排除一些文件grep命令 为此我使用参数 exclude excluded file ext 为了更容易阅读 我想使用包含排除文件的 bash 数组 EXCLUDED FILES excluded file ext 然后将
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • 我们真的应该使用 Chef 来管理 sudoers 文件吗?

    这是我的问题 我担心如果 Chef 破坏了 sudoers 文件中的某些内容 可能是 Chef 用户错误地使用了说明书 那么服务器将完全无法访问 我讨厌我们完全失去客户的生产服务器 因为我们弄乱了 sudoers 文件并且无法再通过 ssh
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe

随机推荐

  • MYSQL5.7/MYSQL8.0迁移dm8字符乱码以及指定模式问题笔记总结

    开发一个项目 需要用dm8重构 使用了达梦自带的迁移工具 dm数据迁移工具 安装使用教程参考官网即可 安装前准备 达梦技术文档 dameng com 1 字符乱码问题解决 在迁移的过程中遇到了乱码 经过反复百度 也没有解决 后面经过反思 总
  • Java复习-12-继承、覆写与Annotation 注解

    继承与覆写 实例化子类对象时 会优先实例化其继承的父类对象 即子类构造方法中隐含了父类构造方法 java中的类继承不支持多重继承 但支持多层继承 并且对于个人编写的代码而言 理论上不应该超过三层 子类不能直接访问父类中的 private 的
  • 时序预测工具库(Prophet)介绍+代码

    时序预测工具库 Prophet 一 Prophet 简介 二 Prophet 适用场景 三 Prophet 算法的输入输出 四 Prophet 算法原理 五 与机器学习算法的对比 六 代码 6 1 依赖安装 6 2 预测demo 6 3 效
  • ARM汇编指令

    1 ARM寄存器那点知识 1 1 ARM处理器的八种工作模式 在ARMv8中加入了Monitor模式用于安全扩展 usr模式 正常程序运行时的模式 fiq模式 当配置有快速中断时 如果产生fiq时间 ARM核将会切换到该模式 irq模式 中
  • 使用Docker部署FastDFS集群

    FastDFS集群部署 1 下载FastDFS镜像 2 创建fastdfs主机映射目录 3 修改配置信息 4 运行tracker容器 5 运行storage容器 6 查看FastDFS监控状态 1 下载FastDFS镜像 docker pu
  • CUDA数组分配

    cuda内存分配真是乱啊 这次总结一下数组的分配 概述 数组分配可以通过cudaMallocArray 和cudaMalloc3DArray 1 cudaMallocArray cudaError t cudaMallocArray str
  • [Pytorch系列-50]:卷积神经网络 - FineTuning的统一处理流程与软件架构 - Pytorch代码实现

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121363706 目录 第1章 关于F
  • DCMM数据能力成熟度评估模型--学习笔记(1)

    DCMM数据能力成熟度评估模型 学习笔记 1 DCMM简介 结构组成和成熟度评估等级划分 1 1 DCMM简介 1 2 DCMM结构组成 1 3 DCMM关键过程域 1 3 1 数据战略 指导方针 1 3 2 数据治理 机制保障 1 3 3
  • MySQL学习笔记

    我们经常用到的简单MySQL语句 做一个总结 对于没有基础的同学也有帮助 对于有基础的同学可以参考作为借鉴 狂神说Java 1 连接数据库语句 mysql h 服务器主机地址 u 用户名 p 用户密码 注意 p后面不能加空格 否则会被当做密
  • Servlet学习(六):Response对象

    1 Response设置响应数据功能介绍 HTTP响应数据总共分为三部分内容 分别是响应行 响应头 响应体 对于这三部分内容的数据 respone对象都提供了哪些方法来进行设置 响应行 对于响应头 比较常用的就是设置响应状态码 void s
  • docker Error response from daemon 解决

    docker Error response from daemon pull access denied for xxx repository does not exist or may require docker login denie
  • Android Studio 导入Eclipse项目

    将Eclipse项目或者其他的Android项目导入Android 会因为项目结构不一样 或者下载的grandle版本不一致 经常会导致import project卡死 解决的简单办法 首先 打开Android studio 然后impor
  • Linux shell:判断变量是否包含某个字符串的几种方法

    方法一 利用grep查找 strA long string strB string result echo strA grep strB if result then echo 包含 else echo 不包含 fi 先打印长字符串 然后在
  • Vuejs Prop基本用法

    一 使用Prop传递数据 组件实例的作用域是孤立的 这意味着不能并且不应该在子组件的模板内直接引用父组件的数据 可以使用props把数据传给子组件 prop是父组件用来传递数据的一个自定义属性 子组件需要显示的地用props选项声明 pro
  • 异常:java.lang.ClassNotFoundException: org.springframework.web.servlet.Dispatcher

    首先声明一点 导致这个异常的情况有很多种可能 我只是说一下我遇到的异常解决办法 java lang ClassNotFoundException org springframework web servlet Dispatcher 可能原因
  • Wwise音频解决方案概述

    Wwise编辑器 音频设计师在Wwise编辑器 具体使用请参考 Wwise Help 中完成声音的集成和设置 并通过UE4和unity的Wwise插件 将制作好地资源导入到游戏编辑器中 Wwise编辑器是一款插件式架构的工具 其功能由众多插
  • 使用vue+百度接口实现关键词搜索

    html代码块 div 请输入关键词 div
  • Java11安装遇到C:\ProgramData\Oracle\Java\javapath\java.exe”

    1 官网下载java11 发现根本就找不到了 官网上放置的是最新的 之前版本我找不到 只有去别人那里拿 如果你刚好也想要 可以私聊我 我到时候发给你 2 下载完成直接下一步安装就OK了 但会发现只有jdk没有jre 其实根本没必要生成出jr
  • el-dialog实现可拖曳并且可点击底层页面

    el dialog实现可拖曳并且可操作底层页面 拖曳 1 新建文件 directives js import Vue from vue v dialogDrag 弹窗拖拽属性 Vue directive dialogDrag bind el
  • 【海思SS626

    目录 一 概述 二 安装交叉编译工具 2 1 安装 aarch64 mix410 linux tgz 2 2 安装 cc riscv32 cfg11 musl 20220523 elf tar gz 2 3 检查工具链版本 打印版本则表示安