海思编译安装ntp服务端
由于工作需求,需要在海思arm平台搭建ntp服务器,在ntp的移植过程中遇到了一些坑,网络上的一些教程都有各种各样的坑,我把自己的操作记录下来。
操作系统: Ubuntu 22.04 LTS
开发板 : hisi3531a
1.说明
网络时间协议Network Time Protocol(NTP) 是一种确保时钟保持准确的方法。如果可以访问互联网,只需安装ntp的客户端软件到互联网上的公共ntp服务器自动修正时间即可.具体说明可参考百科NTP.
2.准备工作
由于ntp在依赖openssl库和libevent库,在交叉编译ntp之前需要先交叉编译openssl.
libevent库包含在ntp源码中,没有必要单独下载安装。
注意:新版本的ntp依赖1.1.1版本的openssl!!!
ntp下载地址
3.开始编译
3.1解压
mkdir -p ~/work
cd ~/work
tar -xvf ntp-dev-4.3.99.tar.gz
tar -xvf openssl-1.1.1b.tar.gz
3.2 交叉编译openssl
$ cd openssl-1.1.1b/
$ ./config no-asm -shared --prefix=$(pwd)/install no-async \
--cross-compile-prefix=arm-hisiv300-linux-uclibcgnueabi-
上述步骤只是生成了Makefile,还没有设置,需要手动设置.
用编辑器打开Makefile,搜索"-m64",总共找到两处,删除之
make -j4
make install
一段时间后就会完成.此时在当前目录下就会产生一个 install 文件夹,编译出来的产物全部在里面了.
openssl交叉编译完成.
3.3 交叉编译ntp
cd ../ntp-dev-4.3.99
把openssl的头文件拷过来,也可以在configure时用--with-openssl-incdir + =../openssl-1.1.1b/install/include
指定openssl的头文件
cp -r ../openssl-1.1.1b/install/include/* include/
配置:
1.一定要有–enable-local-libevent 选项,不然会报头文件和链接错误。
2.openss库说明:LDFLAGS=-L$(pwd)/../openssl-1.1.1b/install/lib
指定openssl的库文件也可以通过--with-openssl-libdir=$(pwd)/../openssl-1.1.1b/install/lib
指定
3.网上很多教程上的CC=arm-linux-gcc可以不用,因为host选项已经指定环境了
./configure --prefix=$(pwd)/install \
--exec-prefix=$(pwd)/install \
--host=arm-hisiv300-linux-uclibcgnueabi \
-with-yielding-select=yes \
LDFLAGS=-L$(pwd)/../openssl-1.1.1b/install/lib \
--without-sntp \
--enable-local-libevent
编译:
make -j4
make install
耐心等待一段时间后,编译完成,编译的产物在生成的 install/ 文件夹里
3.4 遇到问题
1.work_thread.c:45:57: error: missing binary operator before token "(" 45 | #if defined(PTHREAD_STACK_MIN) && THREAD_MINSTACKSIZE < PTHREAD_STACK_MIN
交叉编译工具设置错误。
2.致命错误: openssl/bn.h:没有那个文件或目录
openssl的头文件没有拷贝过来,运行cp -r ../openssl-1.1.1b/install/include/* include/
3.main.c:3:25: 致命错误: event2/util.h:没有那个文件或目录 #include <event2/util.h>
在configure的时候没有开启libevent模块,在configure时加上 --enable-local-libevent
4测试方法
4.1服务端
1.使用配置文件ntp.conf
#restrict default nomodify notrap noquery
restrict 127.0.0.1
restrict 192.168.120.0 mask 255.255.255.0 nomodify notrap
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 5
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
keys /etc/ntp/keys
2.服务端运行:./ntpd -c ./ntp.conf
4.2客户端
1.15分钟后运行
sudo ntpdate 192.168.120.10
正常返回
19 Sep 12:01:00 ntpdate[25526]: step time server 192.168.120.10 offset -266937453.381658 sec
测试成功
如果出现 no server suitable for synchronization found
先检查配置文件的ip是否设置正确。再过几分钟后再试,ntpd服务端启动后初始化要几分钟的。