2011-01-26 3 views
52

The Linux Programming Interface a un exercice au chapitre 3 qui va comme ceci:Les nombres magiques du redémarrage Linux() système d'appel

Lorsque vous utilisez le redémarrage spécifique à Linux() appel système pour redémarrer le système, le Le deuxième argument, magic2, doit être spécifié comme l'un des nombres magiques (par exemple, LINUX_REBOOT_MAGIC2). Quelle est la signification de ces numéros ? (Les convertir en hexadécimal fournit un indice.)

La page de manuel nous dit magic2 peut être l'un des LINUX_REBOOT_MAGIC2 (672.274.793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369.367.448), ou LINUX_REBOOT_MAGIC2C (537993216). J'ai échoué à déchiffrer leur signification en hex. J'ai également regardé /usr/include/linux/reboot.h, qui n'a donné aucun commentaire utile non plus. J'ai ensuite cherché dans le code source du noyau pour sys_reboot définition. Tout ce que j'ai trouvé était une déclaration dans un fichier d'en-tête. Par conséquent, ma première question est la suivante: quelle est la signification de ces chiffres? Ma deuxième question est: où est la définition de sys_reboot, et comment l'avez-vous trouvée?

EDIT: J'ai trouvé la définition dans kernel/sys.c. J'ai seulement grepped pour sys_reboot, et j'ai oublié de grep pour les numéros MAGIC. Je pensais que la définition devait être cachée derrière un certain tour de macro, donc j'ai regardé le fichier System.map sous /boot, et l'ai trouvé à côté de ctrl_alt_del. J'ai ensuite salué pour ce symbole, ce qui m'a conduit au bon fichier. Si j'avais compilé le noyau à partir du code source, je pourrais essayer de trouver quel fichier objet a défini le symbole, et partir de là.

Répondre

71

Juste une supposition, mais ces chiffres semblent plus intéressants dans l'hexagone:

672274793 = 0x28121969 
85072278 = 0x05121996 
369367448 = 0x16041998 
537993216 = 0x20112000 

développeur ou développeur anniversaires enfants? En ce qui concerne la recherche de l'implémentation syscall, j'ai fait un git grep -n LINUX_REBOOT_MAGIC2 et trouvé la définition dans le noyau/sys.c. Le symbole sys_reboot est généré par les gubbins SYSCALL_DEFINE4(reboot, ..., je suppose.

+4

+1 seulement pour les dates;) – BlackBear

+0

ça doit être ça! J'aurais dû aligner les chiffres! –

+24

Le 28 décembre 1969 est la date de naissance de Linus Torvalds [Wikipedia]. Les autres semblent être les dates de naissance de ses enfants, bien que je puisse seulement confirmer que l'un est né en décembre 1996 [googling aléatoire]. –

18

C'est l'anniversaire de Linus Torvalds (le développeur du noyau Linux et du contrôle de version Git) et de ses 3 filles. fonctionne comme des nombres magiques pour redémarrer le système.

http://en.wikipedia.org/wiki/Linus_Torvalds

Questions connexes