OpenHD改造实现廉价高清数字图传-OrangePi i96移植篇

2023-05-16

        前面说到,天空端的树莓派zero也涨价的厉害,以及500多块了,实在是贵的离谱啊,所以还是要找国产化替代。先从最便宜的OrangePi i96开始吧,毕竟只有39元的价格,还能跑ubuntu,实在是厉害了。

目录

一、搭建OrangePi i96内核和驱动的编译环境

1、源代码下载

2、内核镜像和驱动编译

3、更新到sd卡中

二、RTL8812AU网卡驱动修改和编译

1. 下载驱动源代码

2. 添加到内核和模块中编译

3.修改rtl8812的bug和内核头文件

4.编译内核和模块

5.其他存在的问题及解决措施

三、编译和运行svpcom版本的wifibroadcast

1. 首先下载wfb源代码

2. 安装一些依赖

3. 编译wifibroadcast

4.补充安装软件

5. 单独运行发送程序

6. 将密钥文件拷贝到接收端

7. 在地面端启动接收软件

8. 测试一下通联情况

四、使用gstreamer采集和显示视频

1、OrangePi i96 摄像头驱动安装

2、gstreamer采集视频和接收显示

 五、测试效果


一、搭建OrangePi i96内核和驱动的编译环境

编译环境是搭建在ubuntu pc上

1、源代码下载

git clone https://github.com/orangepi-xunlong/OrangePi_Build.git

注意:这个下的不是源代码,是构建编译环境的相关脚本

然后执行 ./Build_OrangePi.sh
提示输入root密码,按照提示选择i96开发板。
这个脚本会自动下载编译内核镜像所需要的全部源代码。
下载时间比较慢,最好用git代理,不然非常慢。

2、内核镜像和驱动编译

下载完成后,出现文件夹OrangePiRDA
有一个脚本build.sh,使用root权限执行,即可对内核镜像等进行编译。
第一次的编译过程会比较长,耐心等待。

3、更新到sd卡中

还是执行./build.sh脚本,根据界面提示操作
选择update XXXX,可以更新内核文件、驱动模块、uboot
将sd卡插入到系统中,并挂在到相应的目录
一共有两个分区:
小一点的是boot分区,内核更新的时候就写这个路径
大一点的是rootfs分区,就是系统的根目录,更新模块的时候填写这个路径

每次编译内核或驱动,都要执行一遍更新。

二、RTL8812AU网卡驱动修改和编译

搭建完内核和驱动的编译环境,就可以编译rtl8812au的驱动了

1. 下载驱动源代码

进入内核驱动目录kernel/drivers/net/wireless
在这里下载驱动代码
git clone -b v5.2.20 https://github.com/svpcom/rtl8812au.git
注意要选择正确的版本v5.2.20
会生成一个文件夹rtl8812au,里面就是我们的驱动代码
我们不妨将这个文件夹改名为rtl8812au-svpcom,便于区分

2. 添加到内核和模块中编译

2.1 修改Kconfig
在kernel/drivers/net/wireless/Kconfig
添加一行,将驱动的配置增加进去

source "drivers/net/wireless/rtl8812au-svpcom/Kconfig"

可以加在source "drivers/net/wireless/rdaw80211/Kconfig" 下一行

2.2 修改Makefile
在kernel/drivers/net/wireless/Makefile添加一行

obj-$(CONFIG_RTL8812AU)                += rtl8812au-svpcom/

可以放在obj-$(CONFIG_RTLWIFI)          += rtlwifi/  的下一行

这样就可以添加到编译环境中去了,到时会自动编译

3.修改rtl8812的bug和内核头文件

3.1 修改内核头文件
        编译的时候会遇到好几个问题,主要还是这个linux的内核还是太老了,有些头文件都不是新的,所以会有问题。
        主要是这两个文件,可以从最新的linux内核中找到这两个文件,替换掉当前内核的文件即可。

include/uapi/linux/nl80211.h
include/net/ieee80211_radiotap.h

3.2 修改rtl8812的bug
(1)第一个bug
位于rtl8812au-svpcom/os_dep/linux/wifi_regd.c b/os_dep/linux/wifi_regd.c 

