EasyDarwin的交叉编译

article/2025/9/24 16:46:49

easyDarwin的交叉编译

  • 前言
  • 一、EasyDarwin简介
  • 二、配置环境介绍
  • 三、交叉编译过程
    • 1.go环境的搭建
    • 2.编译
  • 后记


前言

最近项目有个需求是在嵌入式设备中运行一个RTSP服务器,满足推流到该服务器后,其他终端设备能够从这个RTSP服务器中拉RTSP流出来。找来找去找到了easyDarwin这个开源项目,主要记录一下交叉编译的过程吧。


一、EasyDarwin简介

“高性能开源RTSP流媒体服务器,基于go语言研发,维护和优化:RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、WEB后台管理、分布式负载均衡,基…”
看到基于go语言研发这一段几乎让我差点放弃交叉编译,还好百度了一下发现好像也有用go语言做嵌入式的大佬,所以似乎有搞头。

二、配置环境介绍

1.编译环境:Linux version 3.13.0-24-generic (buildd@panlong) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014
2.交叉编译工具:arm-histbv320-linux

三、交叉编译过程

1.go环境的搭建

go环境的搭建主要参照这里:嵌入式linux之go语言开发(一)环境搭建
简述一下过程,就是用gcc先编译go1.4编译器的源码,然后用编好的go1.4编译器去编译用go写的go1.11的ARM编译器(这里似乎有点绕),然后用ARM版的go编译器去编译easydarwin。具体过程不再展开,博主介绍的挺详细的,按照步骤操作就行。

2.编译

  • EasyDarwin的下载:https://github.com/EasyDarwin/EasyDarwin
    下载的时候注意下载master就行了

  • 正常编译:
    编译的话建议先按照下载页面的二次开发部分编译一遍,注意需要编译环境能上外网,并且使用root权限编译

    # go tools
    go get -u -v github.com/kardianos/govendor
    go get -u -v github.com/penggy/gobuild# npm tools
    npm i -g apidoc
    npm i -g rimraf#这步其实是在下载代码,已经下载过的话直接跳过即可
    cd $GOPATH/src/github.com
    mkdir EasyDarwin && cd EasyDarwin
    git clone https://github.com/EasyDarwin/EasyDarwin.git --depth=1 EasyDarwin
    cd EasyDarwin#编译linux版本
    npm run build:lin
    

    编译完成之后,就会在EasyDarwin目录下生成一个可执行文件easydarwin,直接运行即可,运行结果如下图所示:
    在这里插入图片描述

  • 交叉编译
    正常编译运行之后,我们大致了解了正常运行起来之后的样子,接下来就开始交叉编译。
    首先确保编译ARM版本时配置的环境变量依然存在,我的环境变量配置如下:

    #go1.4 build env 使用go1.4编译go1.11时需要配置的环境变量
    export GOROOT_BOOTSTRAP=/home/weiwei/opennSources/go
    #go1.11 build env 使用go1.11编译easydarwin需要配置的环境变量,CC_FOR_TARGET和CXX_FOR_TARGET一定要设置为交叉编译工具所在的路径
    export CC_FOR_TARGET=/home/weiwei/hisi/HiSTBLinuxV100R005C00SPC070/tools/linux/toolchains/arm-histbv320-linux/bin/arm-histbv320-linux-gcc
    export CXX_FOR_TARGET=/home/weiwei/hisi/HiSTBLinuxV100R005C00SPC070/tools/linux/toolchains/arm-histbv320-linux/bin/arm-histbv320-linux-g++export GOROOT=/home/weiwei/opennSources/go1.11/go
    export GOBIN=$GOROOT/bin
    export GOPATH=/home/weiwei/opennSources/gopath
    export PATH=$PATH:$GOBIN:GOPATH/bin
    

    上述环境变量配置完毕之后,就可以编译easydarwin了,首先进入easydarwin的目录,找到package.json文件,其中有这一段:

"scripts": {"build:ico": "rsrc -arch amd64 -ico ed.ico -o EasyDarwin_windows.syso","build:www": "cd web_src && npm run build && cd .. && apidoc -i routers -o www/apidoc","build:doc": "apidoc -i routers -o www/apidoc","build:win": "go build -tags release -ldflags \"-s -w\" -o EasyDarwin.exe","build:lin": "go build -tags release -ldflags \"-X 'main.buildDateTime=$(date '+%Y-%m-%d %H:%M:%S')' -X 'main.gitCommitCode=$(git rev-list --full-history --all --abbrev-commit --max-count 1)' -s -w\" -o easydarwin","build:dev": "go build -o EasyDarwin.exe","dev": "go build -o EasyDarwin.exe","dev:lin": "go build -o easydarwin","dev:www": "cd web_src && npm run start","clean": "rimraf EasyDarwin.exe EasyDarwin.exe~ easydarwin"},

