APP下载

基于龙芯1C 的NTP 时间服务器设计与实现

2021-04-30籍明慧裴焕斗王佳宝张川川

电子设计工程 2021年7期
关键词:龙芯内核串口

籍明慧,裴焕斗,庄 杰,王佳宝,张川川

(1.中北大学仪器与电子学院,山西太原 030051;2.山西百信信息技术有限公司,山西太原 030006)

计算机的普遍使用以及网络的快速发展,带来了许多便利的同时,也让使用者对其产生了很强的依赖性,稍有问题将会带来很大的损失。其中,时钟是一个很关键的要素。尤其在工业控制、电力、军事等对时钟要求较高[1-3]的领域,如何确保时间的准确性与同步性是一个值得研究的问题。通常情况下,计算机由实时时钟(RTC)提供实时时间,或者可以理解成为系统提供一个标准时间,对于联网的主机,如有需要,可以通过自动或手动从Internet 时间服务器同步时间。与此同时,由于机器外部环境改变,内部硬件老化损坏等原因,计算机时钟在功能性和可靠度上都是有限的,时钟总会出现问题。因此,对于需要一个精确时钟的计算机,一个标准的时间基准是至关重要的。

NTP(Network Time Protocol)是一个时间同步协议,第一次实现是在1980 年,经过不断发展,已经可以为计算机提供高精度的同步授时服务,局域网内精度已经达到了毫秒级,且在实际部署上较为简单。李培基等[4]对NTP、PTP(Precise Time Protocol)及其他网络时间同步协议进行了分析,介绍了基本概念,比较了各个协议运用的优缺点;陈希等[5]深入分析了NTP 和PTP 的时间同步误差,并给出了优化方法;何承恩等[6]设计了一个跨平台的网络时间同步模块,提高了有时间同步需求的跨平台软件开发效率;王铮等[7]基于AM3352 处理器设计了嵌入式北斗网络时间服务器。这些文献对NTP 时间服务器设计提供了依据。基于此,文中设计了以国产自主北斗卫星导航系统BDS(BeiDou Navigation Satellite System)为时间源,以国产处理器龙芯1C300B 为主控板处理器,嵌入式开源Linux 系统搭载NTP 软件的时间服务器,自主可控、功能丰富且安全可靠。

1 总体思路及相关原理

基于成本、自主可控、精度要求等方面的考虑,采用北斗卫星导航系统与NTP 的软硬件混合同步实现精确授时,有效地避免了纯硬件授时成本太高以及纯软件授时精度不够的问题。通过北斗时钟接收器与授时天线相连采集时钟信号经过处理后通过串口传到主控板,作为校时的时钟源,主控板对时钟信息进行下一步处理,并且在显示屏上显示部分时间内容;与此同时,时间服务器开启NTP 服务,进行相关配置,实现授时服务。总体思路如图1 所示。

图1 总体思路框图

1.1 NTP协议及其原理

网络时间同步协议之中NTP 的应用是最常见的,只要支持网络套接字的计算机系统均可应用NTP 协议[8]。NTP 的目的是在有限的局域网环境中提供安全和可靠的时间同步服务,一般采用C/S模式,客户端借助NTP 协议从服务器获取准确的时间,在校时的同时,NTP 能够通过主机与客户端双向信息传输持续跟踪时间变化并自动进行调节[9-11]。

NTP 校时是通过NTP 报文在客户端与服务端之间的传送时间来确定客户机和服务器之间的时间偏差和网络时延。传输模型如图2 所示。

图2 NTP传输模型

客户端向服务器端发出请求报文,服务器通过消息处理后,返回一个消息包给客户端。其中θ为客户端与服务器端的时间基准差值,δ为网络传输时延。由此可得:

客户机通过计算θ和δ的值即可调整本地的时钟。

1.2 北斗授时原理

北斗卫星导航系统是中国自主建设、独立运行的全球卫星导航系统,是我国国家重大战略基础设施[12],而且BDS 不依赖于GPS,自主可控程度高。

北斗卫星通过高精度原子钟向地面设备发送包含时钟信息报文的方式来实现授时服务,有单、双向两种授时功能[13]。卫星授时就是计算接收机本地时钟与卫星系统时间的偏差,根据偏差进行本地时钟频率的调整[14]。单双向的差别就在于是否对传输数据所产生的时间进行补偿。在实际应用中,可以通过对地面用户设备接收机进行配置,选择需要的授时方式。

