【海思3516DV500 | 开发环境】编译整个SDK全过程以及问题汇总

news2025/1/9 21:18:44

一、开发环境

上表是海思提供的Hi3519DV500 开发环境的各部分软件描述,实际用起来你就知道,可能有出入,尝试换Ubuntu 20.04折腾了好几天都不行,使用推荐的Ubuntu 18.04.2 64bit一个上午就行。

基本的硬件要求如下:

● CPU Intel(R) Xeon(R) CPU E5-2450 0 @ 2.10GHz 或更好CPU
● DDR: >= 16GB
● Hard disk >= 600GB
● Gigabit Ethernet
● OS: Ubuntu 18.04.2 64bit

软件准备:

win10操作系统+virtualbox+ubuntu 18.04 LTS

ubuntu 18.04 LTS的iso可以直接从Ubuntu 18.04下载中获取。

注意事项:

编译海思SDK之前,务必要拿着SDK中关于开发环境的几个文档查看,不要上来就编译。

编译需要参考的文档:

 《Hi35xxVxxx 开发环境用户指南.pdf》

Hi3519DV500/Hi3516DV500 SDK 安装以及升级使用说明》

 二、交叉编译工具链

发布包提供编译工具链 aarch64-v01c01-linux-musl- aarch64-v01c01-linux-musl-
基于 64bit 操作系统 musl 的工具链。
安装步骤如下:
步骤1 解压工具链。
        执行如下命令进行解压: tar xf gcc-xxxx-aarch64-v01c01-linux-musl.tgz
步骤2 安装工具链。
        进入解压目录,执行:sudo ./install_gcc_toolchain.sh
检查工具链版本,打印版本号表示安装成功
aarch64-v01c01-linux-musl-gcc  -v

三、软件包安装

3.1 默认配置bash

执行sudo dpkg-reconfigure dash #选择no

3.2 安装软件包

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

 3.3 echo "" > /etc/ld.so.preload

创建 /etc/ld.so.preload 文件,并执行 echo "" > /etc/ld.so.preload ,以解决 64bit linux
server 上某些第三方库编译失败的问题。

3.4 mtd-utils依赖库

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

由于 mtd-utils通过pkg-config工具检查各个库是否正常安装,因此请参考如下方式设置pkg-config工具搜索路径:

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig/"

3.5 e2fsprogs依赖texlive

sudo apt-get install texlive

四、sdk解压patch合入

4.1 原始sdk解压

解压后,有三个目录:00.hardware、01.software、02.only for reference

其中原始的sdk在01.software\board\Hi3519DV500_SDK_V1.0.1.0.tgz

补丁目录02.only for reference

4.2 sdk补丁合入

hi3519dv500_REF_VX.0.X.X.tgz作为补丁包,可以将此补丁包打到hi3519dv500_SDK_VX.0.X.X.tgz包中,具体操作步骤如下:
1、将hi3519dv500_SDK_VX.0.X.X.tgz和hi3519dv500_REF_VX.0.X.X.tgz包放置到同一个文件夹下并解压,
    tar zxvf hi3519dv500_SDK_VX.0.X.X.tgz
    tar zxvf hi3519dv500_REF_VX.0.X.X.tgz
2、执行hi3519dv500_SDK_VX.0.X.X文件夹内部解压,
    ./sdk.unpack
3、执行打补丁操作,
    ./ref_patch.sh

    执行后,hi3519dv500_SDK_VX.0.X.X为打上REF补丁后的完整包。

五、SDK编译及问题解决

5.1 整体编译

前面基本上解决了sdk能都编译的问题,具体的编译命令可以参考,Hi3519DV500_SDK_V1.0.1.0/smp/a55_linux/source/bsp目录下面的readme_cn.txt文件。

具体到3516DV500是如下命令:

cd Hi3519DV500_SDK_V1.0.1.0/smp/a55_linux/source/bsp

