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