@@ -334,11 +334,11 @@ static void _rtw_reg_apply_flags(struct wiphy *wiphy)
                                if (ch)
                                        ch->flags &= ~(IEEE80211_CHAN_DISABLED|IEEE80211_CHAN_NO_HT40PLUS|
                                                IEEE80211_CHAN_NO_HT40MINUS|IEEE80211_CHAN_NO_80MHZ|
-                                               IEEE80211_CHAN_NO_160MHZ);
+                                               IEEE80211_CHAN_NO_160MHZ |
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 14, 0))
                                                IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN);
 #else
-                                               IEEE80211_CHAN_NO_IR;
+                                               IEEE80211_CHAN_NO_IR);
 #endif
                                                //ch->flags = IEEE80211_CHAN_DISABLED;
                        }

在内核版本低于3.14.0的时候会出现bug,估计是肉眼可见的笔误,括号写的有问题。

(2)第二个bug
在Makefile里面也有一个bug
位于rtl8812au-svpcom/Makefile
这个TopDIR实际上没有什么用,但是这个值确实不太对,导致编译时候找不到
这里我直接修改成绝对路径,确保编译通过。
这路径应该替换成你自己的路径即可。

-include $(TopDIR)/hal/phydm/phydm.mk
+#include $(TopDIR)/hal/phydm/phydm.mk
+include /home/hooper/Orangepi/new/OrangePiRDA/kernel/drivers/net/wireless/rtl8812au-svpcom/hal/phydm/phydm.mk

3.3 修改rtl8812的编译的CPU平台配置
还是修改Makefile
找到CONFIG_PLATFORM_I386_PC,将后面的y改成n
找到CONFIG_PLATFORM_ARM_RPI,将后面的n改成y

CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ARM_RPI = y

4.编译内核和模块

        注意,由于修改了内核头文件,所以要连同内核一起编译才行,否则光编译模块,放到板子上跑会有问题的。

        执行编译脚本,根据提示编译内核和模块,然后更新到sd卡即可。

./buid.sh

5.其他存在的问题及解决措施

5.1 驱动添加进去但是没有被编译
如果发现内核模块添加进去,但没有被编译到,那就要把编译的脚本稍微修改一下。
在scripts/lib/compilation.sh,找到这一行

make -C $LINUX ARCH=${ARCH} CROSS_COMPILE=$TOOLS ${BOARD}_linux_defconfig

可以把它注释掉,当然你要确保先编译并生成过.config文件了
这样再编译的时候会提示你增加了新驱动,你可以选择将它编译成模块,输入m即可

5.2 bsdtar找不到
        这个安装包已经过时了,所以你可以选择自己手动安装,或者换名字

Package bsdtar is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  libarchive-tools:i386 libarchive-tools

在scripts/lib/general.sh中,找到

apt-get -y --no-install-recommends --fix-missing install \
                       bsdtar mtools u-boot-tools pv bc \

将bsdtar删除掉
自己手动安装替换的包

sudo apt install libarchive-tools

三、编译和运行svpcom版本的wifibroadcast

        编译wifibroadcast是在OrangePi i96上直接编译,下面所有的操作是在开发板上进行的。使用串口连接到开发板,通过串口命令行进行交互。

1. 首先下载wfb源代码

git clone -b release-22.09 https://github.com/svpcom/wifibroadcast.git

如果慢可以通过代理下载

2. 安装一些依赖

sudo apt install python3-all libpcap-dev libsodium-dev python3-pip python3-pyroute2 python3-future python3-twisted
sudo apt install virtualenv

3. 编译wifibroadcast

可以修改Makefile,不需要做测试。在第12行,将test删除即可

# all: all_bin gs.key test
all: all_bin gs.key

然后执行make

4.补充安装软件

This system doesn't provide enough entropy to quickly generate high-quality random numbers.
Installing the rng-utils/rng-tools, jitterentropy or haveged packages may help.
On virtualized Linux environments, also consider using virtio-rng.
The service will not start until enough entropy has been collected.

