Cas
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Neděle Listopad 1 22:10:12 CET 2015
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?"
Další informace o konferenci Linux