2011-01-26 6 views
52

The Linux Programming Interface tiene un ejercicio en el capítulo 3 que dice así:números mágicos de la convocatoria reiniciar el sistema Linux()

Cuando se utiliza el reinicio específica de Linux() llamada al sistema para reiniciar el sistema, el El segundo argumento, magic2, debe ser especificado como uno de un conjunto de números mágicos (por ejemplo, LINUX_REBOOT_MAGIC2). ¿Cuál es la importancia de estos números ? (Convirtiéndolos a hexadecimal proporciona una pista.)

La página del manual nos dice magic2 puede ser una de LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448), o LINUX_REBOOT_MAGIC2C (537993216). No logré descifrar su significado en hexadecimal. También miré /usr/include/linux/reboot.h, que tampoco dio ningún comentario útil.

Luego busqué en el código fuente del kernel la definición de sys_reboot. Todo lo que encontré fue una declaración en un archivo de encabezado.

Por lo tanto, mi primera pregunta es, ¿cuál es el significado de estos números? Mi segunda pregunta es, ¿dónde está la definición de sys_reboot, y cómo la encontró?

EDIT: Encontré la definición en kernel/sys.c. Solo grepped para sys_reboot, y olvidé grep para los números MAGIC. Pensé que la definición debe estar oculta detrás de algún macro truco, así que miré el archivo System.map bajo /boot, y lo encontré junto a ctrl_alt_del. Luego grepped para ese símbolo, lo que me llevó al archivo correcto. Si hubiera compilado el kernel desde el código fuente, podría tratar de encontrar qué archivo de objeto definió el símbolo e ir desde allí.

Respuesta

71

Sólo una conjetura, pero esos números se ven más interesante en hexadecimal:

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

de los desarrolladores o los desarrolladores cumpleaños de los niños?

En cuanto a la búsqueda de la implementación de syscall, hice un git grep -n LINUX_REBOOT_MAGIC2 y encontré la definición en kernel/sys.c. El símbolo sys_reboot es generado por el SYSCALL_DEFINE4(reboot, ... gubbins, sospecho.

+4

+1 sólo por las fechas;) – BlackBear

+0

debe ser eso! ¡Debería haber alineado los números! –

+24

28 de diciembre de 1969 es la fecha de nacimiento de Linus Torvalds [Wikipedia]. Los otros parecen ser las fechas de nacimiento de sus hijos, aunque solo puedo confirmar que uno nació en diciembre de 1996 [al azar en Google]. –

18

Es el cumpleaños de Linus Torvalds (el desarrollador del kernel de Linux y el control de la versión Git) y sus 3 hijas. funciona como números mágicos para reiniciar el sistema.

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

Cuestiones relacionadas