.Net Core跨平台应用开发串口篇HelloArm

目录
  • 引言
  • 硬件环境
    • 硬件资源特性
    • 支持的系统平台
  • 系统平台
    • .NET Core支持的Linux版本
    • 系统平台选择
  • 连接嵌入式Linux系统
    • 物理连接
    • 串口连接
    • 网络连接
  • .NET Core跨平台验证
    • 验证程序设计
      • 显示系统平台信息
      • 串口资源列举
      • 串口测试
    • 跨平台发布
    • 远程部署
    • Linux环境运行.Net Core程序
  • 第三方串口类库
    • Linux串口类库编译
    • 环境变量配置
    • Linux串口测试
  • 配置程序开机运行
  • 结束语

引言

为了验证采用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等系统,内核驱动源码完全开源,接口丰富。

硬件资源特性

  • CPU: S5P6818, 运行主频1.4GHz
  • 电源管理: 采用一颗ARM® Cortex®-M0单片机做电源管理, 支持动态调压, 软件关机和定时开机等功能
  • 内存: 2GB 32bit DDR3 RAM
  • 存储: 1 x microSD 卡槽
  • 网络: Gbit Ethernet(RTL8211E)
  • Wireless:802.11 b/g/n
  • Bluetooth: 4.0 dual mode
  • 天线: Wi-Fi和蓝牙共用, 板载陶瓷天线, 同时提供IPX接口
  • eMMC: 16GB
  • 视频输入:DVP Camera/MIPI-CSI(双摄像头口)
  • 视频输出:HDMI/LVDS/并行RGB-LCD/MIPI-DSI(四个视频输出接口)
  • 音频:3.5mm耳机座/Via HDMI
  • 麦克风: 板载麦克风
  • USB Host: 4 x USB 2.0 Host , 其中三个是标准A型接口, 另外一个是2.54mm排母
  • Micro USB: 1 x USB 2.0 Client
  • LCD接口: 45pin, 0.5mm间距FPC贴片座,支持全彩TFT LCD (RGB:8-8-8)
  • HDMI: HDMI 1.4a, Type A型口,1080P高清显示
  • DVP Camera接口: 24pin, 0.5mm间距,FPC贴片竖座
  • GPIO扩展接口: 30 Pin2.54mm排母, 包含4个UART, 1路I2C, 1路SPI, 3路PWM,9个GPIO
  • I2S/USB: 2.54mm间距排母
  • 调试串口: 2.54mm间距排针
  • 按键: 电源按键, 复位按键, 启动选择按键各一个
  • LED: 1 x power LED and 1 x system LED
  • CPU温度检测: CPU内部集成温度传感器
  • RTC: 支持RTC, 板上有备份电池接口
  • 散热片螺丝孔:能加螺丝固定的散热片
  • 供电: DC 5V/3A
  • PCB Size:100 x 64mm,八层,沉金工艺
  • 温度工作范围: -40℃ to 80℃

为避免广告嫌宜,不过多对设备进行说明(好象难以避免呵,如有此方面问题,请管理员协助进行和谐呵)

在此给出设备的wiki地址:http://wiki.friendlyarm.com/wiki/index.php/NanoPC-T3_Plus/zh

支持的系统平台

厂家提供的系统映像文件支持以下版本系统

  • lubuntu-desktop-xenial-4.4-armhf(基于ubuntu16.04的LUbuntu桌面版,32位arm系统)
  • friendlycore-xenial-4.4-armhf(基于ubuntu16.04的FriendlyCore系统,32位arm系统)
  • friendlycore-xenial-4.4-arm64(基于ubuntu16.04的FriendlyCore系统,64位arm系统)
  • Android5.1系统

FriendlyCore,是一个没有X-windows环境,基于Ubuntu core构建的系统,使用Qt-Embedded作为图形界面的轻量级系统,兼容Ubuntu系统软件源,非常适合于企业用户用作产品的基础OS。

系统除了保留Ubuntu Core的特性以外,还包括以下特性:

  • 支持电容和电阻触摸屏
  • 支持WiFi连接
  • 支持以太网连接
  • 支持蓝牙,已预装bluez等相关软件包
  • 支持音频播放
  • 支持Qt 5.10.0 EGLES和OpenGL ES1.1/2.0

系统平台

.NET Core支持的Linux版本

https://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 Enterprise 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)
  • openSUSE 42.3 或更高版本 - 64 位(x86_64 或 amd64)
  • SUSE Enterprise Linux (SLES) 12 Service 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闪存。

连接嵌入式Linux系统

FriendlyCore系统默认支持多种连接方式,可通过外接输入、输出设备(键盘/鼠标、显示器)进行连接,也可以通过串口终端进行连接,也支持通过网络,使用ssh终端方式进行连接。

FriendlyCore系统默认配置了两个用户帐户

普通用户:

用户名: pi

密码: pi

Root用户:

用户名: root

密码: fa

系统开机默认会以 pi 用户自动登录,你可以使用 sudo npi-config 命令取消自动登录。

物理连接

