网站建设咨询推荐,网站开发建设好处,wordpress 男孩同志,简易做网站的软件引言为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行#xff0c;针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证研究。硬件环境硬件系统经过对比筛选#xff0c;选用了友善之臂出品的NanoPC-T3 Plus… 引言 为了验证采用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、UbuntuCoreQt等系统内核驱动源码完全开源接口丰富。硬件资源特性CPU: S5P6818, 运行主频1.4GHz电源管理: 采用一颗ARM® Cortex®-M0单片机做电源管理, 支持动态调压, 软件关机和定时开机等功能内存: 2GB 32bit DDR3 RAM存储: 1 x microSD 卡槽网络: Gbit Ethernet(RTL8211E)Wireless802.11 b/g/nBluetooth: 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 ClientLCD接口: 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个GPIOI2S/USB: 2.54mm间距排母调试串口: 2.54mm间距排针按键: 电源按键, 复位按键, 启动选择按键各一个LED: 1 x power LED and 1 x system LEDCPU温度检测: CPU内部集成温度传感器RTC: 支持RTC, 板上有备份电池接口散热片螺丝孔能加螺丝固定的散热片供电: DC 5V/3APCB 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?tabsnetcore2x.NET Core 2.x 将 Linux 视为一个操作系统。 支持的 Linux 分发都对应有一个 Linux 内部版本根据芯片体系结构。 以下 Linux 发行版本/版本支持 NET Core 2.xRed Hat Enterprise Linux 76 - 64 位x86_64 或 amd64CentOS 7 - 64 位x86_64 或 amd64Oracle Linux 7 - 64 位x86_64 或 amd64Fedora 28、27 - 64 位x86_64 或 amd64Debian 964 位arm32、8.7 或更高版本 - 64 位x86_64 或 amd64Ubuntu 18.0464 位arm32、16.04、14.04 - 64 位x86_64 或 amd64Linux Mint 18、17 - 64 位x86_64 或 amd64openSUSE 42.3 或更高版本 - 64 位x86_64 或 amd64SUSE Enterprise Linux (SLES) 12 Service Pack 2 或更高版本 - 64 位x86_64 或 amd64Alpine Linux 3.7 或更高版本 - 64 位x86_64 或 amd64系统平台选择根据.NET Core 2.x对Linux系统的支持选择friendlycore-xenial-4.4-arm64作为系统运行平台。下载厂家提供的系统映像文件对NanoPC-T3/Plus进行系统烧写方法详见WIKI教程.烧写主要步骤1、下载厂家提供的映像文件和烧写工具win32diskimagerwiki中提供了下载链接2、准备一张tf卡格式化为一个分区FAT323、运行win32diskimager软件选择映像文件选择tf卡对应的分区点击写入4、烧写完成5、将tf卡插入卡座按信boot键给控制板上电需外接显示器和键盘、鼠标6、根据屏幕提示将系统安装至eMMC闪存。 连接嵌入式Linux系统FriendlyCore系统默认支持多种连接方式可通过外接输入、输出设备键盘/鼠标、显示器进行连接也可以通过串口终端进行连接也支持通过网络使用ssh终端方式进行连接。FriendlyCore系统默认配置了两个用户帐户普通用户 用户名: pi 密码: piRoot用户 用户名: root 密码: fa系统开机默认会以 pi 用户自动登录你可以使用 sudo npi-config 命令取消自动登录。 物理连接NanoPC具有HDMI、TFT显示接口和USB接口可以直接连接显示器、键盘/鼠标进行操作。 串口连接NanoPC默认支持调试串口做为终端。 通过USB转TTL串口的串口模块进行连接。默认通讯参数115200N,8,1软件可使用任意串口终端工具如SecureCRT或Windows系统自带超级终端。 网络连接可以通SSH工具进行网络连接通过网络终端的方式访问。(Win10系统自带)FriendlyCore系统网络配置默认为自动获取IP地址。通过网络连接设备需要确定设备的IP地址。初始IP地址可以通在串口终端模式下输入ifconfig命令查看或通过网络扫描确定。确定设备的IP地址后可以通ssh命令进行终端连接本次实验中我们设备的IP地址为172.16.93.74,通过如下命令进行网络终端接入ssh pi172.16.93.74根据提示输入密码后即可成功登入。 .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命令将发布文件复制到目标机器在windowswin10系统中打开控制台窗口输入scp命令命令格式如下scp –r d:\ubuntu\publish\ pi172.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, youll need a compiler (e.g. GCC 4.8 or later) and cmake.在目标系统中FriendlyCore安装GCC编译器和cmake 首先确定网络正常连接能够访问互联网需要良好的网络环境。执行如下命令sudo apt-get update 安装更新GCCsudo apt-get install gcc 安装cmakesudo apt-get install cmake 确保gcc和cmake安装正常。可采用命令查看安装情况gcc –versioncmake –versionAfter 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_PATHpwd/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登录如环境变量未有效配置串口类无法正常执行程序执行到串口方法调用处停止。 按CtrlC终止程序。 配置好串口类库所需环境变量重新运行程序程序正常运行。如下图程序启动列举出系统有效串口如下图所示 由于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.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com