.Net Core应用程序跨平台应用研究-HelloArm(串口篇)

引言

为了验证采用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 [email protected]

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

.NET Core跨平台验证

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

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

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

验证程序设计

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

实现以下功能:

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

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

显示系统平台信息

串口资源列举

串口测试

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

跨平台发布

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

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

dotnet publish -r linux-arm64 -c Release

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

远程部署

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

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

scp –r d:\ubuntu\publish\ [email protected]:/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 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运行时以及相关依赖,微软官方已有详细的说明文档,本文不再赘述。

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

本文为作者原创,未经许可,请勿转载。

原文地址:https://www.cnblogs.com/flyfire-cn/p/10356991.html

时间: 2024-10-02 06:07:31

.Net Core应用程序跨平台应用研究-HelloArm(串口篇)的相关文章

.Net Core跨平台应用研究-HelloDDNS(动态域名篇)

.Net Core跨平台应用研究-HelloDDNS -玩转DDNS 摘要 为解决自己搭建的内网服务器需要域名而因没有超级用户密码不能开启光猫内置DDNS功能的问题,自己动手,基于.net core,实现动态域名的自助解析更新功能. 起因 最近学习ABP开源项目框架,因测试和展示需求,需要部署基于asp.net core的web应用.手上有一个闲置了两年的35互联基于windows IIS的虚拟主机空间,联系服务商升级支持.net core运行时,增加无托管应用程序池,等了两天,技术支持回复不能

.NET跨平台之旅:探秘 dotnet run 如何运行 .NET Core 应用程序

自从用 dotnet run 成功运行第一个 "Hello world" .NET Core 应用程序后,一直有个好奇心:dotnet run 究竟是如何运行一个 .NET Core 应用程序的? 在 从 ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 与 在Linux上以本地机器码运行 ASP.NET Core 站点 之后,这个好奇心被进一步激发,于是“探秘 dotnet run”顺理成章地成为.NET跨平台之旅的下一站. 首先我们了解一下 dotnet 命令是

使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台

使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台. 前面讲解了VSCode开发调试 .NET Core.都只是在windows下运行. .NET Core真正的核心是跨平台,我们现在来了解学习 .NET Core 跨平台. 在windows 下开发.NET Core 应用程序,然后部署到Linux 平台运行. .NET Core RC2版基本上已经完成. https://github.com/dotnet/cli/milestones 可以看到 1.0.0-rc2

生产环境中CentOS7部署NET Core应用程序

NET Core应用程序部署至生产环境中(CentOS7) 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方案,今天

将ASP.NET Core应用程序部署至生产环境中(CentOS7)

阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方案,今天就跟大家分享一下如何将ASP.NET Core应用程序以生产

(转) 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

原文链接: http://www.cnblogs.com/ants/p/5732337.html 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应

部署到Linux使用VS Code 开发.NET Core 应用程序

使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台 使用VS Code 开发.NET Core 应用程序 部署到Linux 跨平台. 前面讲解了VSCode开发调试 .NET Core.都只是在windows下运行. .NET Core真正的核心是跨平台,我们现在来了解学习 .NET Core 跨平台. 在windows 下开发.NET Core 应用程序,然后部署到Linux 平台运行. .NET Core RC2版基本上已经完成. https://github.c

尝试在Linux上部署Asp.net Core应用程序

快两个月没接触.net,倒是天天在用Linux,所以想尝试一下在Linux运行喜欢的.net 应用. 安装CentOS 安装.Net core for Linux 创建Asp.net Core应用程序 安装Nginx 配置Nginx代理 1,安装CentOS系统 这个网上教程太多滤过. 2,安装跨平台的.NET Core SDK for CentOS7 sudo yum update sudo yum install libunwind libicu sudo yum install dotne

将ASP.NET Core应用程序部署至生产环境中(CentOS7)(转)

阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Core SDK for CentOS7. 部署ASP.NET Core应用程序 配置Nginx 配置守护服务(Supervisor) 这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方案,今天就跟大家分享一下如何将ASP.NET Core应用程序以生产