2010-12-14 32 views
1

J'ai examiné le problème de l'année 2038 (Unix Millennium Bug). J'ai lu le article about this on Wikipedia, où j'ai lu sur une solution pour ce problème.Des pointeurs pour corriger le bogue d'Unix millennium ou le problème Y2k38?

Maintenant, je voudrais changer le type de données time_t à un entier 32bit non signé, ce qui me permettra d'être en vie jusqu'en 2106. J'ai le noyau Linux 2.6.23 avec RTPatch sur PowerPC.

Existe-t-il un correctif disponible qui me permettrait de changer le type de données time_t en un entier 32 bits non signé pour PowerPC? Ou tout correctif disponible pour résoudre ce bug?

+3

Plus d'une question serverfault? – Robert

+0

Pointeurs ... ha, ha. : P –

+1

* Non * une question serverfault. – Brad

Répondre

1

time_t est réellement défini dans votre implémentation libc, et non le noyau lui-même.

Le noyau fournit divers mécanismes qui fournissent l'heure actuelle (sous la forme d'appels système), dont beaucoup prennent déjà en charge plus de 32 bits de précision. Le problème est en fait votre implémentation libc (glibc sur la plupart des distributions Linux de bureau), qui, après avoir récupéré l'heure depuis le noyau, la renvoie à votre application sous la forme d'un type de données entier signé 32 bits.

Alors que l'on pourrait théoriquement modifier la définition de time_t dans votre mise en œuvre libc, dans la pratique, il serait assez compliqué: un tel changement modifierait l'ABI de libc, à son tour, exigeant que toutes les applications utilisant libc recompilation aussi des sources .

La solution la plus simple consiste à mettre à niveau votre système vers une distribution 64 bits, où time_t est déjà défini comme un type de données 64 bits, évitant ainsi le problème.

+1

Alors, quelle est la solution pour un Linux embarqué Système 32 bits * qui * sera encore utilisé après 2038? Ou est-ce que je n'ai pas de chance? –