获取Linux中时钟设备的频率

获取Linux中时钟设备的频率,linux,clock,Linux,Clock,我试图调整硬件时钟设备“dev/ptp0”的频率,以便在精确时间协议(PTP)实现中同步两个时钟,但频率似乎没有同步调整,就好像一些调整调用在应用于内核之前被累积,这影响了我的PI控制器 我想确认系统对频率调整的响应,那么有没有办法在Linux中获取时钟的当前频率 我正在使用下面的代码来调整/获取频率偏移,但我想获取当前的实际频率 bool adjustFrequency(double adj) { struct timex tmx; memset(&tmx, 0,

我试图调整硬件时钟设备“dev/ptp0”的频率,以便在精确时间协议(PTP)实现中同步两个时钟,但频率似乎没有同步调整,就好像一些调整调用在应用于内核之前被累积,这影响了我的PI控制器

我想确认系统对频率调整的响应,那么有没有办法在Linux中获取时钟的当前频率


我正在使用下面的代码来调整/获取频率偏移,但我想获取当前的实际频率

bool adjustFrequency(double adj)
{   
    struct timex tmx;
    memset(&tmx, 0, sizeof(tmx));
    tmx.modes = ADJ_FREQUENCY;

    tmx.freq = (long)(round(adj * 65.536));
    printf("setFrequency to  %lld %f\n", tmx.freq,  adj);

    if(clock_adjtime(clockId, &tmx) < 0) {
        printf("Could not adjust frequency offset of clock\n");
        return FALSE;
    }
    return TRUE
}

double getFrequency(void)
{
    struct timex tmx;
    memset(&tmx, 0, sizeof(tmx));
    if(clock_adjtime(clockId, &tmx) < 0) {
        printf("Could not get frequency of clock\n");
        return 0;
    }
    printf("getFrequency  %lld  %f\n",tmx.freq, (tmx.freq + 0.0) / 65.536 );
    return( (tmx.freq + 0.0) / 65.536);
}
bool调整频率(双调整)
{   
struct-timex-tmx;
memset(&tmx,0,sizeof(tmx));
tmx.modes=调整频率;
tmx.freq=(长)(圆形(adj*65.536));
printf(“将频率设置为%lld%f\n”,tmx.freq,adj);
如果(时钟调整时间(时钟ID和tmx)<0){
printf(“无法调整时钟的频率偏移\n”);
返回FALSE;
}
返回真值
}
双频(无效)
{
struct-timex-tmx;
memset(&tmx,0,sizeof(tmx));
如果(时钟调整时间(时钟ID和tmx)<0){
printf(“无法获取时钟频率\n”);
返回0;
}
printf(“getFrequency%lld%f\n”,tmx.freq,(tmx.freq+0.0)/65.536);
返回((tmx.freq+0.0)/65.536);
}

有关系统时钟逐步调整的说明,请参见
人工调整时间。突然跳转会导致问题。我没有调整系统时钟,我有一个专用的PTP硬件时钟,例如“/dev/ptp0”。系统时钟可以测量频率,因为它内置在CPU中。没有比硬件提供的频率更单独的测量方法。只有你才能知道你的时钟的特性。我不明白你说的“只有你才能知道你的时钟的特性”是什么意思,我在想,可能是Linux提供了一个类似ioctl的系统,可以调用驱动程序来获取设备的当前频率或类似的东西。“目前的实际频率”意义有限。频率是每次事件的数量。“瞬间”是没有时间延伸的东西。所以“此刻的频率”是一个零的除法。