Puncte:1

Marcaje temporale PTP incorecte

drapel bd

Am probleme cu sincronizarea cu sistemele Linux folosind PTP.

Înființat:

Două PCB-uri cu un modul BegleCore și un DP83640 PHY sunt conectate între ele prin Ethernet. O placă ar trebui să acționeze ca master PTP, cealaltă ca slave. Debian 10, Kernel: 4.19.94 Driverul pentru Phy este încărcat. Folosind linuxptp v3.1

Pe sistemul master rulez comanda:

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

Pe sistemul client rulez:

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

Conținutul configMaster.cfg:

[global]
serverNumai 1
BMCA nu

Conținutul configSlave.cfg:

[global]
clientDoar 1
BMCA nu
step_threshold 1

Acest lucru are ca rezultat următoarea ieșire pe slave:

ptp4l[438753.396]: selectat /dev/ptp0 ca ceas PTP
ptp4l[438753.409]: portul 1 (eth0): INITIALIZING la SLAVE pe INIT_COMPLETE
ptp4l[438753.414]: portul 0 (/var/run/ptp4l): INITIALIZING la LISTENING pe INIT_COMPLETE
ptp4l[438753.418]: portul 0 (/var/run/ptp4lro): INITIALIZING la LISTENING pe INIT_COMPLETE
ptp4l[438754.075]: port 1 (eth0): nou master străin 304511.fffe.0ff048-1                                                                                       
ptp4l[438758.074]: selectat cel mai bun ceas principal 304511.fffe.0ff048
ptp4l[438762.072]: offset principal 2426120726467 s0 freq -261066 întârziere cale 15040
ptp4l[438762.074]: selectat cel mai bun ceas master 304511.fffe.0ff048
ptp4l[438765.074]: offset principal 2426120697575 s1 freq -270698 întârziere cale 15156
ptp4l[438767.072]: offset principal 2426120678191 s0 freq -270698 întârziere cale 15156
ptp4l[438768.075]: offset principal 2426120668273 s1 freq -280618 întârziere cale 15830
ptp4l[438769.072]: offset principal 2426120658469 s0 freq -280618 întârziere cale 15830
ptp4l[438770.073]: offset master 2426120648789 s0 freq -280618 întârziere cale 16022
ptp4l[438771.076]: offset principal 2426120639057 s1 freq -290350 întârziere cale 16022
...

Decalajul raportat este de aproximativ 40 min. Înainte de a rula ptp4l, am setat ceasurile PTP în PHY-uri cu testptp -s la ora curentă a sistemului. Ceasurile PTP se aflau de fapt la câteva secunde unul de celălalt.

De fiecare dată când ptp4l raportează un „master offset s1...” face înapoi ceasul PTP cu 40 de minute (verificat cu testptp -g). Cu toate acestea, compensarea raportată se modifică doar cu aproximativ 10 us.

De asemenea, m-am uitat în traficul de rețea cu Wireshark și am văzut că mesajele de urmărire de la master conțin un marcaj de timp care este cu aproximativ 69 de minute față de ceea ce este setat ceasul PTP din PHY. După ce am adăugat ieșiri de depanare la ptp4l, am văzut că pe slave, marcajul de timp pe care îl extrage din cmsg-urile returnate de la socket este compensat cu aproximativ -27 min față de ceasul PTP al clientului.

Diferența dintre marcajele temporale false (+69 min) trimise de master și marcajele temporale citite fals (-27 min) de către client rezultă în 40 de minute de decalaj asumat între ceasul principal și ceasul clientului.

Puncte:0
drapel bd

Am rezolvat problema cu: Dezactivarea suportului CPTS în opțiunile kernelului și modificarea fișierului cpsw.c în felul următor:

diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index 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)
struct cpsw_priv *priv = netdev_priv(dev);
struct cpsw_common *cpsw = priv->cpsw;
int slave_no = cpsw_slave_index(cpsw, priv);
+ int err = 0;

dacă (!netif_running(dev))
returnare -EINVAL;

comutator (cmd) {
caz SIOCSHWTSTAMP:
- returnează cpsw_hwtstamp_set(dev, req);
+ err = cpsw_hwtstamp_set(dev, req);
+ if(err != -EOPNOTSUPP)
+ returnează eroare;
+ pauză;
caz SIOCGHWTSTAMP:
- returnează cpsw_hwtstamp_get(dev, req);
+ err = cpsw_hwtstamp_get(dev, req);
+ if(err != -EOPNOTSUPP)
+ returnează eroare;
+ pauză;
caz SIOCSWITCHCONFIG:
return cpsw_switch_config_ioctl(dev, req, cmd);
}

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.