NanoPC具有HDMI、TFT显示接口和USB接口,可以直接连接显示器、键盘/鼠标进行操作。

串口连接

NanoPC默认支持调试串口做为终端。

通过USB转TTL串口的串口模块进行连接。默认通讯参数:115200,N,8,1

软件可使用任意串口终端工具,如SecureCRT或Windows系统自带超级终端。

网络连接

可以通SSH工具进行网络连接,通过网络终端的方式访问。(Win10系统自带)

FriendlyCore系统网络配置默认为自动获取IP地址。通过网络连接设备,需要确定设备的IP地址。

初始IP地址可以通在串口终端模式下输入ifconfig命令查看,或通过网络扫描确定。

确定设备的IP地址后,可以通ssh命令进行终端连接

本次实验中,我们设备的IP地址为172.16.93.74,通过如下命令进行网络终端接入:

ssh pi@172.16.93.74

根据提示输入密码后,即可成功登入。

.NET Core跨平台验证

由于后期主要需要使用的程序功能为网络通讯和串口通讯,我们主要针对目标嵌入式linux系统下的网络和串口通讯进行验证。

本次实验中,我们先对串口通讯进行验证。

编写一个netcore2.x的控制台程序,程序实现系统信息显示,串口资源列举,串口选择,串口打开/关闭,串口接收显示和串口定时发送测试数据功能。

验证程序设计

采用SerialPort类进行串口测试功能实现(netcore项目需通过Nuget安装SerailPort库)

实现以下功能:

  • 显示系统平台信息
  • 串口资源列举,
  • 串口选择,
  • 串口打开
  • 串口关闭
  • 串口接收/数据显示
  • 串口定时发送测试数据

程序较为简单,在此贴出部分功能代码:

显示系统平台信息

串口资源列举

串口测试

编译程序,在window下测试程序通过。

跨平台发布

因目标平台为arm64嵌入式linux系统,采用以下方式进行程序发布:

在命令行窗口,切换到项目文件夹,运行如下命令:

dotnetpublish-rlinux-arm64-cRelease

通过以上命令,得到生成的目标平台的发布包,程序文件及相关.netcore运行时依赖均被发布到项目release\netcoreapp2.2\linux-arm64\publish文件夹中。

远程部署

采用scp命令,将发布文件复制到目标机器

在windows(win10)系统中,打开控制台窗口,输入scp命令,命令格式如下:

scp –r d:\ubuntu\publish\ pi@172.16.93.74:/home/pi/.

根据提示输入用户密码,完成文件夹的复制。

在ssh终端窗口,切换到程序文件夹

cd /home/pi/publish

设置程序执行权限:

chmod 777 ./HelloArm # HelloArm为测试程序文件名

输入./ HelloArm运行程序

Linux环境运行.Net Core程序

在普通用户pi中运行程序

程序显示了系统环境信息

由于程序启动后调用了SerialPort.GetPortNames方法,程序未能按预期执行,出现如下信息:

提示信息表明SerialPort类库仅支持Windows系统平台,不支持跨平台。

至此,.net core程序跨平台在linux系统运行成功,但串口类库不支持跨平台。

第三方串口类库

为解决串口类支持问题,查找资料,发现github上有一个开源SerialPortStream类库支持netcore,能够支持Linux系统。

https://github.com/jcurl/SerialPortStream

该类库支持windows系统和Linux系统,但在Linux系统下运行,需要额外编译目标平台支持库并进行相关环境配置。

Linux串口类库编译

You first need to compile the support library libnserial.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/serialportstream.git

$ cd serialportstream/dll/serialunix

$ ./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相关操作,请自行百度或必应。

Linux串口测试

将测试验证程序中的SerialPort类更换为SerialPortStream类库(方法、属性基本兼容),进行适当的调整,在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运行时以及相关依赖,微软官方已有详细的说明文档,本文不再赘述。