make BOOT_MEDIA=emmc LIB_TYPE=musl CHIP=hi3516dv500 all

编译参数说明:
        1)BOOT_MEDIA默认选择emmc启动方式编译,可选择spi(spi nor and spi nand)启动方式编译,即BOOT_MEDIA=spi;
        2)LIB_TYPE默认为musl编译, 可选择glibc编译,即LIB_TYPE=glibc;
        3)CHIP默认为hi3519dv500,可选择hi3516dv500编译,即CHIP=hi3516dv500。 

5.2 错误处理

5.2.1 错误:/bin/sh: 1: pushd: 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 错误:The autopoint command is part of the GNU gettext package.

错误打印:

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


You must have libtool-2 installed to generate the util-linux build system.

解决方案:
sudo apt-get install autopoint
sudo apt-get install bison
sudo apt-get install libtool
sudo apt-get install libtool-bin

5.2.3 错误:错误:po4a/update-po: The program 'po4a' was not found.

编译xz-5.2.6时,报错打印
po4a/update-po: The program 'po4a' was not found.
po4a/update-po: Translated man pages were not generated.
Makefile:16: recipe for target '/home/vqmt/work/3516dv500/Hi3519DV500_SDK_V1.0.1.0/open_source/xz/out' failed
解决方法,安装 po4a:
$ sudo apt install po4a

六、其他修改

由于本人购买的是厂家自己定制的硬件类型,还需要对网络和lic作一些配置。给大家作为参考。

注意:3516dv500和3519dv500用的是同一套sdk,所以有些地方可能只有3519的文件,比如:hi3519dv500.h

6.1 百兆网络

配置文件修改:
网络问题 uboot 中修改hi3519dv500.h文件,具体目录:Hi3519DV500_SDK_V1.0.1.0\open_source\u-boot\u-boot-2022.07\include\configs\hi3519dv500.h

#define CONFIG_GMAC_PHY0_INTERFACE_MODE    2 /* rgmii 2, rmii 1, mii 0 */
#define CONFIG_GMAC_PHY1_INTERFACE_MODE    2 /* rgmii 2, rmii 1, mii 0 */

需要修改为:

#define CONFIG_GMAC_PHY0_INTERFACE_MODE    1 /* rgmii 2, rmii 1, mii 0 */
#define CONFIG_GMAC_PHY1_INTERFACE_MODE    1 /* rgmii 2, rmii 1, mii 0 */

建议直接修改Hi3519DV500_SDK_V1.0.1.0/open_source/u-boot/u-boot-2022.07.patch文件,这样可以保证每次make distclean之后还是能正常编译。

dts修改:

内核中修改hi3519dv500-demb.dts和hi3516dv500-demb.dts 中的默认配置是 rgmii-id 改为 rmii。

他们的目录为:

sdk/open_source/linux/linux-5.10.y/arch/arm64/boot/dts/vendor/hi3519dv500-demb.dts

sdk/open_source/linux/linux-5.10.y/arch/arm64/boot/dts/vendor/hi3516dv500-demb.dts

同样建议修改SDK//open_source/linux/linux-5.10.patch文件,保证每次make distclean之后还是能正常编译。

修改文件中:

+++ b/arch/arm64/boot/dts/vendor/hi3516dv500-demb.dts

和+++ b/arch/arm64/boot/dts/vendor/hi3519dv500-demb.dts内容

+&gmac {
+	phy-handle = <&ethphy>;
+	phy-mode = "rgmii-id";
+};

修改为

+&gmac {
+	phy-handle = <&ethphy>;
+	phy-mode = "rmii";
+};

 6.2 Iic地址修改

lic 地址,默认使用 i2c 4需要修改为i2c 3

具体修改为:Hi3519DV500_SDK_V1.0.1.0\smp\a55_linux\source\mpp\sample\common\sample_comm_vi.c 的这个函数sample_comm_vi_get_default_sns_info

