Интерфейс программирования Linux имеет упражнение в главе 3, которое выглядит следующим образом:
При использовании Linux-специфичной перезагрузки() системный вызов для перезагрузки системы, Второй аргумент magic2 должен быть как один из множества магии номера (например, LINUX_REBOOT_MAGIC2). Каково значение этих номера? (Преобразование их в hexadecimal предоставляет ключ.)
На странице руководства нам сообщается, что magic2
может быть одним из LINUX_REBOOT_MAGIC2 (672274793), LINUX_REBOOT_MAGIC2A (85072278), LINUX_REBOOT_MAGIC2B (369367448) или LINUX_REBOOT_MAGIC2C (537993216). Я не смог расшифровать их значение в шестнадцатеричном формате. Я также посмотрел на /usr/include/linux/reboot.h
, который также не дал никакого полезного комментария.
Затем я искал в исходном коде ядра для определения sys_reboot
. Все, что я нашел, было объявлением в файле заголовка.
Поэтому мой первый вопрос: каково значение этих чисел? Мой второй вопрос: где sys_reboot
определение и как вы его нашли?
EDIT. Я нашел определение в kernel/sys.c
. Я только скорчил для sys_reboot
и забыл grep для чисел MAGIC. Я решил, что определение должно быть скрыто за каким-то макро-трюком, поэтому я просмотрел файл System.map
в /boot
и нашел его рядом с ctrl_alt_del
. Затем я перебрал этот символ, который привел меня к правильному файлу. Если бы я скомпилировал ядро из исходного кода, я мог бы попытаться найти, какой файл объекта определил символ, и оттуда.