边缘计算机EC300系列
用户手册
(适用于IEOS V2.0.0及以上版本)
Version 1.2,2024年4月
本手册中描述的软件是根据许可协议提供的,只能按照该协议的条款使用。
版权声明
© 2023 映翰通网络 保留所有权利。
商标
InHand标志是映翰通网络的注册商标。
本手册中的所有其他商标或注册商标属于其各自的制造商。
免责声明
本公司保留对此手册更改的权利,产品后续相关变更时,恕不另行通知。对于任何因安装、使用不当而导致的直接、间接、有意或无意的损坏及隐患概不负责。
本用户手册适用于基于Arm架构的边缘计算机EC300,并涵盖整套适用于所有支持型号的说明。在参考这些章节之前,请确认您计算机型号的硬件规格是否支持所涵盖的功能/设置。
在本章中,我们将介绍基于Arm架构的边缘计算机EC300的外部接口说明。
下面的章节描述了外部连接器和引脚分配的应用。
这是用于以太网连接的双 RJ45 连接器
EC300有2个RJ45以太网口,支持10M/100M自适应速率。
黄灯:LINK指示灯,对端设备是1000M接口时长亮,对端设备是10/100M接口时长灭。
绿灯:ACT灯,当有数据时闪烁
EC300最多支持四路串口:两路标配串口和两路可扩展串口。
COM1(标配):RS-232 / RS-485 (RX1 TX1 / A1 B1),在同一时刻,你只能选择接入RS-232或者RS-485,他们不能同时接入工作。
COM2(标配):RS-485(A2 B2)
COM3(扩展):RS232 / RS485(扩展接口PIN1 扩展接口PIN2)
COM4(扩展):RS232 / RS485(扩展接口PIN5 扩展接口PIN6)
EC300具有3路CAN总线接口,支持CAN 2.0A/B标准。它兼容CAN FD,最高速率可达5Mbps。
CAN1:扩展接口PIN1 扩展接口PIN2
CAN2:扩展接口PIN5 扩展接口PIN6
CAN3:扩展接口PIN9 扩展接口PIN10
Parameter |
Description |
Min |
Type |
Max |
Unit |
Vds |
Drain source voltage |
|
|
48 |
V |
VIN Low |
Maximal input voltage recongnized as LOW |
|
|
3 |
V |
VIN High |
Minimal input voltage recognized as HIGH |
10 |
|
30 |
V |
EC300提供一个 USB 2.0 Host 接口。
EC300 有8个LED灯,分别对电源及系统运行状态进行指示。
当系统正常启动后,STATUS闪烁,如果系统启动阶段发生异常导致系统启动失败;或者恢复出厂操作尚未完成时,STATUS长灭。 |
||
EC300提供API接口,用户可以调用API接口检测可编程按键的状态,然后实现自己的按键逻辑。
EC300支持9~48V直流输入
EC300支持2个SIM卡插槽,SIM卡需要在断电状态下安装,将SIM卡按压插入卡槽即可。
EC300有一个MircoSD卡的卡槽,SD不支持热插拔,需要在断电情况下插拔。
有一个复位按钮用于系统恢复出厂。参考《恢复出厂设置》进行操作。
EC300共有5个天线接口,不同型号标配的天线数量不同,将天线拧入相应的天线接口完成天线安装。
4G LTE主天线/5G天线 |
|
4G LTE分集接收天线/5G天线 |
|
EC300可以支持接口扩展,选型说明详见产品规格书,目前已经支持的扩展模块如下:
扩展模块 |
功能 |
NAAD |
2x 4-20mA模拟量输入+4x DI+4x DO |
N44C |
2x RS-485+1x CAN FD |
N4CC |
1x RS-485+2x CAN FD |
N44D |
2x RS-485+4x DI+4x DO |
— |
NONE |
PIN | 扩展模块 | |||
NAAD | N44C | N4CC | N44D | |
接口定义 | ||||
1 | AIN1+ | A_485_A | A_485_A | A_485_A |
2 | - | A_485_B | A_485_B | A_485_B |
3 | AIN1- | - | - | - |
4 | GND | GND | GND | GND |
5 | AIN2+ | B_485_A | CAN2_H | B_485_A |
6 | - | B_485_B | CAN2_L | B_485_B |
7 | AIN2- | - | - | - |
8 | GND | GND | GND | GND |
9 | - | CAN3_H | CAN3_H | - |
10 | - | CAN3_L | CAN3_L | - |
11 | DO0 | - | - | DO0 |
12 | DO1 | - | - | DO1 |
13 | DO2 | - | - | DO2 |
14 | DO3 | - | - | DO3 |
15 | DI0 | - | - | DI0 |
16 | DI1 | - | - | DI1 |
17 | DI2 | - | - | DI2 |
18 | DI3 | - | - | DI3 |
19 | DI_COM | - | - | DI_COM |
20 | GND | - | - | GND |
在本章中,我们将介绍基于Arm结构的边缘计算机EC300的基础配置。
您需要一台计算机,用于连接到EC300并登录到命令行界面。可以通过以太网网线的方式连接。
出厂默认的用户名和密码:
Username: edge
Password: security@edge
EC300设备出厂默认创建了root,但是登录被禁用。如果需要使用root用户,请手动修改系统配置,输入sudo -s 切换至root用户。用户edge在sudo组中,所以您可以在edge用户下使用sudo来执行系统级命令。有关其他细节,请参阅第5章中的sudo机制部分。
提示
当出现command not found时,输入sudo -s切换至root用户或使用sudo命令来操作。
注意
出于安全考虑,我们建议您禁用默认的用户账户,并创建您自己的用户帐户。
EC300支持通过以太网的SSH连接。使用以下默认IP 地址连接到EC300。
提示
这些步骤适用于您在 Linux PC上连接到EC300。请不要将这些步骤应用于EC300设备本身。在您运行ssh命令之前,请确保将PC的以太网口IP地址配置在特定范围内。ETH1:192.168.3.0/24,ETH2:192.168.4.0/24。
在 Linux PC上使用 ssh 命令访问EC300的ETH1 端口。
输入yes继续完成连接。
当界面出现终端提示符edge@edge-computer:~$,可输入shell命令时,连接成功。
提示
这些步骤适用于您在Windows PC上连接EC300。请不要将这些步骤应用于EC300设备本身。
请在您的Windows PC机上做出如下步骤
点击链接http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html,下载PuTTY(免费的软件),在Windows环境下以SSH命令的方式来建立与边缘计算机EC300的连接。下图是使用SSH连接的示例:
您可以使用sudo -s的命令来切换到root用户。出于安全考虑,不要在root权限下操作所有的命令。
提示
点击链接获取更多关于sudo命令的信息。
注意
您可能会在非root权限下使用一些管道或者重定向行为的时候得到”permission denied“的提示,此时您必须使用'sudo su -c'来取代'>','<','>>','<<','etc'等命令,需要包含完整命令的单引号。
您可以使用useradd和userdel命令来创建和删除用户的账户。请务必在主界面使用这些命令来设置该账户的相关访问权限。以下是如何在sudo组中创建test1的示例 (test1用户的默认登陆环境是bash,其主目录是/home/test1)
修改test1的密码,用passwd命令,输入新密码然后重复输入新密码以确认更改
如果要删除用户test1,请使用命令userdel
注意
在禁用默认帐户之前,应首先创建一个用户帐户
使用passwd命令来锁定默认用户账户,使edge用户无法登录
对edge用户进行解除锁定
EC300基于debian 11系统,因此可以使用Linux原生的命令进行网络管理和系统管理;为了便于用户配置,映翰通开发了一套IEOS系统程序,提供web界面,用户可以方便的通过web进行网络管理和系统管理,但需要注意的是,当启用IEOS功能后,IEOS会接管网络管理和系统管理,此时通过Linux原生命令进行网络管理和系统管理可能会失效;设备出厂默认启用IEOS,如果用户需要基于Linux原生的命令行进行网络管理和系统管理,需要先关闭IEOS。
IEOS是映翰通自研的一套运行在Linux系统上的网络管理和系统管理程序,IEOS提供web界面,用户可以通过web进行以太网口ip地址,蜂窝拨号,Wi-Fi Station,DHCP Client/Server,静态路由,防火墙等网络配置;也可以对系统时间,时区,固件升级和系统重启等进行操作;另外IEOS还支持对接映翰通的设备管理平台DeviceLive,用户可以通过DeviceLive平台对EC300设备进行远程监控和管理。
IEOS采用状态和配置分离的设计方案,分为网络管理,系统管理和状态三大功能板块。网络管理菜单和系统管理菜单下只能进行网络和系统的相关配置,状态信息需要统一到状态页面查看。
重要说明:使用IEOS程序管理网络配置和系统配置的时候,如果同时使用Linux原生命令,二者可能会相互影响,导致异常的运行状态。建议IEOS支持的配置都通过IEOS web来实现管理,IEOS不支持的配置,比如VPN,可以结合Linux原生命令一起实现配置目标。
考虑到用户的程序可能会需要使用HTTP/HTTPS标准端口号80/443,IEOS使用9100端口号做为HTTPS连接的端口,不支持通过HTTP访问;当用户使用HTTP访问web的时候,会自动跳转到通过HTTPS。本文档以通过eth2的默认地址192.168.4.100为例来进行说明。
登陆地址:https://192.168.4.100:9100
初始登陆账号:adm
初始登陆密码:123456
重要说明:IEOS程序启用时,会预留一些端口号供内部通信使用,预留端口号范围9100 ~ 9200,启用IEOS后,客户的程序应该避开使用这些端口号,否则可能会产生冲突导致功能异常。
给eth1接口配置静态IP地址
给eth1接口配置DHCP Client
在eth1接口上启动dhcp server功能,给eth1的下挂设备分配地址
DHCP Server配置参数说明:
Enable DHCP Server:DHCP Server功能的开关
Starting Address:DHCP Server地址池起始基址,网段 + 起始地址 = 地址池的起始ip地址。在截图中,eth1的网段是192.168.3.0/24,基址是1,则地址池的起始地址是192.168.3.1/24.
Max Address Number:地址池中的最大地址数量.
Lease period:租期时间
蜂窝网参数说明:
Enabled: 蜂窝功能的开关;默认是开启的状态。
Profiles:拨号参数集,用于专网卡拨号时配置APN,用户名,密码以及认证方式等信息。如果不是专网卡,通常不需要修改这里的配置。拨号参数集最多可以添加10条记录。
Network Mode:蜂窝的网络制式,可以选择3G,4G等相关网络制式,比如LTE,WCDMA等。如果不清楚选哪种网络制式,则选择自动;程序会自动选择一个最合适的网络制式。默认值是自动。
Enable Default Route:启用添加默认路由功能,开启后,当拨号成功后,会添加一条蜂窝口的默认路由。默认是开启的。
Metric:蜂窝口默认路由的度量值,当蜂窝口,Wi-Fi和以太网口都配置了默认路由的时候,度量值最小的生效。
Dual SIM Enabled:启用双卡功能。EC300为了提高网络的可靠性,支持双卡单拨。设备上需要插入2张sim卡,开启该功能后,如果sim1卡因为欠费导致拨号失败,会自动切换到sim2卡进行拨号。默认是关闭的。
Main SIM:主sim卡,拨号时会优先使用选中的sim卡进行拨号,拨号失败达到一定次数时,在切换到另外一张sim卡进行拨号,默认先使用sim1进行拨号。
Max Number of Dials: 开启双卡单拨功能后,当前拨号sim卡拨号达到指定次数,切换到另外一张sim卡进行拨号。
APN Profile: sim卡选用的拨号参数集,默认值是自动。通常专网卡通常需要配置拨号参数集,并在此处选择拨号参数集的Index。
PIN Code:sim卡的PIN码。
无线蜂窝网络比较复杂,有些时候会出现拨号假连接的情况,即拨号状态是成功的,但却ping不通目标地址;发生这些状况的时候,重新拨号一次就可以恢复正常。IEOS蜂窝拨号支持ICMP探测以发现假连接。建议使用蜂窝联网的客户开启ICMP探测,这样出现假连接的时候也可以快速恢复。
ICMP探测参数:
ICMP Detection Server Probes:ICMP探测地址;可以配置2个探测地址,只要有1个地址探测成功,则说明蜂窝没有出现假连接。2个地址都没有配置的时候,ICMP探测功能处于关闭状态。
Detection Interval:间隔多久进行一次ICMP探测。
Detection Timeout:ICMP探测超时时间,等待多久没有收到探测响应报文,则认为此次探测失败
Detection Max Retries:最大探测次数;当探测失败达到这个值的时候,触发重新拨号。取值范围[1,5]
Detection Strict:是否开启严格探测。关闭严格探测时,探测程序在每个探测周期会检测蜂窝接口接收的报文是否发生变化,如果有变化,说明蜂窝网络是通的,则不会发送ICMP报文进行探测,这样可以节省一些流量;如果开启探测,则无论蜂窝接口接收报文的数量是否发生变化,都会周期性的发送ICMP探测报文。默认是关闭的。
高级配置中是一些不常用的设置选项。
Debug Mode enabled:是否启用debug功能,开启后,日志中会增加一些拨号相关的调试信息,默认关闭。
Enable Infinitely Redial:开启无限重拨。某些情况下,拨号会处于异常状态,通过重启系统可以恢复正常;默认无限重拨是关闭的,当拨号失败一定次数后,会重启系统尝试恢复。由于拨号默认是开启的,有些客户在不插sim卡的情况下,拨号失败,系统会重启,针对这种情况,可以开启无限重拨;这样无论拨号失败多少次,系统都不会重启。
Dial Interval:拨号间隔;但某次拨号失败时,进行下一次拨号之前等待的时间。
Signal Query Interval:信号查询间隔。信号不好时,可能会产生假连接的问题;这时重新拨号有一定概率可以解决假连接的问题。拨号程序会定期检测信号强度,这里配置的是信号检测周期。
Enable Wi-Fi:使能开关;默认关闭
Client SSID:需要连接的ssid,可以手动输入;也可以通过扫描按钮获取附近可连的ssid
Enable Default Route:是否启用添加默认路由功能,开启后,当wifi连接成功后,会添加一条wlan口的默认路由。默认是开启的。
Metric:wifi口默认路由的度量值,当蜂窝口,Wi-Fi和以太网口都配置了默认路由的时候,度量值最小的生效。
Auth Method:认证方式,支持无认证,WPA-PSK,WPA2-PSK,WPA-PSK/WPA2-PSK Mixed
Encrypt Mode:加密方式;支持CCMP,TKIP,TKIP和CCMP
WPA/WPA2 PSK Key:密钥信息
这里配置的是以太网的静态路由,当同时配置了以太网,蜂窝,wifi的默认路由时,metric值最小的那一条默认路由生效。需要保证默认路由的Metric值是不同的。
静态路由配置参数:
Interface:静态路由的出接口
Target:目标网络
Netmask:目标网络掩码
Gateway:下一跳地址
Metric:静态路由的度量值
目前只支持使用iptables命令进行配置。
DNS Servers:DNS Server地址,最多支持配置4个
Domain name hijacking:域名劫持功能,可以实现IP地址和域名之间的绑定。
网络诊断支持ping,traceroute和nslookup功能。
云管理
Enabled: 对接DeviceLive平台的使能开关; DeviceLive是映翰通设备的远程监控和管理平台;
Cloud Server:DeviceLive平台有2个地址;一个是国内平台的地址,另外一个是海外平台地址;这里选择连接哪个平台。
时区和NTP client
最多可以配置10个NTP Server地址,程序周期性的依次向每个服务器地址发送同步请求,同步成功后,将系统时间写入RTC,并不再继续向后面的NTP服务器发送同步请求。
除了使用NTP同步时间,在Device Info状态页面有一个同步按钮可以手动同步时间,但只有当设备时间和本地时间(访问设备所使用的电脑的时间)相差超过3s时,才会显示这个同步按钮。
这里支持配置的导入,导出以及恢复出厂。
这个页面有重启系统和重置系统2个功能。重置系统需要慎重使用,重置系统功能会将系统的配置状态和文件系统状态恢复到和出厂时一致,也就是说用户安装的软件也会被清除。
设备信息状态页面显示主机名,设备型号,序列号,固件版本,内核版本,文件系统版本以及CPU,内存和磁盘空间的使用概况。
蜂窝拨号状态页面显示当前拨号使用的sim卡,IMIE,IMSI,ICCID,信号强度,以及拨号获取的IP地址,DNS等信息。
Wi-Fi状态页面显示Wi-Fi连接成功后获取的IP地址,网关以及DNS等信息。
DHCP Server状态页面显示设备做为DHCP Server,分配出去的IP地址,客户端主机名,客户端主机mac以及过期时间。
路由状态页面显示IPv4直连路由,静态路由以及路由邻居等信息。
防火墙状态信息显示过滤规则,IP地址映射规则等信息。
日志页面可以查看系统日志,用户日志以及设置查看的日志等级,包括Error,Info,Debug等级别。日志也可以下载到本地。
使用Linux命令行进行网络配置和系统配置的时候,首先需要关闭IEOS程序。IEOS是通过systemctl来管理的,
关闭IEOS的方式如下:
systemctl stop ieos_daemon
这种关闭只针对本次启动生效,系统重启后,IEOS程序依然会启动,禁止IEOS程序开机启动的方式如下:
systemctl disable ieos_daemon
重要说明:关闭IEOS之后,拨号,Wi-Fi等无线联网功能需要用户基于Linux原生命令来实现,而且也无法实现对接DeviceLive平台对设备进行远程管理。
如果要为EC300设置静态IP地址,通过命令 vim /etc/network/interfaces.d/eth1或 vim /etc/network/interfaces.d/eth2修改对应的网络配置文件来对以太网接口的默认网关,地址,网络以及子网掩码进行设置。这里以给eth2口设置静态IP来举例说明:
修改接口IP配置后,执行/etc/init.d/networking restart,重启网络服务,使配置生效。
如果要为EC300设置动态IP地址,通过命令vim /etc/network/interfaces.d/eth1或 vim /etc/network/interfaces.d/eth2修改对应的网络配置文件,在inet后设置为DHCP将自动获取IP地址。
这里以给eth1口设置动态IP来举例说明。
修改接口IP配置后,执行/etc/init.d/networking restart,重启网络服务,使配置生效。
要检查EC300的计算机固件版本,请键入:
要确定可用驱动器空间的量,请使用带有-h选项的df命令。系统将返回按文件系统分解的驱动器空间量。EC300产品,用户可用的磁盘分区是/dev/mmcblk0p8。下面是一个示例:
EC300有两个时间设置。一个是系统时间,另一个是由EC300的硬件所保持的RTC(实时时钟)时间。使用date命令来查询当前的系统时间或设置一个新的系统时间。使用hwclock命令查询当前的RTC时间或设置一个新的RTC时间。
使用命令date MMDDhhmmYYYY来设置系统时间:
MM: 月
DD: 日
hh: 时
mm: 分
YYYY: 年
使用以下命令可以将RTC时间设置为系统时间
点击以下的链接来获取更多有关日期和时间的详细信息:
https://www.debian.org/doc/manuals/system-administrator/ch-sysadmin-time.html
https://wiki.debian.org/DateTime
有两种方法可以配置EC300的时区。一个是使用命令tzselect。另一个是使用/etc/localtime文件。
当键入tzselect命令后,会进入到选择地区的界面先选择大致的区域(按大洲大洋划分)输入大洲或大洋前面的数字
再选择该大洲或大洋下的国家
按照以上步骤获取到中国时区关键字Asia/Shanghai,执行以下命令设置时区
本地时区存储在/etc/localtime中,如果没有为TZ环境变量设置值,则被GNU库用于C(glibc)。此文件或者是/usr/share/zoneinfo/file的副本,或者是指向它的符号链接。若EC300无法找到/usr/share/zoneinfo/文件,请从该网站上下载您所需要的时区信息文件(https://www.iana.org/time-zones),并在EC300中重新链接到本地时间文件。
注意
成功下载所需要的时区信息文件后,进行解压,之后使用zic命令编译生成对应的二进制文件,生成的时区文件为“/usr/share/zoneinfo/自定义时区文件名”。
在本章中,我们将介绍基于Arm结构的边缘计算机EC300的外设接口的高级配置。
本章包括以下内容:
EC300有4个串口,一路串口支持RS485,三路串口支持RS-232或RS-485模式。
COM1对应的设备节点是/dev/ttyS4
COM2对应的设备节点是/dev/ttyS5
COM3对应的设备节点是/dev/ttyS6
COM4对应的设备节点是/dev/ttyS8
用stty命令查看和设置串口
通过键入sudo stty --help查看详细命令内容:
注意
关于stty命令的详细信息可在以下链接中获得
http://www.gnu.org/software/coreutils/manual/coreutils.html
EC300提供一个USB 2.0 Host接口,主要用于扩展存储设备
EC300支持USB存储设备热插拔。
注意
在断开USB大容量存储设备之前,请记住输入sync同步命令,以防止数据丢失。当您断开存储设备的连接时,请从挂载目录下退出。
EC300支持micro SD存储卡不支持热插拔。挂载参考https://www.man7.org/linux/man-pages/man8/mount.8.html
EC300的三路CAN端口支持 CAN总线。
默认情况下,CAN端口将被初始化。如果需要任何其他配置,请使用ip链接命令检查CAN设备。要检查CAN设备的状态,请使用ip链接命令:
要配置CAN设备,请使用ip link set can* down来先关闭设备
其中can*从can1,can2或can3中选择。
然后配置比特率(以下是50k比特率示例):
最后重新开启设备
EC300支持4路IO输入和4路IO输出。
读取DI状态可以使用cat "设备描述文件";
控制DO状态可以在root用户下使用echo 1 > "设备描述文件"或echo 0 > "设备描述文件"
EC300最多支持两路AIN模拟电流信号接入,输入范围4 - 20mA,采用TI TLA2022 12位ADC,采样率1.6KHz,分辨率16.6uA,精度1%,硬件连接对应2.3.15章节扩展接口。
端口号 | 设备描述文件 |
AIN1 | /dev/ain1 |
AIN2 | /dev/ain2 |
读取AIN电流值可以使用cat "设备描述文件";
返回值表示当前通道电流值,单位微安(uA)。
在本章中,我们将介绍基于ARM结构的边缘计算机EC300的安全机制。
在EC300中,为了获得更好的安全性,根用户被禁止使用。Sudo是一个程序,让系统管理员允许被同意的用户作为根用户或其他用户执行一些命令。最基础的准则是给予尽可能少的特权完成工作。使用sudo比使用root身份的会话打开更安全,原因有很多,包括:
• 不用知道root密码(sudo会提示当前用户的密码),可授予普通用户特权
• 通过sudo运行需要特权的命令很容易,其余时间,都作为无特权用户工作,从而降低由于错误操作可能造成的损害。
Netfileter/iptables (以下简称iptables)是nuix/linux 系统自带的优秀且完全免费的基于包过滤的防火墙工具、它的功能十分强大、使用非常灵活、可以对流入、流出及流经服务器的数据包进行精细的控制。
TPM代表“Trusted Platform Module”(可信平台模块),它是一种硬件安全模块,旨在提供计算机系统的安全和加密功能。它是一个安全微控制器,可以在计算机系统中嵌入或作为独立硬件设备出售。它包含一个加密协处理器,用于存储加密密钥、数字证书和其他安全数据,以及支持多种加密算法和安全协议。在EC300上,已经集成了标准的TPM2协议栈和TPM2工具供用户使用。
在本章中,我们将介绍基于Arm结构的边缘计算机EC300如何恢复出厂设置及更新。
本章包括以下内容:
有两种方法可以恢复出厂设置:
EC300提供了一个JSON格式的设备信息描述文件,需要操作IO,LED,串口等外设的客户,可以通过查询设备描述信息文件获取这些外设的设备节点信息。
设备描述信息文件路径:/tmp/ieos/etc/system_info.json, 内容如下:
{
"device_info": {
"model_info": {
"model": "EC312",
"pn": "H-LQA3-LC4D",
"sn": "CL3124050000001",
"oem": "inhand",
"features": ";std;cell-LQA3;wlan;"
},
"software_info": {
"boot_loader": "V1.0.2",
"kernel": "5.10.168",
"version": "V1.0.1-beta1",
"os": "Debian GNU/Linux 11 (bullseye)"
},
"hardware_info": {
"arch": "armv8",
"soc": "AM6231",
"interface": {
"eth": [
{
"iface_name": "eth1",
"iface_mac": "00:08:5f:17:04:00"
},
{
"iface_name": "eth2",
"iface_mac": "00:18:5f:17:04:02"
}
],
"wlan": [
{
"iface_name": "wlan0",
"iface_mac": "f4:3c:3b:ca:e9:36"
},
{
"iface_name": "wlan1",
"iface_mac": "f6:3c:3b:ca:e9:36"
}
]
},
"gpio": [
{
"gpio_name": "cellular_power",
"dev_node": "/sys/class/gpio/gpio401"
},
{
"gpio_name": "sim_switch",
"dev_node": "/sys/class/gpio/gpio405"
}
],
"user_key": [
{
"user_key_name": "user1",
"dev_node": "/dev/input/event2"
}
],
"uart": [
{
"uart_name": "com1",
"dev_node": "/dev/ttyS4"
},
{
"uart_name": "com2",
"dev_node": "/dev/ttyS5"
}
],
"led": [
{
"led_name": "user1",
"dev_node": "/sys/class/leds/user1"
},
{
"led_name": "user2",
"dev_node": "/sys/class/leds/user2"
},
{
"led_name": "user3",
"dev_node": "/sys/class/leds/user3"
},
{
"led_name": "user4",
"dev_node": "/sys/class/leds/user4"
},
{
"led_name": "cell",
"dev_node": "/sys/class/leds/cell"
},
{
"led_name": "warn",
"dev_node": "/sys/class/leds/warn"
},
{
"led_name": "status",
"dev_node": "/sys/class/leds/status"
}
],
"io": {
"di": [
{
"di_name": "di1",
"dev_node": "/sys/class/gpio/gpio454"
},
{
"di_name": "di2",
"dev_node": "/sys/class/gpio/gpio455"
},
{
"di_name": "di3",
"dev_node": "/sys/class/gpio/gpio456"
},
{
"di_name": "di4",
"dev_node": "/sys/class/gpio/gpio457"
}
],
"do": [
{
"do_name": "do1",
"dev_node": "/sys/class/gpio/gpio323"
},
{
"do_name": "do2",
"dev_node": "/sys/class/gpio/gpio453"
},
{
"do_name": "do3",
"dev_node": "/sys/class/gpio/gpio465"
},
{
"do_name": "do4",
"dev_node": "/sys/class/gpio/gpio461"
}
]
}
}
}
}
目前设备上一共8个IO接口:如设备面板上DI1~DI4为4个输入管脚;DO1~DO4为4个输出管脚。
根据设备描述信息文件/tmp/ieos/etc/system_info.json可以获取到IO设备节点为:
当您需要对IO接口进行编程时,直接操作后台设备节点下面的value值即可(sys/class/gpio/gpioxxx/value)
案例:
当DO1需要输出高电平时,可以直接向sys/class/gpio/gpio323/value写入1
echo 1 > /sys/class/gpio/gpio323/value
当需要查看DI1的电平是,同样可以直接查看sys/class/gpio/gpio454/value的值
cat /sys/class/gpio/gpio454/value
完整shell脚本:
#!/bin/bash
gpio323="/sys/class/gpio/gpio323/value"
gpio453="/sys/class/gpio/gpio453/value"
gpio465="/sys/class/gpio/gpio465/value"
gpio461="/sys/class/gpio/gpio461/value"
# 当DO1需要输出高电平时,可以直接向sys/class/gpio/gpio323/value写入1
if [ -f "$gpio323" ]; then
echo 1 > /sys/class/gpio/gpio323/value
else
echo "no file exit "$gpio323
fi
# 当DO1需要输出低电平时,可以直接向sys/class/gpio/gpio323/value写入1
if [ -f "$gpio323" ]; then
echo 0 > $gpio323
else
echo "no file exit "$gpio323
fi
gpio454="/sys/class/gpio/gpio454/value"
gpio455="/sys/class/gpio/gpio455/value"
gpio456="/sys/class/gpio/gpio456/value"
gpio457="/sys/class/gpio/gpio457/value"
# 当需要查看DI1的电平是,同样可以直接查看sys/class/gpio/gpio454/value的值
if [ -f "$gpio454" ]; then
cat $gpio454
else
echo "no file exit "$gpio454
fi
设备上用户可以使用USER1,USER2,USER3和USER4四个灯进行状态提示,请查看灯签确认灯的位置。
根据设备描述信息文件/tmp/ieos/etc/system_info.json可以获取到LED对应的设备节点为:
user1:/sys/class/leds/user1
user2:/sys/class/leds/user2
user3:/sys/class/leds/user3
user4:/sys/class/leds/user4
/sys/class/leds/user1目录下有一些控制文件用于控制LED的属性和状态:
/sys/class/leds/user1/brightness:该文件用于控制USER1灯的亮或者灭。写入1即是常亮,写入0即是常灭。
/sys/class/leds/user1/trigger:LED灯的触发器,可写入timer表示定时器触发,写入none表示取消触发器。
/sys/class/leds/user1/delay_on:该文件表示led灯亮的时间,以ms为单位。
/sys/class/leds/user1/delay_off:该文件表示led灯灭的时间,以ms为单位。
若配置了trigger为定时触发,则brightness中的值将不再生效,会自动变为0。
将文件路径中user1替换为user2即为控制USER2灯的操作,USER3和USER4同理。
案例:
当需要USER1灯常亮时,将1写入brightness文件
echo 1 > /sys/class/leds/user1/brightness
当需要USER1灯闪烁时,将timer写入trigger文件,通过delay_on和delay_off控制亮和灭的时间
# 开始定时器
echo timer > /sys/class/leds/user1/trigger
# 亮1秒钟
echo 1000 > /sys/class/leds/user1/delay_on
# 灭1秒钟
echo 1000 > /sys/class/leds/user1/delay_off
完整shell脚本:
#!/bin/bash
USER1_BRIGTHNESS="/sys/class/leds/user1/brightness"
USER1_TRIGGER="/sys/class/leds/user1/trigger"
USER1_DELAY_ON="/sys/class/leds/user1/delay_on"
USER1_DELAY_OFF="/sys/class/leds/user1/delay_off"
# 点亮USER1灯
if [ -f "$USER1_BRIGTHNESS" ]; then
echo 1 > $USER1_BRIGTHNESS
else
echo "no file exit "$USER1_BRIGTHNESS
fi
# 设置USER1灯闪烁
if [ -f "$USER1_TRIGGER" ]; then
echo timer > $USER1_TRIGGER
else
echo "no file exit "$USER1_TRIGGER
fi
# 设置USER1灯亮1000ms
if [ -f "$USER1_DELAY_ON" ]; then
echo 1000 > $USER1_DELAY_ON
else
echo "no file exit "$USER1_DELAY_ON
fi
# 设置USER1灯灭1000ms
if [ -f "$USER1_DELAY_OFF" ]; then
echo 1000 > $USER1_DELAY_OFF
else
echo "no file exit "$USER1_DELAY_OFF
fi
# 关闭USER1闪烁
if [ -f "$USER1_TRIGGER" ]; then
echo none > $USER1_TRIGGER
else
echo "no file exit "$USER1_TRIGGER
fi
用户自己的c/c++程序可以通过在开发机器上使用交叉编译工具链进行交叉编译,然后将目标文件上传到EC300设备上执行。
交叉编译工具压缩包:gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.gz
为交叉编译工具链配置环境变量的方法:
以经典的hello world程序为示例进行说明,创建如下目录和文件
mkdir ~/example
touch ~/example/hello.c
touch ~/example/Makefile
~/example/hello.c文件的内容如下:
#include <stdio.h>
int main(void)
{
printf("hello, world!\n");
return 0;
}
~/example/Makefile文件的内容如下:
# 定义目标文件名和源文件名
TARGET := hellworld
DIRS := $(shell find . -maxdepth 3 -type d)
SRCS := $(foreach dir,$(DIRS),$(wildcard $(dir)/*.c))
OBJS := $(SRCS:.c=.o)
CC=aarch64-linux-gnu-gcc
# 定义编译器和编译选项
CFLAGS := -Wall -Wextra -g -Wno-unused-parameter
# 定义默认目标
all: $(TARGET)
# 定义目标文件的依赖关系和编译命令
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $(LIBS) $^ -o $@
# 定义将源文件编译成目标文件的命令
%.o: %.c
$(CC) $(CFLAGS) $(LIBS) -c $< -o $@
# 定义清除临时文件的命令
clean:
rm -f $(TARGET) $(OBJS)
# 声明伪目标 ".PHONY"
.PHONY: all clean
在~/example目录下执行make,生成目标文件helloworld