为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证研究。
硬件系统经过对比筛选,选用了友善之臂出品的nanopc-t3 plus。该控制板为掌上型嵌入式linux系统迷你pc,采用64位三星arm cpu,具有完善的硬件接口和驱动支持,大于1g的内存和8g以上的emmc闪存,具有较高的性能价格比。
nanopc-t3 plus是友善之臂专门针对企业用户而设计,它采用三星八核cortex -a53架构的s5p6818处理器,动态运行主频400m-1.4ghz。nanopc-t3 plus配备了16gb的emmc、音频接口、视频输入/输出接口等;并且集成了wifi和蓝牙,增加千兆以太网和电源管理功能,板载陶瓷天线,带串口调试功能。为适应工业客户需要,nanopc-t3 plus加装了标配的散热片,以解决芯片发热问题。nanopc-t3 plus带两路视频输入,支持dvp 摄像头及mipi-csi摄像头,并且带四路视频输出,分别为hdmi 1.4a接口、lvds接口、并行rgb-lcd接口、mipi-dsi接口。并且支持rtc,板载备份电池接口,引出四个usb接口(其中三个是标准a型接口, 另外一个是2.54mm排母)等。nanopc-t3 plus)流畅运行android5.1、debian、ubuntucore+qt等系统,内核驱动源码完全开源,接口丰富。
为避免广告嫌宜,不过多对设备进行说明(好象难以避免呵,如有此方面问题,请管理员协助进行和谐呵)
在此给出设备的wiki地址:/d/file/titlepic/friendlycoreç³»ç»ï¼64ä½armç³»ç»ï¼android5.1%e7%b3%bb%e7%bb%9f%3cp%3efriendlycore%ef%bc%8c%e6%98%af%e4%b8%80%e4%b8%aa%e6%b2%a1%e6%9c%89x-windows%e7%8e%af%e5%a2%83%ef%bc%8c%e5%9f%ba%e4%ba%8eubuntu core构建的系统,使用qt-embedded作为图形界面的轻量级系统,兼容ubuntu系统软件源,非常适合于企业用户用作产品的基础os。
系统除了保留ubuntu core的特性以外,还包括以下特性:
支持电容和电阻触摸屏支持wifi连接支持以太网连接支持蓝牙,已预装bluez等相关软件包支持音频播放支持qt 5.10.0 egles和opengl es1.1/2.0https://docs.microsoft.com/zh-cn/dotnet/core/linux-prerequisites?tabs=netcore2x
.net core 2.x 将 linux 视为一个操作系统。 支持的 linux 分发都对应有一个 linux 内部版本(根据芯片体系结构)。
以下 linux 发行版本/版本支持 net core 2.x:
red hat enterpri linux 7,6 – 64 位(x86_64 或 amd64)centos 7 – 64 位(x86_64 或 amd64)oracle linux 7 – 64 位(x86_64 或 amd64)fedora 28、27 – 64 位(x86_64 或 amd64)debian 9(64 位,arm32)、8.7 或更高版本 – 64 位(x86_64 或 amd64)ubuntu 18.04(64 位,arm32)、16.04、14.04 – 64 位(x86_64 或 amd64)linux mint 18、17 – 64 位(x86_64 或 amd64)opensu 42.3 或更高版本 – 64 位(x86_64 或 amd64)su enterpri linux (sles) 12 rvice pack 2 或更高版本 – 64 位(x86_64 或 amd64)alpine linux 3.7 或更高版本 – 64 位(x86_64 或 amd64)根据.net core 2.x对linux系统的支持,选择friendlycore-xenial-4.4-arm64作为系统运行平台。
下载厂家提供的系统映像文件,对nanopc-t3/plus进行系统烧写,方法详见wiki教程.
烧写主要步骤:
1、下载厂家提供的映像文件和烧写工具win32diskimager(wiki中提供了下载链接)2、准备一张tf卡,格式化为一个分区(fat32)3、运行win32diskimager软件,选择映像文件,选择tf卡对应的分区,点击写入4、烧写完成5、将tf卡插入卡座,按信boot键给控制板上电(需外接显示器和键盘、鼠标)6、根据屏幕提示,将系统安装至emmc闪存。friendlycore系统默认支持多种连接方式,可通过外接输入、输出设备(键盘/鼠标、显示器)进行连接,也可以通过串口终端进行连接,也支持通过网络,使用ssh终端方式进行连接。
friendlycore系统默认配置了两个用户帐户
普通用户:
用户名: pi
密码: pi
root用户:
用户名: root
密码: fa
系统开机默认会以 pi 用户自动登录,你可以使用 sudo npi-config 命令取消自动登录。
nanopc具有hdmi、tft显示接口和usb接口,可以直接连接显示器、键盘/鼠标进行操作。
nanopc默认支持调试串口做为终端。
通过usb转ttl串口的串口模块进行连接。默认通讯参数:115200,n,8,1
软件可使用任意串口终端工具,如curecrt或windows系统自带超级终端。
可以寻找风通ssh工具进行网络连接,通过网络终端的方式访问。(win10系统自带)
friendlycore系统网络配置默认为自动获取ip地址。通过网络连接设备,需要确定设备的ip地址。
初始ip地址可以通在串口终端模式下输入ifconfig命令查看,或通过网络扫描确定。
确定设备的ip地址后,可以通ssh命令进行终端连接
本次实验中,我们设备的ip地址为172.16.93.74,通过如下命令进行网络终端接入:
ssh pi@172.16.93.74
根据提示输入密码后,即可成功登入。
由于后期主要需要使用的程序功能为网络通讯和串口通讯,我们主要针对目标嵌入式linux系统下的网络和串口通讯进行验证。
本次实验中,我们先对串口通讯进行验证。
编写一个netcore2.x的控制台程序,程序实现系统信息显示,串口资源列举,串口选择,串口打开/关闭,串口接结构上的作用收显示和串口定时发送测试数据功能。
采用rialport类进行串口测试功能实现(netcore项目需通过nuget安装railport库)
实现以下功能:
显示系统平台信息串口资源列举,串口选择,串口打开串口关闭串口接收/数据显示串口定时发送测试数据程序较为简单,在此贴出部分功能代码:
编译程序,在window下测试程序通过。
因目标平台为arm64嵌入式linux系统,采用以下方式进行程序发布:
在命令行窗口,切换到项目文件夹,运行如下命令:
dotnetpublish-rlinux-arm64-crelea
通过以上命令,得到生成的目标平台的发布包,程序文件及相关.netcore运行时依赖均被发布到项目relea\netcoreapp2.2\linux-arm64\publish文件夹中。
采用scp命令,将发布文件复制到目标机器
在windows(win10)系统中,打开控制台窗口,输入scp命令,命令格式如下:
scp –r d:\ubuntu\publish\ pi@172.16.93.74:/home/pi/.
根据提示输入用户密码,完成文件夹的复制。
在ssh终端窗口,切换到程序文件夹
cd /home/p两小儿辩日i/publish
设置程序执行权限:
chmod 777 ./helloarm # helloarm为测试程序文件名
输入./ helloarm运行程序
在普通用户pi中运行程序
程序显示了系统环境信息
由于程序启动后调用了rialport.getportnames方法,程序未能按预期执行,出现如下信息:
提示信息表明rialport类库仅支持windows系统平台,不支持跨平台。
至此,.net core程序跨平台在linux系统运行成功,但串口类库不支持跨平台。
为解决串口类支持问题,查找资料,发现github上有一个开源rialportstream类库支持netcore,能够支持linux系统。
https://github.com/jcurl/rialportstream
该类库支持windows系统和linux系统,但在linux系统下运行,需要额外编译目标平台支持库并进行相关环境配置。
you first need to compile the support library libnrial.so for your platform. to do that, you’ll need a compiler (e.g. gcc 4.8 or later) and cmake.
在目标系统中(friendlycore),安装gcc编译器和cmake
首先确定网络正常连接,能够访问互联网(需要良好的网络环境)。
执行如下命令:
sudo apt-get update
安装更新gcc
sudo apt-get install gcc
安装cmake
sudo apt-get install cmake
确保gcc和cmake安装正常。可采用命令查看安装情况
gcc –version
cmake –version
after cloning the repository, execute the following:
$ git clone https://github.com/jcurl/rialportstream.git
$ cd rialportstream/dll/rialunix
$ ./build.sh
根据上面的命令,完成类库的源码克隆和编译。
注:类库linux依赖库仅需在同一目标平台编译一次,其他相同目标平台,复制并配置依赖库到目标系统即可。
binaries are built and put in the bin folder from where you ran the build script. you can add a reference to ld_library_path to the library:
$ export ld_library_path=`pwd`/bin/usr/local/lib:$ld_library_path
执行上述命令,配置类库目标到环境变量(上述命令为临时环境变量配置,仅当前shell有效)
配置全局环境变量的方法:
vi /etc/profile
在文件的最后一行,增加环境变量ld_library_path的配置
保存退出后,执行source /etc/profile 刷新环境变量
注:vi相关操作,请自行百度或必应。
将测试验证程序中的rialport类更换为rialportstream类库(方法、属性基本兼容),进行适当的调整,在windows系统上编译运行,通过。
重新发布linux系统运行版本,进行linux系统部署。
采用普通用户pi登录
如环境变量未有效配置,串口类无法正常执行,程序执行到串口方法调用处停止。
按ctrl+c终止程序。
配置好串口类库所需环境变量,重新运行程序,程序正常运行。
如下图,程序启动,列举出系统有效串口,如下图所示:
由于pi用户帐户权限原因,程序只显示了/dev/ttysac0一个串口,此串口为系统调试终端输出串口。
切换到系统超级用户
su root
根据提示输入密码:fa
切换到程序目录,执行测试程序 ./publish/helloarm,出现如下界面:
在超级用户下,程序列举出了5个串口。
通过操作命令,打开指定的串口,开启接收事件及定时周期发送数据,连接电脑串口(目前大部分电脑已不再提供串口,本实验通过usb转串口模块进行连接),通过pc端的串口工具软件同linux迷你pc主机进行通讯,收发通讯正常。
在root用户下,配置/etc/rc.local文件,将程序添加到系统开机运行
vi /etc/rc.local
在exit 0之前增加一行
/home/pi/publish/helloarm
保存退出,重启系统
reboot
重启系统后,调试串口终端界面中,可以看到程序运行的输出信息,至此,程序配置完成,开机自动运行成功。
.net core为微软推出的跨平台托管程序框架,具备在非windows系统部署运行的能力,但在实际应用中,不能过于想当然,以为支持跨平台就万事大吉,以为凡是.net程序就可以顺利移植为.net core跨平台程序,在实际应用中,需要小心求证,以避免掉进计划时间过于理想的大坑(本实验耗费的时间,远超出计划时间呵。串口类库问题耗费了不少时间,对linux系统相关操作的熟悉,也耗费了较多时间)。
本文中,验证程序是以指定目标平台,无环境依赖方式进行的发布部署,.net core程序也支持以跨平台方式发布部署,但相关目标平台需安装.net core运行时以及相关依赖,微软官方已有详细的说明文档,本文不再赘述。
注:本实验中,使用了两种硬件设备,故截图有所不同,但系统相同,不影响实验效果和结论。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。
本文发布于:2023-04-04 15:13:24,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/30b77ec7fc164ee1ae3d08f2b9471e8d.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:.Net Core跨平台应用开发串口篇HelloArm.doc
本文 PDF 下载地址:.Net Core跨平台应用开发串口篇HelloArm.pdf
留言与评论(共有 0 条评论) |