七、最后总结

 有很多时候选择比努力重要,刚开始搞得时候,我觉得ubuntu20.04和ubuntu18.04应该没差多少,有问题以自己的经历搞定应该不成问题。哎,水里淹死的都是会游泳的,人家海思就是基于18.04搞得,其他的没试,自己就不要作死,不然真的会死。前面折腾了两天都不行,最后换成18.04一上午就好了,不要对自己过于自信。

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

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

相关文章

Qt 解析多级XML

补充笔记&#xff1a;Qt 史上最详细 - “操作XML文件” - 笔记 一、如下图为XML文件 annotation为根节点&#xff0c; first第一节点&#xff0c;second第二节点&#xff0c;third第三节点。 二、实现解析xml文件&#xff0c;并将解析数据用QTreeView显示&#xff0c;实现代码…

AD9161调试问题

AD961同步信号SYNC无法保持高逻辑电 现象 配置ADF4351时钟芯片使其产生频率为1.6GHz的时钟为AD9161提供工作时钟&#xff0c;JESD的线速率配置为8Gbps&#xff0c;并配置AD9161的寄存器使其工作在2x内插模式以实现IQ信号的模数转换模式。同时根据AD9161芯片手册对ADF4351提供的…

NoSql数据库 Redis集群详解

目录 一、NoSql数据库简介 1.1 数据库主要分为两大类&#xff1a;关系型数据库与 NoSQL 数据库 1.2 为什么还要用 NoSQL 数据库呢&#xff1f; 1.3 RDBMS和NOSQL的特点及优缺点&#xff1a; 二 Remote Dictionary Server 简介&#xff08;redis&#xff09; 2.1 什么是redis …

如何使用ssm实现物资进销存jsp

TOC ssm263物资进销存jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管理。这样的…

JavaScript学习文档(4):循环结构、初识数组、数组案例、操作数组

目录 一、循环结构 1、for语句 2、for循环案例 3、for循环嵌套及案例 4、while语句 5、continue关键字 6、break关键字 二、初识数组 1、什么是数组 2、为什么要数组 3、数组的基本使用 三、数组案例 1、数组求和及平均值 2、数组求最大值和最小值 四、操作数组…

做集运初期到底要不要上系统?

在集运业务的起步阶段&#xff0c;很多老板都会有这样的疑问&#xff1a;“我的包裹量还不多&#xff0c;真的需要投入资金和时间来上系统吗&#xff1f;”这个问题听起来合理&#xff0c;但实际上却忽视了业务发展中更为重要的几个方面。 1.用户体验&#xff1a;服务的核心 首…

C语言经典案例分享

题目&#xff1a;输入三个整数 x、y、z&#xff0c;请把这三个数由小到大输出。 程序分析&#xff1a;我们想办法把最小的数放到 x 上&#xff0c;先将 x 与 y 进行比较&#xff0c;如果 x>y 则将 x 与 y 的值进行交换&#xff0c;然后再用 x 与 z 进行比较&#xff0c;如果…

NVIDIA Jetson AGX Orin源码编译安装CV-CUDA

目录 1 下载源码并配置 2 编译安装CV-CUDA 2.1 安装相应依赖包 2.2 升级gcc到gcc-11 2.3 build 2.4 升级cmake 2.5 再次build 2.5.1 报错 /usr/include/c/11/bits/std_function.h:435:145: error: parameter packs not expanded with ‘...’: 3 直接使用安装包 参考…

力扣: 两两交换链表中的节点

文章目录 需求代码代码解释结尾 需求 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;…

jmeter性能测试之CSV 数据文件设置

文章目录 业务场景使用步骤步骤1&#xff1a;准备数据步骤二: 编写csv文件步骤三:添加CSV 数据文件设置步骤四:定义接口&#xff0c;选择文件上传&#xff0c;文件名称通过“浏览”添加即可 业务场景 有一个文件上传的接口&#xff0c;希望每个线程上传不同的文件&#xff08;比…

FOFA搜索引擎的语法

