В Linux, где я могу найти исходный код для всех системных вызовов, учитывая, что у меня есть исходное дерево? Также, если мне захочется найти исходный код и сборку для конкретного системного вызова, есть ли что-то, что я могу ввести в терминал, например, -my_system_call?Где я могу найти исходный код системного вызова?
ответ
Вам понадобятся источники ядра Linux, чтобы увидеть фактический источник системных вызовов. Страницы руководства, если они установлены в вашей локальной системе, содержат только документацию о вызовах, а не их источник.
К сожалению, для вас системные вызовы не хранятся только в одном конкретном месте во всем дереве ядра. Это связано с тем, что различные системные вызовы могут относиться к различным частям системы (управление процессами, управление файловой системой и т. Д.), И поэтому было бы невозможно хранить их отдельно от части дерева, относящегося к этой конкретной части системы.
Лучшее, что вы можете сделать, это найти макрос SYSCALL_DEFINE[0-6]
. Он используется (очевидно) для определения данного блока кода как системного вызова. Например, fs/ioctl.c
имеет следующий код:
SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg)
{
/* do freaky ioctl stuff */
}
Такое определение означает, что ioctl
системный вызов объявляется и принимает три аргумента. Число рядом с SYSCALL_DEFINE
означает количество аргументов. Например, в случае getpid(void)
, объявленный в kernel/timer.c
, мы имеем следующий код:
SYSCALL_DEFINE0(getpid)
{
return task_tgid_vnr(current);
}
Надежда, что очищает вещи немного.
С точки зрения приложения, system call является элементарной и атомной операцией, выполняемой kernel.
Assembly Howto объясняет, что происходит, с точки зрения машинной инструкции.
Конечно, ядро многое делает при работе с системным сбором.
На самом деле вы почти могли поверить, что весь код ядра предназначен для обработки всех системных вызовов (это не совсем верно, но почти, с точки зрения приложений, ядро видно только через системные вызовы). Другой answer от Daniel Kamil Kozar объясняет, какая функция ядра запускает обработку какого-либо системного вызова (но очень часто многие другие части ядра косвенно участвуют в системных вызовах, например, планировщик косвенно участвует в реализации fork
, поскольку он управляет дочерний процесс, созданный успешным fork
syscall).
Я знаю, что это старый, но я искал источник для _system_call()
слишком и нашел этот лакомый
Фактический код system_call точки входа можно найти в/USR/SRC/Linux/ядра/sys_call. S Фактический код для многих системных вызовов можно найти в /usr/src/linux/kernel/sys.c, а остальные - в другом месте. найти ваш друг.
Я предполагаю, что это датировано, потому что у меня даже нет этого файла. Однако grep нашел ENTRY(system_call)
в arch/x86/kernel/entry_64.S и, похоже, это то, что вызывает индивидуальные системные вызовы. Я сейчас не нахожусь в моем синтаксисе x86 asm, поэтому вам придется посмотреть и посмотреть, действительно ли это то, что вы хотели.
'entry_64.S' больше не существует в магистрали 4.8. – sherrellbc
- 1. Где я могу найти исходный код pdb?
- 2. Где я могу найти исходный код CastButtonFactory
- 3. Где я могу найти исходный код UIStoryboardSegue.swift
- 4. Где я могу найти исходный код gitk?
- 5. Где я могу найти исходный код FlexMonkium?
- 6. Где я могу найти исходный код Flex?
- 7. Где я могу найти определение для параметра системного вызова?
- 8. Где я могу увидеть исходный код CoreLocation?
- 9. Где я могу получить исходный код пружин?
- 10. Где я могу получить исходный код libnet.so?
- 11. Где я могу получить исходный код приложения?
- 12. Где я могу найти исходный код для команды «reboot»?
- 13. Где я могу найти исходный код для основных команд Linux?
- 14. Где я могу найти исходный код C++ generic.h?
- 15. Где я могу найти исходный код JDK 1.5?
- 16. Где я могу найти исходный код Glassfish 4?
- 17. Где я могу найти исходный код Bouncy Castle
- 18. Где я могу найти исходный код функций пространственных отношений?
- 19. Где я могу найти исходный код библиотеки MIDAS?
- 20. Где я могу найти исходный код классов «build» в Java?
- 21. Где я могу найти исходный код Firefox для Android?
- 22. Где я могу найти исходный код для команды «больше»?
- 23. Где я могу найти исходный код Android-класса SQLiteOpenHelper?
- 24. Где я могу найти исходный код для/dev/random driver?
- 25. Где я могу найти исходный код метода TextView.setText (..)?
- 26. Где я могу найти исходный код для Linux UDP?
- 27. Где я могу найти исходный код mmap (вызов systeml)?
- 28. Где я могу найти исходный код для J2ME?
- 29. Где я могу найти исходный код утилит Unix?
- 30. Где я могу найти исходный код для log4j's ZeroConfSocketHubAppender?
http://kernel.org/ – TJD