编译可能报错,按照要求安装一下相关软件

sudo apt install rng-tools haveged 

5. 单独运行发送程序

将scripts文件夹中的tx_standalone.sh拷贝到根目录下,执行以下脚本。

#wlan1替换成你的无线网卡的名称
sudo ./tx_standalone.sh wlan1

命令行输出以下内容,说明发送端已经正常启动了。

Setting wlan1 to channel 149
Listen on 5600 for wlan1

6. 将密钥文件拷贝到接收端

在编译的时候会自动生成密钥对
drone.key和gs.key
分别用于天空端(发送)和地面端(接收)
主要要在两边要保持这两个文件是一对,这样才能确保解码正确

7. 在地面端启动接收软件

在PC上编译过程类似,不再描述
主要是启动脚本不一样,拷贝scrpits文件夹中的rx_standalone.sh到所在目录,执行脚本

#wlan1替换成你的无线网卡的名称
sudo ./rx_standalone.sh wlan1

8. 测试一下通联情况

     wfb程序会通过UDP端口与应用程序进行交互

     在天空端(orangepi),我们可以通过nc指令向wfb程序发送数据,wfb收到后会直接将UDP数据通过wifibroadcast发出去;

     在地面端(PC),我们可以通过nc指令接收来自wfb的UDP数据包,这样可以测试一下链路是否正常。

     还可以使用tcpdump来进行调试

sudo tcpdump -i wlan1 -n -p

四、使用gstreamer采集和显示视频

1、OrangePi i96 摄像头驱动安装

       OrangePi i96自带了摄像头驱动,使用的摄像头是gc2035

        先用sudo orangepi-config,根据提示来安装摄像头驱动

        安装完成后,可以使用系统自带的程序测试一下

        位于home目录下,CameraTest文件夹,执行test.sh,会自动加载驱动,然后拍一张照片到本目录下。

2、gstreamer采集视频和接收显示

         gstreamer 安装

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools 

        

      在发送端,执行命令行

gst-launch-1.0 v4l2src ! video/x-raw, width=640, height=480, framerate=30/1  ! videoconvert ! x264enc tune=zerolatency speed-preset=ultrafast bitrate=4096 ! h264parse ! rtph264pay pt=96 mtu=1200 ! udpsink host=127.0.0.1 port=5600  sync=false 

        这个命令从摄像头采集数据,编码成H264,然后打包成RTP协议,通过UDP发送给wifibroadcast进行传输

        这里有几个要注意的:

        1、由于驱动的限制,图像大小只能是640X480,其他大小会出错

        2、x264enc,是软件编码,使用CPU进行,由于开发板性能不高,所以必须设置速度为ultrafast 延迟为zerolatency,bitrate看情况默认是2048kbit/s,这里我用的是4096

                

     在接收端,执行命令行

gst-launch-1.0 -v udpsrc port=5600 caps="application/x-rtp, media=video, encoding-name=H264, payload=96" ! rtph264depay ! decodebin ! videoconvert ! autovideosink sync=false

     这里从wifibroadcast接收到UDP包,使用5600端口,然后用H264解码显示

 五、测试效果

     整体测试看,效果一般,延迟大概在400ms左右,主要原因还是这个开发板的性能确实不太行,但是勉强也是能用的。

     整体功耗比较低,在发送的时候只有3w,电流0.5A左右,已经算比较低了。

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