我理解这段其实就是编译要执行的脚本,修改其中和linux有关的编译项——修改其中的go build为GOOS=linux GOARCH=arm GOARM=7 go build即可,这样就是用ARM版的go编译器去编译,修改后的脚本如下:

"scripts": {"build:ico": "rsrc -arch amd64 -ico ed.ico -o EasyDarwin_windows.syso","build:www": "cd web_src && npm run build && cd .. && apidoc -i routers -o www/apidoc","build:doc": "apidoc -i routers -o www/apidoc","build:win": "go build -tags release -ldflags \"-s -w\" -o EasyDarwin.exe","build:lin": "GOOS=linux GOARCH=arm GOARM=7 go build -tags release -ldflags \"-X 'main.buildDateTime=$(date '+%Y-%m-%d %H:%M:%S')' -X 'main.gitCommitCode=$(git rev-list --full-history --all --abbrev-commit --max-count 1)' -s -w\" -o easydarwin","build:dev": "go build -o EasyDarwin.exe","dev": "go build -o EasyDarwin.exe","dev:lin": "GOOS=linux GOARCH=arm GOARM=7 go build -o easydarwin","dev:www": "cd web_src && npm run start","clean": "rimraf EasyDarwin.exe EasyDarwin.exe~ easydarwin"},

修改完成后,继续交叉编译:

npm run build:lin  

接下来交叉编译的过程中,会报一个溢出错误,百度发现有人遇到过这个问题,解决方案如下:

# 修改routers/record.go 106行
把math.MaxUint32改为math.MaxInt32

修改完毕后再次编译即可。

编译完成之后,把生成的可执行文件放到板子上,直接运行即可;easydarwin有个后台管理的网页服务,如果也想访问嵌入式设备上的这个服务的话把EasyDarwin目录下的www文件夹放到和板子的可执行文件同一个目录上即可。

验证推流拉流的方法在下载页面有介绍,这里就不重复了。

如果编译后发现生成的可执行程序依然在编译环境下能够执行,而非在ARM下执行,需要检查环境变量是否正常配置。

后记

本来没打算写这个总结的,后来想想自己整天在别人的帮助下解决问题,提供一下自己的解决问题的方式回馈大家,才是应该做的事情。

就酱。

哦对了,第一篇技术博客,第一次用markdown写东西,希望以后能熟练一点


http://chatgpt.dhexx.cn/article/KJohlXDy.shtml

相关文章

EasyDarwin 流服务器搭建及相关软件教程

一、产品 运行 exe 文件 启动 服务器 双击 运行 EasyDarwin.exe 会出现如下界面: 在 浏览器打开 http://192.168.10.80:10008 2.解压ffmpeg 添加环境变量:复制C:\SoftWare\ffmpeg-6.0-essentials_build\bin路径,添加环境变量中 的用户变…

EasyDarwin —— ubuntu搭建rtsp服务,使用FFmpeg进行rtsp推拉流

开源流媒体服务器 EasyDarwin是由国内开源流媒体团队开发和维护的一款开源流媒体平台框架,从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目,更好地帮助广大流媒体开发者和创业型企…

EasyDarwin测试

