← Back to team overview

sslug-teknik team mailing list archive

Re: System ur og cmos ur - y2k korrigering?

 

In <386487F4.7151FDA6@xxxxxxxxxxxxxx> Peter Wood <peter.wood@xxxxxxxxxxxxxx> writes:

>Jeg har læst et eller andet sted at det skulle være muligt at lave en
>script som lægger et bestemt antal dage til cmos uret når jeg boote
>maskinen.  Sådan at system uret er rigtigt selv om cmos uret har
>sprunget tilbage til 1980 ved årtusindskiftet.  Det drejer sig om  en
>(rigtig) gamle laptop med Debian 2.1 installeret.

Som Frank m.fl. har illustreret, så kan det gøres med et simpelt shell-script.
Men som Perl folkene siger : "There is more than one way to do it". Jeg ville
nok pille i Linux-kernen's rutine, som læser CMOS uret - så er det ligegyldigt
om cmos-årstallet er rigtigt: Når blot kernen gør "det rigtige" følger resten
af systemet med.

Det er ikke så svært, som man måske skulle tro. I Linux 2.2 kernen skal man
have fat i /usr/src/linux/arch/i386/kernel/time.c . Omkring linie 500 findes
rutinen "get_cmos_time", der aflæser CMOS uret og returnerer en standard
Unix tid (sekunder siden 0:00 GMT 1/1/1970). Umiddelbart inden denne rutine
returnerer - d.v.s. inden kaldet af "mktime" - ændrer man blot det årstal
som er aflæst fra cmos-uret. F.eks. hvis man sætter CMOS uret til 1972 i
år 2000 (eller 1971 endnu her i 1999), altså 28 år førend den virkelige tid:

        if ((year += 1900) < 1970)
                year += 100;
	year += 28;  /* <<<------ Tilføj denne linie */
        return mktime(year, mon, day, hour, min, sec);

Voila - cmos uret siger "72" men Linux kernen justerer så det bliver
aflæst som 1972+28=2000.

Jeg har ikke lige en 2.0 kerne-source ved hånden, men der er formentlig ikke
sket den store forandring i denne del af koden, så det skulle være over-
kommeligt at lave denne ændring også på ældre kerne-versioner.

-- 
Henrik Storner     | "Software engineering is a race between engineers 
<storner@xxxxxxxx> |  who try to create foolproof software and the 
                   |  universe which is trying to create bigger fools.
                   |  So far, the universe is winning..."


Follow ups

References