linux ntp移植,ntp的移植心得分享

最近做了一下ntp的移植,把心得和大家共享一下,虽然网上有很多关于ntp的移植文件,但是都很简单,好像没有遇到任何的问题,可是我却遇到了不少啊。

56501e0067f0ba62fcaa81b9e4775d48.png

第一步:设定交叉编译器的路径

初学者经常漏掉的一步,万一没设定就是以主机的gcc在编,变成主机执行了。

export PATH=:$PATH:/home/jlass/***

***就是你们自己的交叉编译器的路径

第二步:编译ntp

下载源文件,解压后进入文件夹,新建一个source文件夹(我个人的习惯而已)

注:以3.4.1个arm-linux-gcc是可以直接编译通过的,可是我的arm-linux-gcc是我自己用4.2.4版本编的,有一些问题。

。/configure --prefix=http://www.eda-china.com/home/jlass/marwell/rootfs/ntp-4.2.4p4/source/ --exec-prefix=http://www.eda-china.com/home/jlass/marwell/rootfs/ntp-4.2.4p4/source/ --host=arm-linux

注:网上的参考文件还有--enable-all-clocks --enable-parse-clocks参数,但我没加,也没觉得有什么问题。

make

错误一:

/home/jlass/marwell/rootfs/ntp-4.2.4p4/libntp/。/。。/libisc/ifiter_ioctl.c:487: undefined reference to `index‘

/home/jlass/marwell/rootfs/ntp-4.2.4p4/libntp/。/。。/libisc/ifiter_ioctl.c:487: undefined reference to `index’

检查源文件可发现index应该是某种算法,可是这个版本的gcc可能没有了。

查看gcc中的string.h文件能看到# define index(s,c) strchr((s), (c))字段

我觉得strchr的算法和index应该是一样的,所以在ifiter_ioctl.c中用strchr替代了index。

注:这里我偷懒了,应该有能好的解决方法

错误二:

tickadj.c:185:22: error: sys/var.h: No such file or directory

查看gcc的include/sys/目录下有个socketvar.h文件名字最接近了,直接把tickadj.c中的# include 改成# include

注:估计直接//注释掉应该也可以

错误三:

tickadj.c:436: error: ‘txc’ undeclared (first use in this function)

查看436行,tick = PRESET_TICK;没看到txc啊,奇怪,仔细一查发现另一个文件里定义了#define PRESET_TICK txc.tick

在查看看tickadj.c文件的开头有

#ifdef HAVE___ADJTIMEX/* Linux */

#include

struct timex txc;

估计是这个版本的gcc没定义HAVE___ADJTIMEX引起的,不管了,把

#include

struct timex txc;

放到最上面去。

总算是编译通过了。

make install

第三步:安装ntp

去source/bin下把需要的文件拷到开发板上吧

注:source/lib下没有文件,不需要拷。

在开发板的etc下新建ntp.conf文件,并写入

restrict 127.0.0.1

restrict 192.168.1.0 mask 255.255.0.0 nomodify notrap //根据自己的实际情况更改

server 127.127.1.0 //以本机作为时间服务器

fudge 127.127.1.0 stratum 5 //优先级为5

其实关键就是server 127.127.1.0(不要错写成127.0.0.1了)这一句,其他的都可以不写,直接使用默认值。

然后执行ntpd,ntpd服务就起来了。

注:实际需要等待几分钟,ntpd服务才真正起来,所以不要太着急了

在另一块板子上执行ntpdata serverIP,就能实现时间同步了。

注:如果你的板子已经起了ntpd,再运行ntpdata是会有错误提示ntpdate[2006]: the NTP socket is in use, exiting

另外:我在第一次处理的时候不小心把3.4.1编译生成的ntpd考到4.2.4的板卡上,执行时出现-sh:ntpd not found的错误,所以如果出现相同的错误请确认你所使用的交叉编译器和你板卡上的arm-linux-gcc是否统一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值