2013-10-10 7 views
0

Во-первых, я должен упомянуть, что я работаю с ядром 2.6.32 Linux. Я ищу код в источнике, который выполняет правильный системный вызов на основе идентификатора системного вызова (определяется в /linux/arch/x86/kernel/syscall_table_32.S). По моему мнению, системные вызовы выполняются через прерывание с идентификатором системного вызова в регистре eax. Поэтому ядро ​​должно обслуживать прерывание и выполнять соответствующий системный вызов на основе идентификатора в регистре eax.Где в ядре linux отправляются системные вызовы?

Где я могу найти в исходном коде, где это происходит? Даже некоторые рекомендации относительно того, что я должен искать, чтобы найти этот код, были бы высоко оценены.

ответ

2

Если я правильно понимаю ваш вопрос, я считаю, что вы ищете system_call() в /arch/x86/kernel/traps.c - эта функция сохраняет номер системного вызова и все регистры процессора, но это происходит как сборка в /arch/x86/kernel/entry_32.S в вашем случае (x86). Взгляните на главы 6 и 10 в книге О'Рейли «Понимание книги ядра Linux», если вам интересно узнать больше о том, как происходит эта связь.

Смежные вопросы