【Linuxptp】Linuxptp的交叉编译,基于Zynq的linux源代码

本文详细描述了如何从Linuxptp项目中编译代码,包括下载、编辑Makefile、解决编译时遇到的clock_adjtime和ethtool_netlink.h头文件等问题,以及在ZynqLinux和Petalinux环境下的配置步骤。
摘要由CSDN通过智能技术生成

第一步:
从项目官网下载代码,需要git工具。

git clone git://git.code.sf.net/p/linuxptp/code linuxptp

项目详情页:https://github.com/richardcochran/linuxptp
第二步:
编辑Makefile:
在这里插入图片描述
KBUILD_OUTPUT为Linux源码的目录
DEBUG 填入 -g,使能Debug。
CC这一行原本是设置交叉编译工具的,但是不知道为什么使用$CROSS_COMPILE已经显示出了交叉编译工具,但编译仍然报错,看别人都是注释,这里就注释吧。
CFLGS 在Wall后面增加 -O,调整代码编译优化策略。
底下的prefix可改可不改,是项目生成的目录,可以按照自己的需求更改。
第三步:
编译:终端输入指令make,出现以下报错:
(1)clock_adjtime重定义c
将missing.h中的clock_adjtime注释。
在这里插入图片描述
再编译:make,出现报错(2)。
(2)找不到ethtool_netlink.h头文件
在这里插入图片描述
作者跑到Zynq Linux源码(linux-xlnx-xlnx_rebase_v5.4_2020.2)底下找了下,发现确实没有。观察rtnc.c:

#ifdef HAVE_VCLOCKS
#include <linux/ethtool_netlink.h>
#endif

发现它是在定义有HAVE_VCLOCKS时才会引用这个头文件,先不妨在代码目录里grep一下看看哪里定义了它。
在这里插入图片描述
结果哪里都没有定义它,反而missing.h中有许多条件编译是表示它没定义的时候生效的。详细观察代码,发现如果没有定义它,rtnl中的所有变量也会因missiing.h中的条件编译的定义而正常运行,因此现在需要解决的是哪里定义了它,并去除它的定义。观察grep的结果,发现incdefs.sh中有一个类似的打印,打开这个脚本发现它的作用似乎是通过读取net_tstamp.h来决定是否在编译的时候增加一些定义。
在这里插入图片描述
编译中的打印出现了 -DHAVE_VLOCKS,我直接运行这个脚本,./incdefs.sh时,终端出现了一样的打印,因此判定罪魁祸首就是它(当然更大的可能是源码老了,最新的Linux版本应该是支持的)。删除incdefs.sh中的以下内容:
在这里插入图片描述
再编译:make,发生错误(3)
(3)找不到HWTSTAMP_TX_ONESTEP_P2P的定义在这里插入图片描述
按照问题(2)的经验,先grep看看,打印如下:
在这里插入图片描述
追踪到missing.h中发现,仍然是未定义HAVE_ONESTEP_P2P时补充的条件编译,和问题(2)一样从incdefs.sh解决,删除以下内容:
在这里插入图片描述
再编译:make,发现已经没有报错了。
第四步:make install 生成工具
查看生成文件夹下的sbin文件夹,发现已经有了现成的ptp工具。
在这里插入图片描述
第五步:将ptp4l复制到开发板的bin文件夹中,运行。
后记:说说为什么要自己编译linuxptp,因为目前在做着一方面的事情,源码支持debug,同时意味着如果出现一些意想不到的问题,都是可以通过改源码来规避错误的,例如这个博客:
https://blog.csdn.net/motianjie/article/details/131228098
如果你只是需要在Zynq开发板中使用Linuxptp,那么无需编译开源代码,仅在petalinux中进行设置即可。这里简单描述一下:
[1]petalinux-config -c kernel
找到Device Drivers →PTP clock support,看看PTP clock support是否勾选。
[2]在Petalinux工程文件夹中的:/project-spec/meta-user/conf/user-rootfsconfig文件中添加一行:

CONFIG_linuxptp

[3]petalinux-config -c rootfs
选择user packages,选中linuxptp
[4]petalinux-build
[5]复制镜像、根文件系统
[6]输入ptp4l命令,如果有回显,则表示成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值