EasyDarwin是由国内开源流媒体团队维护的一款开源流媒体平台框架,开发语言是go语言。本文主要使用它作为RTSP服务器使用,并以此进行测试。方便之后记录。 (1)软件获取(自行下载,具体代码编译方式&#xff0…

流媒体开发之EasyDarwin搭建rtsp server

0 背景 EasyDarwin 旭帆科技开源的流媒体服务器软件,EasyDarwin 社区专注于传统安防(RTSP/RTP/Onvif)流媒体技术,能够帮助开发者快速搭建流媒体服务平台,更快、更简单地实现流媒体直播与点播功能。本文主要介绍 rtsp …

EasyDarwin ffmpeg+EasyDarwin开源流媒体服务器平台试用笔记(视频流rtsp)

服务 Github https://github.com/EasyDarwin/EasyDarwin , server will invoking ffmpeg. 1. download server 下载EasyDarwin-windows-8.1.0-1901141151 双击EasyDarwin.exe 访问http://127.0.0.1:10008/#/ 2. download FFmpeg 下载FFmpeg : https://github.com/BtbN…

从零开始搭建EasyDarwin环境——linux系统共享目录实现

EasyDarwin是一款高性能开源RTSP流媒体服务器,基于Go语言研发,维护和优化:RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、Web后台管理、分布式负载均衡。EasyDarwin从最初的c到后面的nodejs再到现在…

使用EasyDarwin搭建Rtsp Server从大华摄像头拉流进行多路分发

使用EasyDarwin搭建Rtsp Server从大华摄像头拉流进行多路分发 问题服务搭建推流命令大华摄像头配置 问题 大华摄像头(型号: DH-IPC-HDW1235C-A 2.8MM 200万高清网络摄像机 )目前支持20路连接,实际使用测试过程中,只能…

EasyDarwin —— windows搭建rtsp服务,使用FFmpeg进行rtsp推拉流

开源流媒体服务器 EasyDarwin是由国内开源流媒体团队开发和维护的一款开源流媒体平台框架,从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目,更好地帮助广大流媒体开发者和创业型企业快速构建流媒体服务平台,更快、更简单地…

简单的流媒体服务器(EasyDarwin的安装搭建)

再项目中需要用到简单的视频播放,想着干脆搭建一个流媒体服务器,后期做视频点播 直播包括视频服务器的负载,所以索性开始自己探索搭建视频流媒体服务器,用于存储和传输视频资源 相关概念 流媒体 流媒体(Streaming Me…

【ZYNQ】ZYNQ7000 私有定时器及其驱动应用示例

定时器简介 在 ZYNQ 嵌入式系统中,定时器的资源是非常丰富的,每个 Cortex-A9 处理器都有各自独立的 32 位私有定时器和 32 位看门狗定时器,这两个 CPU 同时共享一个 64 位的全局定时器(GT)。 系统框图 私有定时器 特…

ZYNQ开发系列——使用AXI4LITE接口进行PS和PL交互

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列——使用AXI4LITE接口进行PS和PL交互 前言PS端AXI接口AXI4LITE slave模块的设计后记前言 前面我们讲到使用AXI4LITE来作为总线接口来实现PS和PL的交互。同时我们为了支持《从零开始研发GPS接收…

Xilinx ZYNQ简介

ZYNQ 是赛灵思公司(Xilinx)推出的新一代全可编程片上系统(APSoC),它将处理器的软件可编程性与 FPGA 的硬件可编程性进行完美整合,以提供无与伦比的系统性能、灵活性与可扩展性。与传统 SoC解决方案不同的是…

ZYNQ ARM核之SCU

Snoop Control Unit,窥探控制单元,详情见UG585。SCU主要是解决ARM的L1和L2的缓存协调(因为两个processor的缓存是共用的)和AXI总线的ACP存取的,也就是DMA等高速中断需求的外设。 SCU 块将两个 Cortex-A9 处理器连接到内存子系统,并包含智能管…

ZYNQ开发系列——PS开发之HelloWorld

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列——PS开发之HelloWorld 前言外设接口SDK建立工程相关操作记录前言 俗话说一日不见,如隔三秋。两年没搞PS的开发,居然连HelloWorld怎么出来都不记得了,可见知识记录的重要性,知识真的是有保…

ZYNQ开发系列——PS响应PL中断请求

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ZYNQ开发系列——PS响应PL中断请求 前言中断的设置PS部分代码前言 PS和PL的交互中,还有一个中断没有讲到,在《从零开始研发GPS接收机连载》中,将会有两个中断,一个中断是505us中断,一个中断是10ms中断…

ZYNQ PS简介

ZYNQ 实际上是一个以处理器为核心的系统,PL 只是它的一个外设。Zynq-7000 系列的亮点在于它包含了完整的 ARM 处理器系统,且处理器系统中集成了内存控制器和大量的外设,使 Cortex-A9 处理器可以完全独立于可编程逻辑单元。而且实际上在 ZYNQ …

Zynq-7000 AMP运行模式下的软件切换及多版本固化运行

Zynq平台AMP运行模式下的软件切换及多版本固化运行 1. Zynq双裸核AMP运行环境构建 1 1.1 Zynq架构概要 1 1.2 Zynq启动与配置 2 1.2.1 启动流程概述 3 1.2.2 PS硬件启动阶段 3 1.2.3 PS软件启动阶段 4 1.2.4 启动文件构成 4 1.2.5 启动模式 4 1.2.6 BootROM的执行 5 1.2.7 FSB…

ZYNQ-定时器中断使用

学习内容 本文首先介绍了ZYNQ的定时器的相关内容,并学习使用ZYNQ芯片中的定时器进行操作测试。 开发环境 vivado 18.3&SDK,PYNQ-Z2开发板。 定时器简介 介绍 ZYNQ有两个Cortex-A9处理器,每个Cortex-A9处理器都有自己的专用32位计时…

zynq-1

https://www.youtube.com/watch?vVs0h0kue7p4&listPL4D6H9w4Ihdp0YRExoQXfbVMRL1GgEPCm

zynq7000 中断原理分析及IO中断解析

Zynq 7000 中断分析 文章目录 Zynq 7000 中断分析GIC及中断机理Crotex-A9常用汇编指令Zynq中断控制 GPIO中断控制单IP双通道单IP多位双IP中断源 GIC及中断机理 Crotex-A9常用汇编指令 类型指令描述备注内部数据传输指令MOV R0 R1R1 2 R0#0xFF:立即数:MOV R0, #0xF…