前面说到,天空端的树莓派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左右,已经算比较低了。

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

  1. OpenHD改造实现廉价高清数字图传(树莓派+PC )—(四)OSD数据传输和画面显示

    前面三篇文章分别讲了整体情况,wifibroadcast,以及OpenVG的移植等 OpenHD改造实现廉价高清数字图传(树莓派zero + ubuntu PC )--(一)概述_hoopertsau ...

  2. OpenHD改造实现廉价高清数字图传(树莓派+PC)—(一)概述

    一.缘由    数字图传网上有开源的解决方案,最为出名的应该就是OpenHD了.如果按照官方网站的内容,构建起来也不是很复杂,直接可以烧录两个TF卡就能完成.但是,你需要用到两个树莓派板卡,而且地面站 ...

  3. OpenHD改造实现廉价高清数字图传(树莓派+PC)—(六)OSD和视频画面整合显示

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

  4. OpenHD改造实现廉价高清数字图传(树莓派+PC)—(五)gstreamer视频采集、传输和显示

    图传的一个重要功能就是可以看视频.主要是采集树莓派zero摄像头的数据,经过编码打包,通过wifibroadcast发送到地面端的PC上,然后再通过解码显示出来. 这里用到了视频采集和编解码相关的软件 ...

  5. OpenHD改造实现廉价高清数字图传(树莓派+PC)—(二)Wifibroadcast Wifi广播通信

    上一篇文章重点介绍了数字图传的整体构建思路,以及主要的软件模块和最终效果.接下来几篇文章将针对其中的几个主要关键技术点进行阐述.一方面是为了将这些知识点做一个整理记录,方便后续查阅,另一方面也是将学习 ...

  6. OpenHD改造实现廉价高清数字图传(树莓派+PC )—(三)OpenVG和libshapes在PC上的移植

    上一篇文章主要讲的是wifibroadcast的通信相关内容,解决的是数据如何传输和接收的问题.这篇文章主要是这个系列的第三篇文章,主要讲讲怎么将OpenHD的OSD显示到PC上.这里主要用到的底层接 ...

  7. OpenHD---低成本开源高清数字图传

    转载注明出处   文章目录 一.前言 二.OpenHD简单介绍 三.图传材料准备 1.树莓派 2.摄像头.排线.SD卡.读卡器 4.网卡 四.硬件连接 五.镜像刷写 六.通电测试 七.系统参数设置 八 ...

  8. EZ-wifibroadcast 树莓派高清数字图传

    数字图传的画质相对模拟图传有显著的提升,但是其高昂的价格令不少爱好者望而却步. 本教程将利用树莓派,搭建一个人人都能用的起的数字图传,尽可能将最低成本控制在500以内. 一.准备工作 1.发射端树莓派 ...

  9. dvb-c usb android,安卓智能DVB-C高清数字机顶盒

    主要特征 DV6508-C采用高性能数字电视芯片方案,双核业务处理实现机制.内置蓝牙.WIFI.MIC模块:双USB2.0 接口,支持多种USB扩展应用,完全符合DVB-C标准,支持高清MPEG-2. ...

最新文章

  1. redhat5.5安装oracle10g出现问题
  2. 我的GitHub 欢迎光临
  3. 阿里云上的docker安装
  4. python 初始化数组 numpy,Python Numpy 数组的初始化和基本操作
  5. 信号的采样与插值重建(包含matlab)
  6. SaS中ne在mysql语句对应_SAS学习经验总结分享:篇四—SQL过程
  7. 机器学习算法--ALS
  8. makefile编译erlang
  9. Java如何将指定字符串转化为指定日期格式
  10. Java的IO操作(五) - PrintStream类、字符流、Reader和Writer、带缓冲的字符流BufferedReader和BufferedWriter...
  11. 【Codeforces #228】Solutions
  12. 读嵌入式linux驱动程序设计从入门到精通 3
  13. 布隆过滤器与布谷鸟过滤器(经典版)
  14. 电驴搜索服务器正在连接,电驴未连接到服务器是什么原因?
  15. 力天创见智慧客流方案
  16. m基于FPGA的通信数据帧加扰解扰verilog实现,包含testbench
  17. 病毒—Win32/Gamarue
  18. 布线问题(分支限界)
  19. JavaScript - 停止计时器
  20. Tableau——超市销售额数据分析可视化

热门文章

  1. 图像恢复重建(浙大人工智能导论作业四)
  2. 安卓虚拟机_一个手机变两个!安卓机上的安卓虚拟机,自带Xposed框架!
  3. Rightware的Kanzi界面很快你的全液晶汽车仪表盘
  4. 谁是中国元宇宙第一城?
  5. VMware安装Ubuntu 16.04(完整版图文教程)
  6. 关于学习生活记录的感想总结
  7. 持久内存BTT实现及优化(二)
  8. Win10系统FF新推荐怎么卸载?FF新推荐新闻弹窗彻底关闭删除教程
  9. 向榜样学习!!在路上
  10. Android 开发常用工具介绍(方便自己查阅)