海思编译链
⑴ 海思3516DV300搭建交叉编译环境问题记录
刚开始搭建海思交叉编译环境的时候遇到问题:
安装完arm-himix200-linux后,输入arm-himix200-linux -v,会出现如下错误:
xxx@xxx-virtual-machine:~/Downloads/study3516DV300/rp-hi3516dv300-busybox/sample/hifb$ arm-himix200-linux-gcc -v
arm-himix200-linux-gcc: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
错误方法:
export LC_CTYPE=C.UTF-8
这样做的话,arm-himix200-linux-gcc -v会显示成功,但是当去编译sample时候,会出现这个错误
collect2: fatal error: /opt/hisi-linux/x86-arm/arm-himix200-linux/host_bin/../lib/gcc/arm-linux-gnueabi/6.3.0/../../../../arm-linux-gnueabi/bin/nm terminated with signal 6 [Aborted], core mped
解决方案:
vi ~/.bashrc
最后加入这两句,完成后保存
export LC_ALL=C
export PATH="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin:$PATH"
编辑之后使环境变量生效的命令:source ~/.bashrc
之后编译sample通过,生成sample_hifb文件。
⑵ 如何在64位的Linux系统上使用汇编和C语言混合编程 第2页
编译和链接的时候使用的指令:(AMD处理器,64位操作系统)
编译链接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -c bar.c -o bar.o
3 ld -s -o foobar bar.o foo.o
汇编语言用nasm编写并用nasm编译器编译,而C语言用的是gcc编译,这些都没有问题,但是在链接的时候出错了,提示如下:
ld: i386 architecture of input file `foo.o' is incompatible with i386:x86-64 output
google了一下,意思就是nasm 编译产生的是32位的目标代码,gcc 在64位平台上默认产生的是64位的目标代码,这两者在链接的时候出错,gcc在64位平台上默认以64位的方式链接。
这样在解决的时候就会有两种解决方案:
<1> 让gcc 产生32位的代码,并在链接的时候以32位的方式进行链接
在这种情况下只需要修改编译和链接指令即可,具体如下:
32位的编译链接指令
1 nasm -f elf foo.s -o foo.o
2 gcc -m32 -c bar.c -o bar.o
3 ld -m elf_i386 -s -o foobar foo.o bar.o
具体的-m32 和 -m elf_i386 请自行查阅gcc (man gcc)
如果你是高版本的gcc(可能是由于更新内核造成的),可能简单的使用-m32 的时候会提示以下错误(使用别人的历程,自己未曾遇到):
> In file included from /usr/include/stdio.h:28:0,
> from test.c:1:
> /usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
> compilation terminated.
这应该是缺少构建32 位可执行程序缺少的包,使用以下指令安装:
sudo apt-get install libc6-dev-i386
此时应该就没有什么问题了。
⑶ Hi3518eHiPtools工具的研究使用总结
姓名:张猛
【嵌牛导读】:在海思+ov9712相机调试完成之后,便更改了比亚迪的相机BYD2013进行调试,在调试这个相机简单的更改了相机配置寄存器之后图像很容易的出来了,但是图像有很大的噪点,失真,这个问题一直在研究搞不定(感觉自己在硬件软件配置是对的),便想到用海思的Hi_ISP实现图像的在线调试,看能不能达到一些意外的收货,但是在用海思ISp工具时便遇到了问题,搞了两天终于才把这个问题解决,在这里记录一下。
【嵌牛鼻子】:ISP HiPQtools stream
【嵌牛提问】:对于海思在线调试工具,如何进行加载,加载的流程是什么,以及要要注意这里面的坑。
【嵌牛正文】:
1.首先加载设备驱动及进行系统配置
在ko目录下,执行./load3518e -i 系统便会进行加载
2.sensor库文件的生成(.ko)
sensor的戚轮库文件需要在linux服务器中的sdk包中编译得到,将生成的.so文件放到Sdk的stream软件包的libs/目录下。
这样就在上一层目录的lib/目录下生成了.so文件
3.修改stream软件包的.ini文件
sc3035_3m_4lan.ini文件在Hi3516A_Stream_xxx/configs目录下,改文件主要指定.so文件的位置、输入视频的接口(LVDS/MIPI/DVP)、视频格式(分辨率、同步方式、目标帧率等)等系统配置。
[sensor]
Sensor_type =sc3035 ;sensor name
Mode =0 ;WDR_MODE_NONE = 0
;WDR_MODE_BUILT_IN = 1
;WDR_MODE_2To1_LINE = 2
;WDR_MODE_2To1_FRAME = 3
;WDR_MODE_2To1_FRAME_FULL_RATE =4 ...etc
DllFile =libs/libsns_sc3035_4lan.so ;sensor lib path
[mode]
input_mode =0 ;INPUT_MODE_MIPI = 0
;INPUT_MODE_SUBLVDS = 1
;INPUT_MODE_LVDS = 2 ...etc
dev_attr = 0 ;mipi_dev_attr_t = 0
;lvds_dev_attr_t = 1
;NULL =2
[mipi]
;----------onlyformipi_dev---------
data_type = 1 ;raw 誉吵datatype: 8/10/12/14bit
;RAW_DATA_8BIT = 0
;RAW_DATA_10BIT = 1
;RAW_DATA_12BIT = 2
;RAW_DATA_14BIT = 3
lane_id = 0| 1 | 2 | 3 |-1|-1|-1|-1| ;lane_id: -1 - disable
[isp_image]
Isp_x 高虚信 =0
Isp_y =0
Isp_W =2304
Isp_H =1536
Isp_FrameRate=30
Isp_Bayer =3 ;BAYER_RGGB=0, BAYER_GRBG=1, BAYER_GBRG=2, BAYER_BGGR=3
4. 运行stream软件
运行stream软件包中的HiIspTool.sh脚本,通过以太网卡与上位机的PQTools建立通信
./HiIspTools.sh -a -p ov9712_720p_line.ini
遇到的问题就出在这一块,报错是
研究其脚本文件HiIsptool.sh ,发现ISP的安装是分为板端工具和PC端安装,而板端安装是根据这个脚本进行配置的,具体分两个部分:
(1)killall ittb_control; #杀死ittb_control进程
DLL_PATH=${LD_LIBRARY_PATH}:${PWD}/libs; #指定库路径
export LD_LIBRARY_PATH=${DLL_PATH}#export 库
LD_LIBRARY_PATH即Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接
库)时除了默认路径之外的其他路径(该路径在默认路径之前查找)。
工具里使用了自己编译好的动态库,而这些动态库放在发布包的libs文件夹下。当执行函数动态
链接时,如果此文件不再缺省目录下’/lib’ and ‘/usr/lib’,那么就需要指定环境变量
LD_LIBRARY_PATH
(2)运行可执行程序
./ittb_control&
总结:
ittb_control进程是基于TCP的服务端,负责控制信号的传输,也就是负责将海思板子和PC端的工具连接起来
ittb_stream进程也是基于TCP的服务端,负责播放H.265或YUV视频流。,也就是负责将板端的数据进行传输处理
小插曲:
理论上上直接运行上面的Hi脚本就可以了,但是我在具体的操作过程中是报错的,ps一下发现并没有ittb_controls和ittb_stream两个进程,单独运行./ittb_controls报错没有权限,运行chmod777ittb_controls获得权限,此时运行却发生缺少so文件,但是libs目录下是有这个文件的,仔细查看脚本文件,
这里面设计到了Makefile的一些知识,这里面的路径并不是指软件目录下的lib目录,而是指的海思板系统根目录下的lib目录,复制报错的.so到系统根目录下报错就换了一个.so报错,这验证了我的想法
执行命令cp*/usr/lib/将软件路径lib下的所有.so复制到系统根目录下的.lib/目录下,此时,发现没有报错。ps查看linux进程中也有了control和stream两个进程
这个时候打开window系统的pqtools,选择sdk版本,填写海思板子的IP,port默认就可以连接上板子了
⑷ 海思平台配置toolchain.cmake
交叉编译,在我们的host宿主机器稿知郑上需要生成target目标机器的程序, 使用CMake的Toolchain管理这里的各种环境变量和配置,就很好.
CMake给交叉编译预留了一个变量-- CMAKE_TOOLCHAIN_FILE , 它定义了一个文件的路径, 这个文件就是 toolchain ,我们可以在里面配置 C_COMPILER , CXX_COMPILER ,如果用Qt的话需要更改 QT_QMAKE_EXECUTABLE 以及如果用 BOOST 的话需要更改的 BOOST_ROOT (具体查看相关 Findxxx.cmake 里面指定的路径), 因此,这个 toolchain 内嵌了一系列需要改变并且需要set的交叉环境的设置.
下面归纳一些比较重要的:
下面是一个常规的配置
这样就完成了相关toolChain的编写,之后,你可以灵活的选择到底采用宿主机版本还是开发机版本,之间的区别仅仅是一条 -DCMAKE_TOOLCHAIN_FILE=./cross.toolChain.cmake ,更爽的是,如果你有很多程序需要做转移,但目标平台是同一个,你仅仅需要写一份toolChain放在一个地方,就可以给所有工程使用。
稍微大一点的项目都会用到一些外部依赖库或者tool,CMake提供了 FIND_PROGRAM() , FIND_LIBRARY() , FIND_FILE() , FIND_PATH() and FIND_PACKAGE() 等命令来进行外部依赖的搜索查找。
但是有个问题,假如我们在给一个ARM处理器的移动设备做交叉编译,其中需要寻找 libjpeg.so ,假如 FIND_PACKAGE(JPEG) 返回的是 /usr/lib/libjpeg.so ,那么这就会有问题,因为找到的这个 so 库只是给你的宿主机系统(例如一个x86的Ubuntu主机)服务的,不能用于Arm系统。所以你需要告诉CMake去其它地方去查找,这个时候你就需要配置以下的变量了:
在工程中一般通过如下步骤, 进入工程文件, 创建 arm-himix200-linux.cmake 文件, 内容是:
然后创建build文件夹, 进行编译(注意, 需要指定 CMAKE_MAKE_PROGRAM , 不指定的话好像编译有问题...):
在我的 toolchain 文件中,我指定:
因为我项猛戚目中 CMakeLists.txt 中需要查找 OpenSSL 和 curl , 因此会用到CMake自带的 FindOpenSSL.cmake 和 FindCurl.cmake 两个脚本, 他们会用到 Findxxx 命令, 会去我指定的目录去搜键颂索对应的库
https://www.cnblogs.com/rickyk/p/3875334.html
http://www.cmake.org/Wiki/CMake_Cross_Compiling
⑸ 华为海思hi3531sdk可以在linux下编译吗
不是,三星苹果高通联发科都不是,首先是akg框架授权,然后是三星台积电的制作,只能说设计上和一些关键芯片是自主研发的
⑹ linux 编译安桌系统 海思
一般是编译之前的配置出问题了,好好看看readme,根据你自己的环境重新configure一下。
⑺ 4月27日华为正式推送鸿蒙系统升级。鸿蒙OS系统你真的了解吗
4月27日晚,华为向部分机型推送了鸿蒙0S系统小规模公测升级,据可靠消息称,华为将在6月推送大规模正式公测升级 。
很多人收到了华为Harmony OS的推送,根据各个机型的不同,更新包大小也不相同,有的是2.87 GB,有的则是6.20GB。
HarmonyOS 鸿蒙系统(鸿蒙 OS)是一款“面向未来”、面向全场景(移动办公、运动 健康 、社交通信、媒体 娱乐 等)的分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持多种终端设备。
2020年9月10日 ,华为鸿蒙系统升级至华为鸿蒙系统2.0版本,即HarmonyOS 2.0,并面向128KB-128MB终端设备开源。
2020年12月16日 ,华为正式发布了HarmonyOS 2.0手机开发者Beta版本。
2021年2月22日 ,华为正式宣布HarmonyOS将于4月上线,华为Mate X2将首批升级。
2021年4月7日 ,华为消费者业务软件部总裁、鸿蒙操作系统负责人王成录表示,今年搭载鸿蒙操作系统的物联网设备(手机、Pad、手表、智慧屏、音箱等智慧物联产品)有望达到3亿台,其中手机将超过2亿台,将力争让鸿蒙生态的市场份额达到16%。
市场主流手机操作系统IOS和安卓都属于美国公司研发。美国为了抑制国有品牌在国外的大力发展,各种卡脖子操作。
全世界都很讨厌美国电信和IT巨头的垄断,鸿蒙的问世是打破美国垄断的一个现实方案,它对全球技术平衡具有积极意义。尽管苹果和安卓系统已经占领全球市场,但欢迎竞争是市场的天性,只要鸿蒙技术确实领先,中国市场为它孵化、积累出有竞争力的生态系统,它逐渐走向全球市场就不会比之前的中国电信设备走向世界不可思议。
但是华为研发鸿蒙操作系统,不仅仅是为了脱离美国的限制和替换安卓那么简单。
通过打造鸿蒙操作系统,华为要进一步巩固和扩大其智能手机的市场份额,要建立围绕智能手机的一个封闭的 生态系统 ,各个设备可以做到极简、顺滑的互联互通体验,这样,能够和华为手机相连接的产品就会很好卖。于是,消费者除了会买华为手机,还会买华为路由器、手表、手环、音箱,或者里边运行着海思芯片的其他周边产品。这是华为的商业目标。为了达到这个商业目标,华为需要一个新的操作系统,一个超越安卓的操作系统,于是鸿蒙出世。
在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配多种终端形态的分布式理念,能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备。
HarmonyOS整体遵从分层设计,从下向上依次为:内核层、系统服务层、框架层和应用层。系统功能按照“系统 > 子系统 > 功能/模块”逐级展开,在多设备部署场景下,支持根据实际需求裁剪某些非必要的子系统或功能/模块。
在搭载HarmonyOS的分布式终端上,可以保证“ 正确的人,通过正确的设备,正确地使用数据 ”。
通过“分布式多端协同身份认证”来保证“正确的人”。
通过“在分布式终端上构筑可信运行环境”来保证“正确的设备”。
通过“分布式数据在跨终端流动的过程中,对数据进行分类分级管理”来保证“正确地使用数据”。
1、硬件互助,资源共享
分布式软总线: 分布式软总线是多种终端设备的统一基座,为设备之间的互联互通提供了统一的分布式通信能力,能够快速发现并连接设备,高效地分发任务和传输数据。
分布式设备虚拟化: 分布式设备虚拟化平台可以实现不同设备的资源融合、设备管理、数据处理,多种设备共同形成一个超级虚拟终端。
分布式数据管理: 分布式数据管理基于分布式软总线的能力,实现应用程序数据和用户数据的分布式管理。
分布式任务调度: 分布式任务调度基于分布式软总线、分布式数据管理、分布式Profile等技术特性,构建统一的分布式服务管理(发现、同步、注册、调用)机制,支持对跨设备的应用进行远程启动、远程调用、远程连接以及迁移等操作,能够根据不同设备的能力、位置、业务运行状态、资源使用情况,以及用户的习惯和意图,选择合适的设备运行分布式任务。
2、 一次开发,多端部署
HarmonyOS提供了用户程序框架、Ability框架以及UI框架,支持应用开发过程中多终端的业务逻辑和界面逻辑进行复用,能够实现应用的一次开发、多端部署,提升了跨设备应用的开发效率。
3、统一OS,弹性部署
HarmonyOS通过组件化和小型化等设计方法,支持多种终端设备按需弹性部署,能够适配不同类别的硬件资源和功能需求。支撑通过编译链关系去自动生成组件化的依赖关系,形成组件树依赖图,支撑产品系统的便捷开发,降低硬件设备的开发门槛。
支持分布式多端开发、分布式多端调测、多端模拟仿真和全方位的质量与安全保障。
-DevEco Studio
面向华为终端全场景多设备的一站式分布式应用开发平台,支持分布式多端开发、分布式多端调测、多端模拟仿真和全方位的质量与安全保障。
- DevEco Device Tool
HarmonyOS 智能设备一站式集成开发环境,支持 HarmonyOS 组件按需定制、一键编译和烧录、可视化调试、分布式能力集成等,帮助开发者高效开发和创新新硬件。
-鸿蒙系统设计工具
该设计工具承载了 HarmonyOS 设计规范,帮助三方开发团队提升设计协作效率 ,提供设计云规范和原子化布局两大服务。
OpenHarmony是开放原子开源基金会(OpenAtom Foundation)旗下开源项目,定位是一款面向全场景的开源分布式操作系统。
OpenHarmony在传统的单设备系统能力的基础上,创造性地提出了基于同一套系统能力、适配多种终端形态的理念,支持多种终端设备上运行,第一个版本支持128K~128M设备上运行。
OpenHarmony采用了组件化的设计方案,可以根据设备的资源能力和业务特征进行灵活裁剪,满足不同形态的终端设备对于操作系统的要求。可运行在百K级别的资源受限设备和穿戴类设备,也可运行在百M级别的智能家用摄像头/行车记录仪等相对资源丰富的设备。
鸿蒙 OpenHarmony 1.1.0 LTS 版本相比于1.0版本,1.1.0 LTS版本新增 AI 子系统、电源管理子系统、泛 Sensor 子系统、升级子系统,及统一 AI 引擎框架。
(以上信息来源于华为官网、鸿蒙学堂、换换回收整理)
相信看完以上资讯,你应该对华为的鸿蒙OS系统有了更深入的了解!下次有跟小伙伴聊到鸿蒙OS系统的时候,相信不再会是一问三不知了!
今天的分享就到此结束啦~
我是换换回收的换换君,关注我,
每天为你带来最新的数码行业资讯!
⑻ 基于海思3559A方案+Atlas 200 AI模块_边缘计算平台开发及接口定义
海思Hi3559A+Atlas200(升腾310)。
可以在端侧实现大路数人脸识别、车牌识别、图像分类、视频结构化处理,可首简广泛应用于智慧公安、智慧交通、智慧金融、智慧电力、智慧社区、智能机器人、智能无人机等多种应用场景。
硬件配置
——————————————————————————————————
- 海思Hi3559AV100 CPU,双核ARM Cortex [email protected]+双核ARM Cortex [email protected]+单核ARM Cortex [email protected]
- 双核ARM Mali G71@900MHz,支持OpenCL 1.1/1.2/2.0,支持OpenGL ES 3.0/3.1/3.2
- DDR (4GB/8GB可选) ,eMMC(8GB/16GB/32GB/64GB/128GB可选腔慧)
- 双核NNIE@840MHz 神经网络加速引擎
- 四核 DSP@700MHz,32K I-Cache /32K IRAM/512KB DRAM
NNIE
——————————————————————————————————
- 支持 Alexnet、VGG16、Googlenet、Resnet18、Resnet50等多种分类神经网络
- 支持 Faster R-CNN、YOLO、SSD、RFCN 、YoloV2 等多种目标检测神经网络
- 支持SegNet、FCN 等场景分割网络
- 4.0Tops 神经网络运算性能
- 支持完整的 API 和工具链(编译器、仿真器),易于适配客户定制网络
特性描述
——————————————————————————————————
Hi3559AV100支持8K@30fps/4K120fps视频者圆裤录制下,提供硬化的6-Dof 数字防抖。集成了双核A73和双核A53,独创性的大小核架构和双操作系统,使得功耗和启动时间达到均衡。
Hi3559AV100集成了海思独有的SVP平台,提供了高效且丰富的计算资源,支撑客户开发各种计算机视觉应用,如无人机、机器人等行业类应用,为边缘计算提供优秀的硬件平台。
Hi3559AV100方案的边缘计算主板开发,目前主要应用分布在,视频监控、黑白名单识别、陌生人识别、零售分析、无感考勤等方向;
边缘计算主板开发
——————————————————————————————————
- 同时支持8-16路视频的实时人脸检测跟踪
- 支持至多30W人脸底库
- 提供多种抓拍参数(包括人脸遮挡,人脸清晰度,人脸角度)供用户设置
- 支持自定义人脸库和抓拍比对记录搜索
- 开放盒子后端HTTP接口协议供用户管理视频分析盒子
- 支持实时上传(FTP,HTTP)抓拍人脸图和场景图
- 支持ONVIF和RTSP协议
- 视频流接入
⑼ 我在编译海思给的例程时,出现这个错误,怎么解决
从你的描述上来看,你应该是直接拷贝了别人的工程或者是例程来编译的吧看直接这样编译的话会出这个问题的,你可以这么做,先把对应编译目录下的.obj文件和其他的调试文件全部删除,但是一定保留源文件和工程文件,这样再重新编译就可以了,这个原因是因为编译的时候需要制定对应的目录的,你从别人那里直接拷过来的话,目录不一致,因此出现找不到文件的问题,只要删除那些非源代码文件就能解决了
⑽ 三、内核&文件系统编译
一、编译官方提供的内核源码
1、解压官方提供的内核源码包
2、根据官方提供的配置文件对内核进行配置,方式如下
make ARCH=arm xxxxx_defult_config
cp arch/arm/xxxxx_config .config
3、打开图形界面对内核进行配置,根据需要增加或者删除模块和其他内容
4、对内核进行编译
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- uImage -j6
或者编辑Makefile文件,对其中的ARCH变量和CROSS_COMPILE变量进行修改,然后执行make uImage
5、在编译编译的时候回出现mkimage命令缺失,这个命令是UBootr提供的,在编译的UBoot路径下面找到这个命令,即可直接使用
6、编译的时候各个方面需要一致性,
1、编译的内核的交叉编译工具链如果支持硬件浮点数运算那么在配置内核的时候也需要添加硬件浮点数的支持
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
2、在编译的内核的时候注意保持不要做太多的修改,否则会出问题
7、编译内核模块
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- moles -j6
8、安装内核模块到指定的目录中去
make moles_install ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- INSTALL_MOD_PATH=/home/fu/hisi/kernel/build
9、不要采用内核模块安装的命令来安装内核,因为内核不需要安装,在arch/arm/boot/uImage就是所需要的内核文件
二、编译官方提供的busybox来构建根文件系统
1、解压需要编译的busybox源码
2、进入源码中对busybox进行配置,主要是配置交叉编译工具链
Busybox Settings --->Build Options ---> 下面有关于busybox是否配置为采用共享库的模式,还有添加交叉编译工具链的前缀
3、配置需要的文件和命令进行添加或者删除
4、然后执行命令make -jn && make install
5、创建根文件系统需要的其他的文件和目录,在一个空白的目录中首先拷贝busybox/_install下面的bin、sbin、usr目录到空白目录中,在空白目录中创建其余的所需要的目录文件 bin dev etc home lib linuxrc mnt opt proc sbin sys tmp usr var等以上目录
6、接下来在lib目录中复制内核模块,在编译内核的时候模块安装在了指定的地方,直接拷贝过来就行。
6、创建文件系统所需要的其他文件,配置文件(最简单的办法就是直接复制busybox文件下面的example文件夹里面的东西)
1、/etc/inittab 填写或者 一下是最基本的,还有其他的需要填写
# /etc/inittab
::sysinit:/etc/init.d/rcS //指定初始化脚本
::askfirst:-/bin/sh //指定第一次输入回车后打开的shell
::ctrlaltdel:/sbin/reboot //指定这三个按键按下后的反应
::shutdown:/bin/umount -a -r //指定关机是进行的操作
2、/etc/init.d/rcS //这个就没有详细额硬性规定了,写入需要初始化的东西即可
#!/bin/sh
mount -a
3、/etc/fstab //写入mount -a是要自动挂载的文件系统
# device mount-point type options mp fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
7、拷贝需要用到的库文件,在交叉编译工具链下面存放
arm-linux-xxxxxx-gcc/lib
海思的开发板是在和tahet/lib下面,切记。