OpenHD改造实现廉价高清数字图传-OrangePi i96移植篇 的相关文章

  • STM32F407VET6 普通 IO 口模拟串口发送数据

    1 只实现了 xff0c 使用普通 IO 口模拟串口的发送 xff0c 没有实现接收 2 由于是模拟发送的是 TTL 电平 xff0c 所以在使用串口助手验证发送数据的准确性时 xff0c 应该使用 USB 转 TTL xff0c 而不能使
  • 虹科知识分享|关于阻塞函数和非阻塞函数

    在CAN和LIN相关的开发库里 xff0c 不可避免的会出现 收 和 发 的函数 如何快速有效的处理数据 xff0c 是开发中重要的事项 但实际上单路CAN由于波特率的限制 xff0c 数据量并不会很大 xff1a 以常用的500k为例 x
  • 车用技术总线 | 从应用角度了解下LIN总线

    注意 xff1a 本文约4850字 xff0c 完整阅读时间约13分钟 主要内容 LIN总线概述 LIN总线的应用 示例 xff1a LIN总线和CAN总线的窗户控制 LIN总线的信号报文 记录LIN总线数据 LIN总线数据记录应用案例 本
  • 工业通讯 | CAN基础内容详解(二)——物理层

    往期回顾 工业通讯 CAN基础内容详解 xff08 一 xff09 物理层主要完成设备间的信号传送 xff0c 把各种信号转换成物理信号 xff0c 并将这些信号传输到其他目标设备 在这一层中 xff0c CAN bus对信号电平 通信时使
  • 04ROS中的头文件与源文件

    ROS中的头文件与源文件 本节主要介绍ROS的C 43 43 实现中 xff0c 如何使用头文件与源文件的方式封装代码 xff0c 具体内容如下 设置头文件 xff0c 可执行文件作为源文件 xff1b 分别设置头文件 xff0c 源文件与
  • TX2系统安装

    手头新拿到块TX2 xff0c 从零开始搞 xff0c 特此记录以备后续查看 xff0d 2017 07 16 乐 参考官方网址 JetPack下载网址 准备刷机环境 下载JetPack L4T 3 1 linux x64 run pc环境
  • 单片机是嵌入式的子类

    1系统组成结构上的区别 xff08 1 xff09 单片机基本结构 单片机由运算器 控制器 存储器 输入输出设备构成 xff08 2 xff09 嵌入式系统成部分 嵌入式系统一般由嵌入式微处理器 外围硬件设备 嵌入式操作系统 特定的应用程序
  • STM32串口协议概念及结构体初始化详解+串口点灯+串口收发程序

    文章目录 一 串口通信协议简介1 RS232标准2 USB转串口3 原生的串口到串口 二 初始化结构体解1 USART初始化结构体2 同步时钟初始化结构体3 编程时需要用到的固件库函数 三 串口点灯代码实现1 USART C文件2 USAR
  • 无人机光流定位系列——(一)原理剖析

    这次参加深圳的高交会 xff0c 在qualcomm展区看到了多款mini无人机 xff0c 大家稍微细心一点就可以发现这些无人机都使用了一种叫光流定位的技术 xff0c 很多人可能都还不明白光流定位是个什么东西 xff0c 是如何进行定位
  • 现代控制理论2——状态空间分析法

    注 xff1a 本文是在MOOC平台上学习西北工业大学 现代控制理论基础 xff08 郭建国 赵斌 郭宗易 xff09 的课程进行随笔记录与整理 一 状态空间描述的相关概念 1 系统模型包括 xff1a 内部结构 xff0c 以及内部结构反
  • 输出调节——内模原理(1)

    浏览了百度和部分文献 xff08 主要为 xff1a 调节问题系统综述 xff0c 线性系统的内模原理 xff09 xff0c 在此尝试进行一些归纳 一 问题描述 输出调节问题 xff1a output regulation problem
  • RGB-D相机建图——2、openvins安装、测试与连接自己设备

    基础内容贴推荐 xff1a https zhuanlan zhihu com p 93814423 https blog csdn net weixin 39752599 article details 105906652 https zh
  • RGB-D相机建图——3、使用kalibr进行相机标定

    Kalibr 视觉惯性校准工具箱 官方网站 xff1a https github com ethz asl kalibr Kalibr是一个工具箱 xff0c 可以解决以下校准问题 xff1a 多摄像机校准 xff1a 具有非全局共享重叠视
  • 02.构建项目流程梳理及总结

    02 构建项目流程梳理及总结
  • Nuttx学习入门

    Nuttx学习 NuttX 是一个实时操作系统 RTOS xff0c 强调标准合规性和占用空间小 可从 8 位扩展到 64 位微控制器环境 xff0c NuttX 中的主要管理标准是 POSIX 和 ANSI 标准 NuttX 的主要环境依
  • 软件测试之如何介绍自己的项目

    测试人员在找工作的过程中 xff0c 通常有一个问题是很难绕开的 就是要如何向别人介绍自己之前做过的项目 要解决这个问题 xff0c 大致可以分为如下几个步骤 xff1a 1 对项目进行基本介绍 2 说明自己负责测试的模块 3 针对部分模块
  • FreeRTOS多任务管理

    文章目录 1 任务1 1 任务简介1 2 任务调度1 3 任务的状态 就绪态 运行态 阻塞态 挂起态 1 4 空闲任务 2 动态创建两个任务2 1 定义动态内存空间的堆2 2 定义任务函数2 3 定义 任务控制块 指针2 4 动态创建任务
  • 计算机类期刊投稿心得 [ 添加中...现35种 ]

    1 杂志名称 计算机应用研究 杂志文章包含专业 建模 xff0c 仿真 xff0c 网络 xff0c 人工智能 xff0c 比较杂 投稿联系方式 http www arocmag com 注册在线投稿审稿 投稿费用 250元 页 杂志级别
  • Minix下的汇编

    Minix下的汇编 大多数的编译器 xff0c 如Turbo C C 43 43 xff0c Borland C C 43 43 xff0c M C C 43 43 xff0c GCC xff0c VC 43 xff0c 编译过程都是 xf
  • 解决Xshell 7 报错 “要继续使用此程序,您必须应用最新的更新或使用新版本”

    1 先创建一个文本文档 xff0c 同时把该文档名称和后缀改为xshell7 bat xff1b 2 打开编辑这个xshell7 bat文件 xff0c 并且把以下文字复制进去 xff0c 注意set XSHELL 61 这一项需要改成你自