注:本实验中,使用了两种硬件设备,故截图有所不同,但系统相同,不影响实验效果和结论。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • .Net Core应用增强型跨平台串口类库CustomSerialPort()详解

    目录 摘要 引言 基础类库的选择 类库的实现 创建跨平台类库 实现机制/条件 .net core跨平台实现 主要代码 创建.net core控制台程序 类库地址 跨平台测试 Windows测试输出界面 ubuntu测试输出界面 源码地址 摘要 在使用SerialPort进行串口协议解析过程中,经常遇到接收单帧协议数据串口接收事件多次触发,协议解析麻烦的问题.针对此情况,基于开源跨平台串口类库SerialPortStrem进行了进一步封装,实现了一种接收超时响应事件机制,简化串口通讯的使用. 引言

  • .NET Core跨平台串口通讯使用SerialPortStream基础类库问题解决

    说明 由于.net core 2.x 中,已经找不到 serialport 库,使用需要使用第三方框架,可以直接在 Nuget 中搜索 SerialPortStream 开源地址https://github.com/jcurl/SerialPortStream 为了方便使用,有人封装把它了起来,在 Nuget 中搜索 flyfire.CustomSerialPort 这是一个增强的自定义串口类,实现协议无关的数据帧完整接收功能,支持跨平台使用,使用 SerialPortStream 基础类库.

  • .NET Core使用flyfire.CustomSerialPort实现Windows/Linux跨平台串口通讯

    1,前言 开发环境:在 Visual Studio 2017,.NET Core 2.x 串口通讯用于设备之间,传递数据,物联网设备中广泛使用串口方式连接通讯,物联网通讯协议 :Modbus 协议 ASCII.RTU.TCP模式是应用层的协议,与通讯方式无关. 笔者现在实现的是 串口通信,实现后,可以在上层加上 Modbus 协议,笔者的另一篇文章即是在串口上实现 Modbus 协议,计算中心向物联网设备发送消息,要求设备响应,传送设备信息.检测状态等. 本文是 串口通讯 的实现. 2,安装虚拟

  • .Net Core跨平台应用开发串口篇HelloArm

    目录 引言 硬件环境 硬件资源特性 支持的系统平台 系统平台 .NET Core支持的Linux版本 系统平台选择 连接嵌入式Linux系统 物理连接 串口连接 网络连接 .NET Core跨平台验证 验证程序设计 显示系统平台信息 串口资源列举 串口测试 跨平台发布 远程部署 Linux环境运行.Net Core程序 第三方串口类库 Linux串口类库编译 环境变量配置 Linux串口测试 配置程序开机运行 结束语 引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应

  • ASP.NET Core快速入门之环境篇

    前言 ASP.NET Core 是一个开源和跨平台的框架,用于构建如 Web 应用.物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序.ASP.NET Core 应用可运行于 .NET Core 和完整的 .NET Framework 之上.它整合了原来ASP.NET中的MVC和WebApi框架,你可以在 Windows.Mac 和 Linux 上跨平台的开发和运行你的 ASP.NET Core 应用. vmware虚拟机安装 vmware哪里下载?360软件管家就可以下载.

  • .NET Core跨平台资源监控工具CZGL.SystemInfo用法

    目录 简介 dotnet tool 体验 CZGL.SystemInfo SystemPlatformInfo ProcessInfo 内存监控 NetworkInfo DiskInfo Linux 直接使用 简介 CZGL.SystemInfo 是一个支持 Windows 和 Linux 等平台的能够获取机器硬件信息.采集机器资源信息.监控进程资源的库. 在不引入额外依赖的情况下,使用 .NET Runtime 本身的 API,或通过计算获得信息,提供高性能的计算方式以及缓存,提高性能,还提供

  • IOS开发网络篇—Socket编程详解

    一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象: 传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议对应于应用层 tcp协议对应于传输层 ip协议对应于网络层 三者本质上没有可比性.  何况HTTP协议是基于TCP连接的. TCP/IP是传输层协议,主要解决数据如何在网络中传输:而HTTP是应用

  • Visual C#.Net 网络程序开发-Socket篇第1/2页

    Visual C#.Net 网络程序开发-Socket篇   作者: 宋华 作者: www.ASPCool.com Microsoft.Net Framework为应用程序访问Internet提供了分层的.可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序..Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要-

  • Java web基础学习之开发环境篇(详解)

    Tomcat + Eclipse添加Java EE插件 因为之前进行Java SE学习已经配置了JDK,安装了Eclipse for Java SE,所以选择了在Eclipse上添加插件的方式来配置Web开发环境 Tomcat是免安装版,直接解压即可: Eclipse中"帮助-安装新软件",work with处选择Mars - http://download.eclipse.org/releases/mars(注意对应自己版本): 选择Web.Java EE那个选项进行安装即可,如果报

  • Spring Boot Web 开发注解篇

    一.spring-boot-starter-web 依赖概述 在 Spring Boot 快速入门中,只要在 pom.xml 加入了 spring-boot-starter-web 依赖,即可快速开发 web 应用.可见,Spring Boot 极大地简化了 Spring 应用从搭建到开发的过程,做到了「开箱即用」的方式.Spring Boot 已经提供很多「开箱即用」的依赖,如上面开发 web 应用使用的 spring-boot-starter-web ,都是以 spring-boot-sta

  • ASP.NET Core快速入门之实战篇

    NO1 留言板(mysql的使用) 演示:http://haojima.net 这个功能很简单.就是对数据库的写入和展示.如果在Windows下,相信大家分分钟都可以搞定.而初次接触.net core + mysql可能需要注意些细节. 首先打开vs2017新建一个asp.net core项目(选Web应用程序),然后nuget 导入Microsoft.EntityFrameworkCore.Tools 1.1.1和MySql.Data.EntityFrameworkCore 8.0.8-dmr

  • ASP.net Core微信平台开发配置Token

    如果先进行微信平台开发,配置Token是第一步.否则往后所有的代码都没办法在平台上跑得动. 但是官方给的源码是PHP的,ASP.net core 配置Token 的版本又少.研究怎么配置Token浪费了我超多时间. 首先登录开发者平台,点击开发者工具--->公众平台测试账号 然后就需要配置我们的接口信息了 先创建一个配置实体 public class WeChatRequestModel { public string signature { get; set; } public string

随机推荐