一、1588协议说明
1、IEEE1588 ( PTP ) 协议简介
IEEE1588 协议,又称 PTP( precise time protocol,精确时间协议),可以达到亚微秒级别时间同步精度,于 2002 年发布 version 1,2008 年发布 version 2
2、IEEE1588 协议的同步原理,所提出的 Delay Request-Response Mechanism(延时响应机制)如 下图所示:
二、Linux 内核协议栈方式
1、下载1588协议代码
2、x86服务器测试验证
3、arm64板子测试验证
三、应用层协议到Linux内核处理udp发送数据包的过程
1、应用层通过sendto进行发送
2、Linux内核调用udp_sendmsg进行发送。。
3、。。
4、网络设备驱动函数注册
5、通过 ndo_start_xmit 发送数据
这里我在做测试验证的时候 发现无法找到设备文件ptp
于是ls -lh /dev/ptp* 后 果然没有ptp0 或者ptp1 设备文件
4、于是开始查看Linux 内核协议栈驱动程序
nxp 的设备驱动 是通过先创建dprc contianer
dprc container是作为root根节点 也就是链表的头指针
后续手动创建的dprtc 才会被挂到dprc的链表上
创建成功dprc后
驱动程序是先做一个匹配 匹配到dprtc后才是 创建ptp设备文件
然后才是进行probe操作 注册读写函数等
二、DPDK接管网卡 使用DPDK的协议栈实现1588时间同步
1、nxp 板卡配置DPDK环境说明:
修改uboot 环境变量
setenv othbootargs default_hugepagesz=1024m hugepagesz=1024m hugepages=2 pci=pcie_bus_perf isolcpus=1-8 iommu.passthrough=1
cross-compile-dpdk
export RTE_SDK=/home/zhanghh/16.latest-dpdk/dpdk
export export RTE_TARGET=build/
- make config T=arm64-dpaa2-linuxapp-gcc
- 修改 build/.config 将kernel相关module disable掉 #CONFIG_RTE_KNI_KMOD=y
- make -j CROSS=aarch64-linux-gnu- RTE_KERNELDIR=/home/zhanghh/05.nxp-code-with-git/flexbuild_lsdk1906/packages/linux/linux/
- build 出来的image在:build/路径下