Cas

Martin Mokry megacsk na gmail.com
Pondělí Listopad 2 09:57:29 CET 2015


Vysledkom bolo:

[root na localhost ~]# stap -c 'hwclock --show --directisa' hwc.stp
Po  2. november 2015, 08:31:23 CET  .759303 seconds
24h = 0

Takze skutocne uchovava cas v 12 hodinovom formate. Skusil som sa aj
pozriet do BIOSu ci tam nie je prepinanie medzi 12/24 hodinovym formatom
ale nic som nenasiel. A dnes rano bol cas znova posunuty o takmer 3 dni.
Vcera som daval uspat notebook po 20tej hodine, takze hodnota bola asi cosi
nad 80.

Rozhodol som sa to vyriesit tym, ze chronymu povolim posun casu vzdy ked je
rozdiel vacsi ako 1 sekunda (makestep 1 -1). Toto zatial funguje aj na
datum aj na cas do par sekund od prebudenia.

2015-11-01 22:10 GMT+01:00 Pavel Kankovsky <peak na argo.troja.mff.cuni.cz>:

> On Sun, 1 Nov 2015, Ladislav Vaiz wrote:
>
> Nevím, zda jste psal přesný typ RTC, nesledoval jsem vlákno tak detailně.
>> Tady by mohlo jít o něco jako DS1307 v 12h režimu.
>>
>
> Jádro k tomu přistupuje pomocí rtc_cmos, takže to asi nebude DS1307.
> Ale s tím 12-hodinovým režimem jste asi na správné stopě
>
> Dne 1.11.2015 v 17:55 Martin Mokry napsal(a):
>>
>>>  Hodnota aktualnej hodiny (nastavovanej cez KDE hodiny) = hodnota RTC:
>>>  0 = 12
>>>  1 - 12 = 1 - 12
>>>  13 - 19 = 81 - 87
>>>  20 = 12
>>>  21 - 23 = 1 - 3
>>>
>>
> Např. 13 by v 12-hodinovém režimu bylo uloženo jako 1 | 0x80 = 129.
> A když se pokusím 129 interpretovat v BCD, tak dostanu přesně 81.
>
> Není to zcela konzistentní se zbytkem tabulky, ale to může být tím, že
> tabulka vznikla následkem pokusů o nastavení hodin a že se to chová trochu
> zmateně, když se tam jádro snaží vnutit údaje v 24-hodinovém formátu.
>
> Navíc to vypadá, že jádro 12-hodinový režim neumí, ale hwclock ho
> implementuje. Což by mohlo vysvětlovat, proč hwclock vypisuje správné údaje.
>
> Zkusme tedy ještě jeden kejkl se SystemTapem:
>
> # debuginfo-install util-linux
> # cat > hwc.stp <<'EOF'
> probe process("/sbin/hwclock").statement("*@sys-utils/hwclock-cmos.c:561")
> {
>         printf("24h = %d\n", !!($status & 2));
> }
> EOF
> # stap -c 'hwclock --show --directisa' hwc.stp
>
> Normální výstup by měl být něco jako "24h = 1" (plus stav hodin).
> Pokud to vypíše "24h = 0", tak je to skutečně v 12-hodinovém módu (a
> přiznává to -- ještě je zde možnost, že je to nějaký choromyslný hardware,
> který v tom módu je, ale nepřizná to).
>
> PS: Tak mne napadá, že by nebylo od věci, kdyby SystemTap uměl umístit
> sondu doprostřed funkce, aniž by bylo nutno uvést přesné číslo řádku...
>
> PS2: Samozřejmě také můžete spustit hwclock pod debuggerem, dát si na to
> místo breakpoint a prozkoumat hodnotu proměnné status v tom debuggeru.
>
>
> --
> Pavel Kankovsky aka Peak                      "Que sais-je?"
>
> _______________________________________________
> Linux mailing list
> Linux na linux.cz
> http://www.linux.cz/mailman/listinfo/linux
>



-- 
Martin "Megac" Mokry


Další informace o konferenci Linux