由评测者“岳洋”提供。
上期开箱,由于拨码开关拨错了,所以以为没有系统在这里面,本次我拨回去了,启动看下其系统,暂时还未烧录ubuntu镜像。
接上我们的HDMI连接线,鼠标接收器,电源,开机即可。
开机界面,完美体育·(中国)手机网页版logo,进入系统就是完美体育·(中国)手机网页版开发的QT界面,由于失误没能拍一下。完美体育·(中国)手机网页版的界面可以给我们一个参考开发作用。下面开始刷系统。
这里我们多接一个OTG的线用来下载,然后按住FEL按键,开电源,等待系统找驱动,驱动需要自己手动安装下,全部是在T507_tools下。
打开全志提供的烧录软件,我们可以直接选择镜像,然后这时候应该是按住FEL按键开机的。
他会自己弹出刷机开始,等待完成即可。
之后我们进入系统后需要登录,这个登录也是大家吐槽的,需要输入多次才能成功进去,进入后就会有提示信息,需要输入命令完成系统安装,因为这个镜像是基础的,所以需要全部释放安装。
这里就涉及比较多的内容,首先这个安装都是联网的,需要网络,我们可以接自己家里的路由器,这是必须要网线的,因为板载没有WIFI模块。
网线接在ENET1口上。
接下来我根据网上教程修改下脚本。
ubuntu以DHCP方式配置网卡自动获取ip
编辑文件/etc/network/interfaces:
vi /etc/network/interfaces
并用下面的行来替换有关eth0的行:
# The primary network interface - use DHCP to find our address auto eth0 iface eth0 inet dhcp
这样开机后就能自己打开网卡获取IP地址了。
之后更新软件源。我开始尝试用阿里云的,结果不行,看论坛帖子更换了中科大源。
阿里云会存在一些包下载不下来。
修改/etc/apt/sources.list文件,开始可以通过备份,把这个文件重命名一下,直接修改也可以。
deb http:*//mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse* deb-src http:*//mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse* deb http:*//mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse* deb-src http:*//mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse* deb http:*//mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse* deb-src http:*//mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse* deb http:*//mirrors.ustc.edu.cn/ubuntu-ports/ bionic main universe restricted* deb-src http:*//mirrors.ustc.edu.cn/ubuntu-ports/ bionic main universe restricted*
添加完源之后,apt update一下即可,然后输入命令unminimize,进行安装。
到这里才完成一大半,还差桌面没安装。如果这时候再次启动还是没有桌面,由于这后面不是我的强项了,所以我们省略了,可以自己安装
sudo apt install xfce4 xfce4-terminal
同样是命令行,安装桌面环境。我后期还是集中在传统的buildroot构建系统这上面。我们构建自己应用显示。本次ubuntu的安装已经完成,虽缺少桌面,但是命令行能操作也是可以的。好像还能做些简单程序跑下。
由评测者“岳洋”提供。
本次算一个奇怪的体验了,当时在安装完Ubuntu之后,发现其是没有桌面的,然后想了下是不是能和电脑虚拟机里面的Ubuntu使用起来是一样的呢,所以我这里就特意测试了下。首先我进行了简单测试先安装了下gcc。跑一下hello,woeld。
可以直接使用命令apt install gcc安装。安装完可以用指令测试下版本。
之后我们用最简单的hello.c程序进行测试。
#include "stdio.h" int main(void) { printf("hello world"); return 0; }
之后使用
gcc -o hello hello.c
生成可执行文件hello。
可以查看和运行文件,都是正常在arm下可以执行的文件。到这里我就有信心往后测试了,我开始以为需要从官网上下源码自己在编译下,最后我发现还是一条指令进行安装即可。
apt install ffmpeg。即可完成安装。他会自己找需要的包然后下载。
测试也可以使用ffmpeg -version查看版本。
目前Ubuntu 18下还是3点几版本,不是最新,不过也够我们体验了。
之后我们需要完成我们的摄像头数据推流实验,需要一个摄像头。这里可以选择某宝的USB免驱摄像头,看挂载与否可以参考命令。
ls /dev
查看下面,插入是否有video0这样的设备。
由于其没有插入提示,所以一定要自己查看下,不然还以为没有挂载。下面我们要在win上拉流的话,我们需要安装如下软件。这里我参考了网上,到时候我把附件全部传上来。
底层推流我们需要创建一个服务器,这时候就需要使用nginx,搭建这个网上也有完整教程。我们主要底层是通过rtmp命令进行推流的,所以需要这个nginx服务器。
我们查看推流数据可以通过VLC
media player进行。
下面通过命令行先启动服务器。
查看是否正常运行就是在浏览器中输入本机IP。
出现这样提示就说明可以进行推流操作了。
在开发板命令窗口输入如下命令:
ffmpeg -i /dev/video0 -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv rtmp://192.168.2.226:1935/live/movie
看到没有报错,以及底下在动之后我们基本就完成推流工作了。之后再我们win上,使用VLC软件进行打开网络流。
我们选择打开网络串流,输入我们的推流地址,然后播放即可。
这时候就得千兆网络了,不然会有点卡,也与路由器有关系。
rtmp://192.168.2.226:1935/live/movie
rtmp这里的配置是需要你服务器会新建一个conf文件
所以注意下,不然可能找不到打开的数据。目前测试下来还有点延迟的。本次我们在其桌面未安装的情况下,完成了ffmpeg测试,只是简单测试了推流拉流,中间很多知识点还需要再充分了解,希望和大家多多交流学习。
由评测者“jinyi7016”提供。
工业项目中使用时,2个网口一般是最小的配置的,大多都是四网或是八网的,所以,要为开发板设计一个可以转换成网口的扩展模块。
由于USB比较好扩展,用hub可以扩展出多个也比较方便。所以,选择了一个USB转网络的芯片来做。
原理图如下:
PCb如下:
当插上开发板后,可以看到,已经识别出了三个网口了。
插上网线,自动获取IP
实物图如下:
由评测者“HonestQiao”提供。
在之前的研究中,已经实现了完美体育·(中国)手机网页版MYD-YT507开发板接入海康威视USB摄像头,并进行摄像头数据的获取,具体可查看:USB摄像头使用从入门到放弃。
在此基础上,进一步实现了完美体育·(中国)手机网页版MYD-YT507开发提供MJPEG推流,矽速M2 Dock读取该MJPEG推流,并显示到屏幕上,其逻辑如下:
最终的效果,可以查看:M2 Dock获取MJPEG推流数据
这篇文章,分享的就是 完美体育·(中国)手机网页版MYD-YT507开发板 实现MJPEG推流的部分。
最开始,我尝试了使用nginx + nginx-rtmp-module
模块,来实现rtmp视频推流。
具体操作如下:
# Ubuntu18.04操作系统 # 安装pcre sudo apt install libpcre3 libpcre3-dev
sudo apt install openssl libssl-dev
sudo apt install zlib1g-dev # 安装nginx wget http://nginx.org/download/nginx-1.22.0.tar.gz git git clone https://github.com/arut/nginx-rtmp-module tar -zxvf nginx-1.22.0.tar.gz
cd nginx-1.22.0 ./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module
make -j4
sudo make install
使用ffmpeg获取摄像头数据并推流:
ffmpeg -input_format mjpeg -s:v 640x480 -framerate 30 -i /dev/video0 -f flv "rtmp://127.0.0.1:1935/live/test"
使用支持视频流的播放器,播放流地址(注意IP修改为开发板实际的IP):rtmp://192.168.1.207:1935/live/test
...
在矽速M2 Dock上,使用的开发环境是MaixPy。
在Python中,对于MJPEG数据,可以很方便的获取。
于是又了解了Ubuntu系统下MJPEG推流的资料,使用mjpeg_streamer就能很方便的实现。
具体操作如下:
sudo apt install cmake libjpeg9-dev
git clone https://github.com/jacksonliam/mjpg-streamer.git cd mjpg-streamer/mjpg-streamer-experimental make all
sudo make install
mjpg_streamer -i "input_uvc.so -d /dev/video0 -n -r 320x240 -f 10" -o "output_http.so -w ./"
执行 mjpg_streamer 后,就会启动对应的服务:
然后,通过浏览器访问 http://192.168.2.207:8080/?action=stream 即可:
提供的MJPEG服务,可以用浏览器直接播放,也可以在Python程序中调用并呈现。
可供测试的代码如下:
import numpy as np import platform if platform.uname().node == "sipeed": from io import BytesIO from PIL import Image from maix import camera, mjpg, utils, display, image else: import cv2
READ_TYPE = "socket" # url socket MJPEG_HOST = "192.168.2.207" MJPEG_PORT = 8080 MJPEG_QUERY = "/?action=stream" def img_data_show(jpg): global img_bytes global tmp_file global is_sipeed global BytesIO global Image global np global image global display if is_sipeed: if True:
bytes_stream = BytesIO(jpg)
pimg = Image.open(bytes_stream)
img = image.load(pimg)
display.show(img) else: with open(tmp_file, "wb") as binary_file:
binary_file.write(jpg)
img = image.open(tmp_file)
display.show(img) else:
img = cv2.imdecode(np.frombuffer(
jpg, dtype=np.uint8), cv2.IMREAD_COLOR)
cv2.imshow('i', img) if cv2.waitKey(1) == 27:
exit(0) def img_data_match(chunk): global img_bytes global tmp_file global is_sipeed global BytesIO global Image global np global image global display global img_data_show
img_bytes += chunk
a = img_bytes.find(b'\xff\xd8')
b = img_bytes.find(b'\xff\xd9') if a != -1 and b != -1:
jpg = img_bytes[a:b+2]
img_bytes = img_bytes[b+2:]
img_data_show(jpg)
img_bytes = b'' tmp_file = "/tmp/test.jpg" is_sipeed = platform.uname().node == "sipeed" print("Connect to %s:%d with %s on %s" % (MJPEG_HOST, MJPEG_PORT, READ_TYPE, platform.uname().node)) if READ_TYPE == "url": import requests
MJPEG_URL = "http://%s:%s%s" % (MJPEG_HOST, MJPEG_PORT, MJPEG_QUERY)
r = requests.get(MJPEG_URL, stream=True) if(r.status_code == 200): print("connect success!") for chunk in r.iter_content(chunk_size=1024):
img_data_match(chunk) else: print("Received unexpected status code {}".format(r.status_code)) elif READ_TYPE == "socket": import socket
client = socket.socket() # 创建socket套接字 ret = client.connect((MJPEG_HOST, MJPEG_PORT)) # 状态位,判定是否连接成功 request_url = "GET %s HTTP/1.1\r\nHost:%s\r\nConnection:Close\r\n\r\n" % (
MJPEG_QUERY, MJPEG_HOST) if(ret == -1): # 连接失败,退出程序 print("connet error!")
exit(-1) else: # 连接成功 print("connect success!")
client.send(request_url.encode()) # 发送socket请求,开始接收数据 chunk = client.recv(1024) # 第一个recv返回信息,跟图片无关 chunk = client.recv(1024) # 这个信息开始跟图片有关系,放到接收变量里 while chunk: # 判断是否还有信息 img_data_match(chunk)
chunk = client.recv(1024) # 继续接收
在电脑上,将上述代码保存为mjpeg_display_demo.py
,并修改代码中MJPEG_HOST
为实际的开发板ip地址,然后使用python mjpeg_display_demo.py
运行,就能查看显示了。
如果上述代码运行在矽速M2 Dock中,那么对应的效果就是显示到屏幕上了。
由评测者“李先生”提供。
CoreMark是用在嵌入式系统中用来测量CPU性能的基准程序。该标准于2009年由EEMBC(Embedded Microprocessor Benchmark Consortium 嵌入式微处理器基准协会)组织的Shay Gal-On提出,并且试图将其发展成为工业标准,从而代替陈旧的Dhrystone标准。CoreMark较Dhrystone避免了编译器不同带来的不同。
手册中描述板载CPUcoremark跑分达到了16000,我么实际测一测。
在windows主机中git clone https://github.com/eembc/coremark.git下载代码
通过sftp将coremark文件夹导入到开发板
** put -r coremark/**
cd coremark/
vi simple/core_portme.h
修改
#define COMPILER_FLAGS \
FLAGS_STR** /* "Please put compiler flags here (e.g. -o3)" /*
#endif
为
#define COMPILER_FLAGS \
"-O3"** /* "Please put compiler flags here (e.g. -o3)" /*
#endif
如果-O0编译则改为”-O0”
typedef ee_u32 ee_ptr_int;
改为
typedef unsigned long ee_ptr_int;
编译
gcc -o coremarko3 core_list_join.c core_main.c core_matrix.c core_state.c core_util.c simple/core_portme.c -DPERFORMANCE_RUN=1 -DITERATIONS=100000 -Isimple -I. -O3
-O0编译则改为
gcc -o coremarko0 core_list_join.c core_main.c core_matrix.c core_state.c core_util.c simple/core_portme.c -DPERFORMANCE_RUN=1 -DITERATIONS=100000 -Isimple -I. -O0
./coremarko0
./coremarko3
运行结果如下
-O0 1795
-O3 8736
可以看到优化等级的影响巨大。
由于是双核我们这里测试的是单核所以换算8763*2就是17472. 所以手册所说的16000没有夸张的成分。
可以从如下地址查看对应处理器的得分。
https://www.eembc.org/coremark/scores.php
https://www.eembc.org/coremark/
有时候我们没有HDMI显示,这个时候要进行图形界面的使用和开发,可以通过VNC的方式实现。
按照之前的文章联网
ifconfig eno0 192.168.137.2
route add default gw 192.168.137.1
vi /etc/resolv.conf 修改dns为114.114.114.114
sudo apt install xfce4
这里没有安装gnome的原因是存储空间不够,所以只能安装轻量级的桌面xfce4。
sudo apt install tightvncserver
vncserver
启动
第一次需要创建密码,密码要6个字符以上。
如果显示不正常vncserver -kill :1关掉服务 其中1对应启动时打印的localhost:1
vi ~/.vnc/xstartup
改如下内容
#!/bin/sh #Uncomment the following two lines for normal desktop:
#unset SESSION_MANAGER
#unset DBUS_SESSION_BUS_ADDRESS
#exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & #x-window-manager & x-session-manager &
xfdesktop & xfce4-panel &
xfce4-menu-plugin &
xfsettingsd &
xfconfd &
xfwm4 &
再重新启动vncserver
https://www.tightvnc.com/download-old.php下下载
TightVNC 1.3.10
安装一路Next即可。
双击打开TightVNC Viewer
输入服务端IP:序号连接
比如192.168:137.2:1即第一个服务。
输入密码密码是第一次启动服务时创建的
进入桌面如下
点击Use default config
左上角可以使用一些默认的程序,比如打开浏览器
注如果进入了全屏模式,使用Ctrl+shift+alt+f退出全屏
后面就可以进行桌面程序开发和体验了。
由评测者“李红洁”提供。
默认xface使用的是Debian X Terminal Emulator 所以需要线安装终端
sudo apt-get install terminator 否则打不开终端
Applications -> Settings -> Settings manager -> Prefered Applications -> Utilities 可以指定使用的终端。
sudo apt-get install python3-tk
此时可以import tkinter了。
root@localhost:~# python3
Python 3.6.9 (default, Jun 29 2022, 11:45:57)
[GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information.
> > > import tkinter
> > >
apt-get install python3-pip python3-dev build-essential
pip3 install --upgrade pip3
pip3 --trusted-host pypi.python.org --trusted-host pypi.tuna.tsinghua.edu.cn install pyserial -i https://pypi.tuna.tsinghua.edu.cn/simple/
下载代码
git clone https://gitee.com/qinyunti/python_tkinter_uart.git
cd python_tkinter_uart
python3 Python_Tkinter_UART.py
UART2的引脚对应J18的8,10引脚,对应设备号是/dev/ttyS1
发送数据可以看到接收到一样的数据
由评测者“李红洁”提供。
有时候我们没有HDMI显示,这个时候要进行图形界面的使用和开发,可以通过VNC的方式实现。
按照之前的文章联网
ifconfig eno0 192.168.137.2 route add default gw 192.168.137.1 vi /etc/resolv.conf 修改dns为114.114.114.114
sudo apt install xfce4
这里没有安装gnome的原因是存储空间不够,所以只能安装轻量级的桌面xfce4。
sudo apt install tightvncserver
vncserver
启动
第一次需要创建密码,密码要6个字符以上。
如果显示不正常vncserver -kill :1关掉服务 其中1对应启动时打印的localhost:1
vi ~/.vnc/xstartup
改如下内容
#!/bin/sh #Uncomment the following two lines for normal desktop: #unset SESSION_MANAGER #unset DBUS_SESSION_BUS_ADDRESS #exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & #x-window-manager & x-session-manager & xfdesktop & xfce4-panel & xfce4-menu-plugin & xfsettingsd & xfconfd & xfwm4 &
再重新启动vncserver
https://www.tightvnc.com/download-old.php下下载
TightVNC 1.3.10
安装一路Next即可。
双击打开TightVNC Viewer
输入服务端IP:序号连接
比如192.168:137.2:1即第一个服务。
输入密码密码是第一次启动服务时创建的
进入桌面如下
点击Use default config
左上角可以使用一些默认的程序,比如打开浏览器
注如果进入了全屏模式,使用Ctrl+shift+alt+f退出全屏
后面就可以进行桌面程序开发和体验了。
由评测者“jf_01801880”提供
为了实现我的智能工业网关项目的界面配置,但是底板又没有留显示器,故这里通过搭建web服务器的方式来实现可视化操作,就像路由器那样,通过固定的IP地址,连接到后台管理中心,对设备进行配置。
这里我使用的是boa web服务器,无它,因为它小巧简单,方便快速搭建环境进行开发。
直接在官网下载源码包即可,交叉编译后通过底板上进行运行,这里有一个坑要注意的是底板的glibc版本过低,不支持boa操作,故需要自己重新去下载glibc的源码包进行交叉编译然后再部署到开发板上,或者更新刷厂家提供的最新镜像。
把环境部署后即可进行正常开发啦,boa的开发比较简单,界面自己通过html实现即可,通讯操作通过cgi实现,附上一个自己的写的html界面。
到这里就可以啦,关于如何控制的可以去看看cgi相关知识,后续发帖的时候再补充自己的一些源码。
由评测者“李红洁”提供。
由于开发板配件没有送WIFI模块,只能通过有线连接外网,
然而现在开发板又不能直接接入路由器, 但是笔记本是可以连接WIFI上网的。
所以开发板只能通过以太网连接笔记本的有线网口,然后通过笔记本的WIFI共享上网。
WINDOWS就支持这种共享完美解决了现在的需求。
如下所示
通过控制面板网络和Internet下的网络连接查看网卡
我这里的无线网卡是WLAN,有线网卡是以太网2.
需要配置WLAN共享功能,即以太网2接口通过WLAN共享连接外网。
配置WLAN
右键点击WLAN->属性
按如下将WLAN共享给以太网2
此时右键点击以太网2->属性
查看以太网2的IP地址自动配置为了192.168.137.1
查看WLAN的DNS,后面开发板也要设置为一样
查看WLAN属性
查看DNS为114.114.114.114记住
串口登录开发板
设置ip地址
ifconfig eno0 192.168.137.2
设置网关
route add default gw 192.168.137.1
设置DNS
vi /etc/resolv.conf
输入i进入编辑模式
nameserver 127.0.0.53改为nameserver 114.114.114.114 即之前看到的笔记本WLAN的DNS。
按esc
按shift+:进入命令行模式
输入wq回车 保存
ping www.baidu.com
可以ping通外网
apt-get update
apt-get upgrade
系统有apt工具,开发板联网之后就可以安装各种软件,后面开发使用就方便了。