随机推荐

  • 多任务操作系统的任务切换

    在学习OS时 xff0c 对于多任务操作系统的任务切换 xff0c 一直不能理解 xff1a 控制权是怎么么回到调度程序上的 xff1f 记得在描述任务切换时 xff0c 一般都是这么描述的 xff1a 在每一个时钟滴答 xff0c 都将检
  • Minix下的汇编2

    似乎minix平台并没有带一个真正的汇编编译器 xff0c 看看makefile xff0c 几乎都是清一色的用cc来编译汇编代码的 而且 xff0c 即使是一个最简单功能的汇编程序 xff0c 也少不了一个 main 标签 在minix的
  • 原来在/var/spool/mail中

    fetchmail会把从mail server收到的邮件投递到 var spool mail 中去 而mutt也会自动地到 var spool mail里取信 xff0c 解码 xff0c 并显示 但 xff0c fetchmail的速度不
  • 汉字编码标准与识别(一)代码页(Code Page)初识

    BBS水木清华站 精华区 发信人 yanglc 魂归燕园 别理我 xff0c 烦着呢 信区 Linux 标 题 汉字编码标准与识别 一 发信站 BBS 水木清华站 Sat Apr 29 17 19 05 2000 http www linu
  • 让xpdf支持中文(C++primer中文版)

    首先到http www linuxfans org nuke modules php name 61 Site Downloads amp op 61 geninfo amp did 61 2385下载一个打了补丁的xpdf 安装 xff0
  • Xpdf-3 for MDK

    http www linuxfans org nuke modules php name 61 Site Downloads amp op 61 geninfo amp did 61 2385 Xpdf 3 for MDK 类别 其它软件
  • 不同公司的牛

    本文转自 C 43 43 Builder 研究 http www ccrun com other go asp i 61 264 amp d 61 sgz5id 传统公司 xff1a 你有两头母牛 你卖掉一头 xff0c 买了一头公牛 你的
  • 从词法分析开始

    刚开始时 xff0c 用lex的确是很方便 xff0c 但是这样却不能将词法分析的思想实践出来 最好的方法还是自己写一个lex 当然龙书上写得很详细了 xff0c 但是写得再详细 xff0c 把它实现出来还是很难的 我的计划是 xff1a
  • Python 获取当前路径几种方法

    Python 获取当前路径的几种方法 绝对路径 1 os path 方法 span class token comment coding utf 8 span span class token comment usr bin python
  • [pixhawk笔记]2-飞行模式

    本文翻译自px4官方开发文档 xff1a https dev px4 io en concept flight modes html xff0c 有不对之处 xff0c 敬请指正 pixhawk的飞行模式如下 xff1a MANUAL xf
  • 扩展卡尔曼滤波详解

    Extened Kalman Filter 简单介绍 卡尔曼滤波详解讲解的基本的卡尔曼滤波算法是通过一个线性随机差分方程来估计当前状态 xff0c 但是如果状态估计关系以及测量关系使非线性的怎么办 xff0c 而且在实际使用中大部分的问题都
  • 关于PX4中的高度若干问题

    飞行的高度是如何测量的 xff1f 地面的高度和海平面的高度差别很大 xff0c 飞控又是如何有效判别进行降落的 xff1f 这是我脑子里的疑问 搜索的一圈发现很少有人讨论这方面的问题 xff0c 于是本次我就直接看一下源代码 xff0c
  • 基于4G网卡和树莓派zero实现低延时数字图传(250-300ms左右)

    方案本身并不复杂 xff0c 都是采用成熟的产品 xff0c 只需要几个命令行就能解决问题 0 准备工作 硬件 xff1a 树莓派zero 4G网卡 linux台式机 笔记本 虚拟机 软件 xff1a raspivid netcat nc
  • 树莓派zero w 使用AV接口连接电视机

    树莓派zero本身板子上有一个mini HDMI xff0c 但是我看到好像板子上还有一个小接口 xff0c 上面写着TV xff0c 感觉应该可以输出AV信号 xff0c 于是网上搜索了一番 xff0c 果然可以 首先 xff0c 手工做
  • OpenHD改造实现廉价高清数字图传(树莓派+PC)—(一)概述

    一 缘由 数字图传网上有开源的解决方案 xff0c 最为出名的应该就是OpenHD了 如果按照官方网站的内容 xff0c 构建起来也不是很复杂 xff0c 直接可以烧录两个TF卡就能完成 但是 xff0c 你需要用到两个树莓派板卡 xff0
  • OpenHD改造实现廉价高清数字图传(树莓派+PC)—(二)Wifibroadcast Wifi广播通信

    上一篇文章重点介绍了数字图传的整体构建思路 xff0c 以及主要的软件模块和最终效果 接下来几篇文章将针对其中的几个主要关键技术点进行阐述 一方面是为了将这些知识点做一个整理记录 xff0c 方便后续查阅 xff0c 另一方面也是将学习到知
  • OpenHD改造实现廉价高清数字图传(树莓派+PC )—(四)OSD数据传输和画面显示

    前面三篇文章分别讲了整体情况 xff0c wifibroadcast xff0c 以及OpenVG的移植等 OpenHD改造实现廉价高清数字图传 xff08 树莓派zero 43 ubuntu PC xff09 xff08 一 xff09
  • OpenHD改造实现廉价高清数字图传(树莓派+PC)—(五)gstreamer视频采集、传输和显示

    图传的一个重要功能就是可以看视频 主要是采集树莓派zero摄像头的数据 xff0c 经过编码打包 xff0c 通过wifibroadcast发送到地面端的PC上 xff0c 然后再通过解码显示出来 这里用到了视频采集和编解码相关的软件 在树
  • OpenHD改造实现廉价高清数字图传(树莓派+PC)—(六)OSD和视频画面整合显示

    这个OpenHD改造移植系列的最后一篇文章 xff0c 这篇文章主要讲如何讲前面说到的全部内容串接起来 xff0c 讲OSD画面显示和视频画面整合到一起 xff0c 形成完整的图传地面显示 xff0c 真正实现PC上直接接收显示图传视频和数
  • OpenHD改造实现廉价高清数字图传-OrangePi i96移植篇

    前面说到 xff0c 天空端的树莓派zero也涨价的厉害 xff0c 以及500多块了 xff0c 实在是贵的离谱啊 xff0c 所以还是要找国产化替代 先从最便宜的OrangePi i96开始吧 xff0c 毕竟只有39元的价格 xff0