FOFA 是一款网络空间搜索引擎&#xff0c;允许用户通过自定义查询语法来检索全球范围内的互联网资产。FOFA 提供了丰富的语法&#xff0c;可以帮助用户筛选目标。以下是 FOFA 语法的基本介绍&#xff1a; 1. 基本语法格式 FOFA 的查询语句遵循以下格式&#xff1a; 字段&quo…

MVVM分层思想

M:Model数据模型 V:View视图 VM:ViewModel视图模型 Vue也是借鉴了MVVM的思想 在Vue中,M就是data,V指挂载点,而Vue实例本身就是一个VM <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X…

前端手写源码系列(二)——手写call、apply、bind

手写源码系列目录 一、作用二、手写call方法三、手写apply方法四、手写bind方法五、三者区别applycallbind小结 一、作用 call、apply、bind作用是改变函数执行时的上下文&#xff0c;简而言之就是改变函数运行时的this指向 那么什么情况下需要改变this的指向呢&#xff1f;下…

Spring Boot启用GZIP压缩

1.为什么是需要gzip压缩&#xff1f; 经常我们都会与服务端进行大数据量的文本传输&#xff0c;例如 JSON 就是常见的一种格式。通过 REST API 接口进行 GET 和 POST 请求&#xff0c;可能会有大量的文本格式数据提交、返回。然后对于文本&#xff0c;它有很高的压缩率&#x…

systemserver进程监控者--watchdog

戳蓝字“牛晓伟”关注我哦&#xff01; 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章&#xff0c;技术文章也可以有温度。 本文摘要 本文同样采用自述的方式来介绍systemserver进程的监控者watchdog&#xff0c;通过本文您将了解watchdog的作用&#xff0c;它…

【机器学习】梯度下降算法

梯度下降算法 这篇博客更加详细&#xff0c;以下只是我个人的理解 梯度下降算法原理讲解——机器学习-CSDN博客 梯度下降算法是一种优化算法&#xff0c;通过梯度下降找到函数最小值时的自变量值。 其基本思想是沿着梯度方向的反方向更新参数&#xff0c;直到逼近函数的极值…

【LLM大模型】生成式人工智能大型语言模型的安全性:概述

生成性AI大型语言模型&#xff08;LLMs&#xff09;的安全性&#xff1a;概述 具有生成性AI能力的大型语言模型&#xff08;如ChatGPT&#xff09;正面临加速采用和创新。生成性AI&#xff08;GAI&#xff09;的日益普及不可避免地引发了对这些模型相关风险和安全性的担忧。本…

Linux 下 gdb 的使用

目录 一、概述1、安装和启动 GDB 二、 GDB 常用命令1、查看源码2、断点2.1 设置断点2.2 查看断点信息2.3 删除断点2.4 激活/禁用断点2.5 观察断点2.6 捕获信号2.7 线程中断 3、查看信息3.1 查看数据3.2 查看内存3.3 查看栈信息3.4 查看栈帧信息 4、运行、调试5、编辑和搜索 一、…

MacOS安装 Python 和 PyCharm

MacOS安装 Python3.12.5 和 PyCharm 小阿呜有话说一、MacOS安装PythonPython官网下载 二、MacOS安装PyCharmPyCharm官网下载 叮嘟&#xff01;这里是小啊呜的学习课程资料整理。好记性不如烂笔头&#xff0c;今天也是努力进步的一天。一起加油进阶吧&#xff01; 小阿呜有话说 …

发完朋友圈就“退款”?黑神话的玩家是否都是“忠实粉丝”?

​声明&#xff1a;此篇为 ai123.cn 原创文章&#xff0c;转载请标明出处链接&#xff1a;https://ai123.cn/2228.html 《黑神话&#xff1a;悟空》自上线以来&#xff0c;便引发了玩家社区的广泛讨论。游戏的退款现象主要受到了一些技术问题和个人体验差异的影响。部分玩家因遇…