2 硬件方案

龙芯1C 芯片是龙芯系列较早的高性价比功能性产品,兼容MIPS 指令集,主频达到了300 MHz,丰富的扩展接口可以使开发者进行灵活的功能设计,且龙芯1C 包含浮点处理单元,为开发者提供了足够的计算能力[15]。

系统总体由北斗时间接收处理模块、处理器模块、电源模块以及显示模块等部分组成。北斗时间接收处理模块实现授时时统UTC 的时间溯源,并进行处理之后通过串口将精确的时钟信息传送给主控制器。主控制器模块以龙芯1C300B 处理器为核心,存储单元包含SDRAM、NAND Flash、SD 卡等;网络模块由10M/100M 以太网控制器和RJ45 网络接口组成;电源模块将外部5 V 电源转换为系统各部分需要的3.3 V 和1.2 V 电压;JTAG 为系统调试接口;晶振电路为系统提供内部时钟信号;显示屏通过串口与主板连接进行时间显示。硬件结构组成如图3 所示。

图3 硬件结构组成

2.1 以太网控制模块电路

系统采用了DM9161C 快速以太网物理层单片收发器,DM9161C 是一个物理层、低功耗和单片10BASE-T/100BASE-TX 收发器,芯片上集成完整物理层收发器和滤波器,不需要外部滤波器就可在以太网操作期间将信号传输。并且提供中断处理功能,在接口功能管理上有着更好的控制。通过具有可屏蔽中断输出能力的MII 管理接口,DM9161C 不仅连接了媒体访问控制(MAC)层,而且确保了高互操作性和灵活性。

其中,T/RXCLK、T/RXD[0:3]引脚分别实现发送/接收数据的功能,COL 和CRS 引脚实现状态指示及检测控制功能,MDIO 和MDC 引脚分别具有管理数据引脚及其时钟的功能。DM9161C 的接口电路如图4 所示。

信号的发送和接收过程,通过DM9161C 和RJ45接口的相应引脚连接实现。RJ45 的电路原理如图5所示。

2.2 电源电路

系统电源部分使用MP1482 同步降压稳压器将5 V 的直流电压转换为系统各部分所必需的3.3 V 与1.2 V 电压。MP1482 在4.75 V 至18 V 的宽输入电压下提供2 A 的连续负载电流。并且在关机模式下,电源电流下降到1 μA,电源的转换效率高达93%。电源电路的实现原理如图6 所示。

图4 DM9161C的接口电路图

图5 RJ45接口电路原理图

2.3 复位电路

复位电路是系统不可缺少的重要组成电路。在该系统中,通过使用MAX811 芯片设计复位电路,来保证系统工作的稳定性。

系统开始工作时,如果接入的电压值低于设置的TH(阈值电压),产生一个复位信号,并保持RESET 引脚为低电平,在VCC 上升到TH 以上后,使其保持至少140 ms 后重置阈值。手动复位功能可以通过控制MR 引脚实现,按下S1 按键后,强制使MR引脚接地变为低电平,产生复位输出信号。复位电路如图7 所示。

图6 电源转换电路原理图

图7 复位电路原理图

2.4 显示模块实现

时间信息用数字、字母就可以完全表示,所以采用RSI1602BNU 串口液晶显示屏进行时间显示,UART-TTL5.0 串行接口,可节约CPU 的IO 资源;另外模块自动初始化1602 显示屏,无需另外开发驱动程序。时间信息从北斗时钟处理器通过串口传送到1C 主控板上,与此同时数据经过处理通过串口传送到显示屏进行显示,流程图如图8 所示。

2.5 硬件系统总结

硬件系统主要包括了北斗时间接收处理模块、主控制器模块、电源模块、显示模块及各个芯片之间的接口电路。硬件设计时充分考虑了电磁干扰、静电防护、散热等方面的影响,对PCB 板进行了多次测试;对系统板的断电、加电以及接口配置进行了功能性测试,搭建了稳定可靠的硬件平台,为软件系统的搭载打好了基础。

图8 显示模块实现流程图

3 软件实现

