Score:1

การประทับเวลา PTP ไม่ถูกต้อง

ธง bd

ฉันมีปัญหาในการซิงค์กับระบบ Linux โดยใช้ PTP

ติดตั้ง:

PCB สองตัวที่มีโมดูล BegleCore และ DP83640 PHY เชื่อมต่อกันผ่านอีเธอร์เน็ต บอร์ดหนึ่งควรทำหน้าที่เป็น PTP มาสเตอร์ และอีกบอร์ดหนึ่งเป็นทาส เดเบียน 10, เคอร์เนล: 4.19.94 โหลดไดรเวอร์สำหรับ Phy แล้ว ใช้ลินุกซ์ ptp v3.1

ในระบบหลักฉันรันคำสั่ง:

sudo ptp4l -i eth0 -f linuxptp/configs/configMaster.cfg -m

ในระบบไคลเอ็นต์ฉันเรียกใช้:

sudo ptp4l -i eth0 -f linuxptp/configs/configslave.cfg -m

เนื้อหาของ configMaster.cfg:

[ทั่วโลก]
เซิร์ฟเวอร์เท่านั้น 1
ขสมก

เนื้อหาของ configSlave.cfg:

[ทั่วโลก]
ลูกค้าเท่านั้น 1
ขสมก
step_threshold 1

ส่งผลให้ผลลัพธ์ต่อไปนี้บนทาส:

ptp4l[438753.396]: เลือก /dev/ptp0 เป็นนาฬิกา PTP
ptp4l[438753.409]: พอร์ต 1 (eth0): การเริ่มต้นเป็นทาสใน INIT_COMPLETE
ptp4l[438753.414]: พอร์ต 0 (/var/run/ptp4l): การเริ่มต้นเพื่อฟังใน INIT_COMPLETE
ptp4l[438753.418]: พอร์ต 0 (/var/run/ptp4lro): การเริ่มต้นเพื่อฟังใน INIT_COMPLETE
ptp4l[438754.075]: พอร์ต 1 (eth0): มาสเตอร์ต่างประเทศใหม่ 304511.fffe.0ff048-1                                                                                       
ptp4l[438758.074]: เลือกนาฬิกาหลักที่ดีที่สุด 304511.fffe.0ff048
ptp4l[438762.072]: การชดเชยหลัก 2426120726467 s0 ความถี่ -261066 เส้นทางล่าช้า 15040
ptp4l[438762.074]: เลือกนาฬิกาหลักที่ดีที่สุด 304511.fffe.0ff048
ptp4l[438765.074]: การชดเชยหลัก 2426120697575 s1 ความถี่ -270698 เส้นทางล่าช้า 15156
ptp4l[438767.072]: การชดเชยหลัก 2426120678191 s0 ความถี่ -270698 เส้นทางล่าช้า 15156
ptp4l[438768.075]: การชดเชยหลัก 2426120668273 s1 ความถี่ -280618 เส้นทางล่าช้า 15830
ptp4l[438769.072]: การชดเชยหลัก 2426120658469 s0 ความถี่ -280618 เส้นทางล่าช้า 15830
ptp4l[438770.073]: การชดเชยหลัก 2426120648789 s0 ความถี่ -280618 เส้นทางล่าช้า 16022
ptp4l[438771.076]: การชดเชยหลัก 2426120639057 s1 ความถี่ -290350 เส้นทางล่าช้า 16022
...

ค่าชดเชยที่รายงานคือประมาณ 40 นาที ก่อนเรียกใช้ ptp4l ฉันได้ตั้งค่านาฬิกา PTP ใน PHY ด้วย testptp -s ตามเวลาของระบบปัจจุบัน ดังนั้นนาฬิกา PTP จึงอยู่ห่างกันเพียงไม่กี่วินาที

แต่ละครั้งที่ ptp4l รายงาน "master offset s1 ... " มันจะย้อนเวลา PTP กลับไป 40 นาที (ตรวจสอบด้วย testptp -g). แต่ค่าชดเชยที่รายงานจะเปลี่ยนไปประมาณ 10 us เท่านั้น

ฉันยังตรวจสอบทราฟฟิกเครือข่ายด้วย Wireshark และเห็นว่าข้อความติดตามผลจากต้นแบบมีการประทับเวลาที่ประมาณ 69 นาทีของเวลาที่นาฬิกา PTP ใน PHY ตั้งไว้ หลังจากเพิ่มผลลัพธ์การดีบักไปยัง ptp4l ฉันเห็นว่าในสลาฟนั้น การประทับเวลาที่แยกออกจาก cmsgs ที่ส่งคืนจากซ็อกเก็ตจะถูกชดเชยประมาณ -27 นาทีจากเวลาที่นาฬิกา PTP ของไคลเอ็นต์เป็นจริง

ความแตกต่างจากการประทับเวลาเท็จ (+69 นาที) ที่ส่งโดยมาสเตอร์และการประทับเวลาที่อ่านผิดพลาด (-27 นาที) โดยไคลเอ็นต์ส่งผลให้มีการชดเชย 40 นาทีระหว่างนาฬิกาหลักและนาฬิกาไคลเอนต์

Score:0
ธง bd

ฉันแก้ไขปัญหาด้วย: ปิดใช้งานการสนับสนุน CPTS ในตัวเลือกเคอร์เนลและแก้ไขไฟล์ cpsw.c ตามวิธีต่อไปนี้:

ความแตกต่าง --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
ดัชนี fc8e3ed383a2..d4d70706e86c 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -2490,15 +2490,22 @@ static int cpsw_ndo_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
โครงสร้าง cpsw_priv *priv = netdev_priv(dev);
โครงสร้าง cpsw_common *cpsw = priv->cpsw;
int slave_no = cpsw_slave_index (cpsw, ไพรเวต);
+ int ผิดพลาด = 0;

ถ้า (!netif_running(dev))
กลับ -EINVAL;

สวิตช์ (ซม.) {
กรณี SIOCSHWTSTAMP:
- ส่งคืน cpsw_hwtstamp_set(dev, req);
+ ข้อผิดพลาด = cpsw_hwtstamp_set(dev, req);
+ if(err != -EOPNOTSUPP)
+ กลับข้อผิดพลาด;
+ แตก;
กรณี SIOCGHWTSTAMP:
- ส่งคืน cpsw_hwtstamp_get(dev, req);
+ ข้อผิดพลาด = cpsw_hwtstamp_get(dev, req);
+ if(err != -EOPNOTSUPP)
+ กลับข้อผิดพลาด;
+ แตก;
กรณี SIOCSWITCHCONFIG:
กลับ cpsw_switch_config_ioctl (dev, req, cmd);
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา