Linux重启()系统调用的魔术数字

Linux编程接口在第3章中有一个练习:

当使用Linux特有的reboot()系统调用来重启系统时,第二个参数magic2必须被指定为一组幻数(例如,LINUX_REBOOT_MAGIC2)。 这些数字的意义是什么? (将它们转换为hex提供了一个线索。)

手册页告诉我们magic2可以是LINUX_REBOOT_MAGIC2(672274793),LINUX_REBOOT_MAGIC2A(85072278),LINUX_REBOOT_MAGIC2B(369367448)或LINUX_REBOOT_MAGIC2C(537993216)之一。 我没有用hex解释他们的意思。 我也看了/usr/include/linux/reboot.h ,也没有给出任何有用的评论。

然后我在内核的源代码中search了sys_reboot的定义。 我发现的只是一个头文件中的声明。

所以,我的第一个问题是,这些数字的意义是什么? 我的第二个问题是, sys_reboot的定义在哪里,你是怎么find它的?

编辑 :我发现kernel/sys.c的定义。 我只grepped为sys_reboot ,忘了grep的MAGIC号码。 我觉得这个定义必须隐藏在一些macros观把戏后面,所以我查看了/boot下的System.map文件,并在ctrl_alt_del旁边find了它。 然后,我为那个符号擦了擦,这导致了我正确的文件。 如果我从源代码编译内核,我可以尝试find哪个目标文件定义了符号,然后从那里开始。

只是一个猜测,但这些数字看起来更有趣的hex:

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

开发者或开发者的孩子的生日?

关于查找系统调用实现,我做了一个git grep -n LINUX_REBOOT_MAGIC2并在kernel / sys.c中find了这个定义。 符号sys_reboot是由SYSCALL_DEFINE4(reboot, ... gubbins,我怀疑生成。

这是Linus Torvalds(Linux内核和Git版本控制的开发者)和他的三个女儿的生日。 作为神奇的数字重新启动系统。

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