NTP 时间服务器操作系统采用嵌入式Linux 系统,服务器中部署NTP 服务,系统其他成员与时间服务器相连,使用NTP 协议进行时间同步。下面就系统的制作以及NTP 服务的部署进行介绍。

3.1 编译内核

嵌入式Linux 的系统板资源有限,需要交叉编译调试的方式进行。该设计通过VMware 上安装虚拟机的方式解决编译问题。虚拟机系统使用Ubuntu16.04,Linux 内核使用Linux-3.18。

开启Ubuntu16.04 之后,拷贝内核源码包linux-3.18-loongson.tar.gz,并解压至/Workstation 目录下。

接下来直接使用make 命令进行编译,编译完成后,会自动生成内核文件。

3.2 制作根文件系统

文件系统用于管理存储介质,文件系统实现了系统存储介质和其他资源的交互。该设计使用buildroot 构建根文件系统。

同样与内核编译过程一样,开启Ubuntu16.04,拷贝buildroot 源码包buildroot-2018.02.4.tar.gz,并解压到/Workstation/rootfs/buildroot 目录下,然后进入buildroot-2018.02.4 目录。

运行图形化配置命令:

无特殊要求,按默认配置即可,对于该设计,需要NTP 服务,故勾选NTP 软件选项,如图9 所示。

图9 buildroot配置选项

保存设置退出后执行make 命令,在make 命令执行完成之后,会生成output/images/rootfs.yaffs2img文件,该文件即为可以烧录到主控板中的根文件系统镜像。

3.3 下载并烧写内核和根文件系统

通过TFTP 和控制台软件(串口助手)Putty 来将内核文件和根文件系统镜像下载到系统板上。通过Putty 可进行PMON 配置和控制台操作。

PMON 下载烧写内核和根文件系统操作命令行代码如下:

重启上电之后,系统即可正常运行。

3.4 NTP服务的配置

NTP 服务的配置只需修改配置文件即可完成,使用vi/etc/ntp.conf 命令对配置文件作如图10 修改:

图10 NTP配置文件修改

其中restrict 0.0.0.0 mask 255.255.255.0 nomodify notrap 代表着允许内网中相应网段的其他客户机可以与服务器进行时间同步,nomodify 和notrap 分别代表禁止远程主机修改本地服务器配置和拒绝特殊的ntpd 捕获消息[16]。

这两行命令是将这台服务器定义为对本局域网提供NTP 服务。

4 设计结果及测试

将北斗时钟接收器、授时天线、主控板、显示屏以及客户机按规定信号逻辑连接,上电启动之后,显示屏可正常显示时间数据,且服务器与客户机时间达到了实时同步,结果如图11 所示。

图11 服务器实现实物图

在客户机启动NTP 服务,修改配置文件之后,在终端输入ntpdate-u 192.168.2.100,出现adjust time server 192.168.2.100 offset-0.001062 sec,则表示客户端时间准确同步。

编写shell 脚本,连续运行北斗网络时间服务器24 h,数据采样频率设为3 s 一次,抓取其中800 组数据进行分析。得到了NTP 时间服务器测量精度分析图如图12 所示。

图12 测试结果

测试结果表明,NTP 时间服务器时间误差的均值为0.35 ms。授时标准方差为1.783 μs。由此可见,NTP 时间服务器可稳定进行时间同步服务且时间同步精度达到了毫秒级。

5 结论

该文提出了一种基于龙芯1C 的NTP 时间服务器设计方案,并且对其基本原理以及软硬件实现进行了介绍。在成本损耗、数据处理、授时精度方面具有较好的能力,在时钟源以及服务器硬件设计上采用国产技术,自主可控程度较高,具有较好的安全性。经过测试,服务器时间同步功能稳定且授时精度达到了毫秒级,足以满足诸多信息化网络系统或者局域网系统下时间同步的要求,具有较高的应用价值。

猜你喜欢

龙芯内核串口
基于国产化龙芯的动环数据采集系统
强化『高新』内核 打造农业『硅谷』
浅谈AB PLC串口跟RFID传感器的通讯应用
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
微生物内核 生态型农资
“龙芯之父”胡伟武
数字电源内部数据传输的串口通信方法实现
USB接口的多串口数据并行接收方法探索
基于蓝牙串口适配器的GPS接收机与AutoCAD的实时无线通信