Где размонтировать системный вызов?

В файле util-linux-2.17.2/mount/umount.cв строке № 246 написано res = umount (node);,

Но где же umount функция расположена? Я так много искал, но не нашел.

2 ответа

Решение

umount - это вызов библиотечной функции с таким же именем в libc. Эта функция, в свою очередь, выполняет системный вызов umount. Как библиотечная функция вызывает ядро ​​для выполнения определенной функции, можно узнать, прочитав о том, как работают системные вызовы. Эта ссылка может помочь вам в процессе. Как работают системные вызовы?

Если вы хотите узнать, где присутствует системный вызов umount, скачайте последнее ядро. Перейдите в файл fs/namespace.c. Там вы найдете

SYSCALL_DEFINE2(umount, char __user *, name, int, flags)

а также

SYSCALL_DEFINE1(oldumount, char __user *, name)

которые определяют функции umount и oldumount.

umount Функция является частью вашей системной библиотеки libc. Вы можете найти столько же, используя, например, objdump -T /lib/libc.so.6 | grep umount, .text запись в одном из выходных столбцов будет указывать, что эта функция (и ее брат umount2) определены в этой библиотеке как символы для исполняемого кода (в отличие от глобальных переменных).

Эта функция реализована для выполнения системного вызова ядра, обычно с помощью небольшого фрагмента кода сборки. В отличие от большинства системных вызовов, glibc не просто включает этот системный вызов в свой основной список системных вызовов Linux. Вместо этого для этого есть специальный ассемблерный код. Смысл этого скрыт за многими уровнями раскрытия макросов, и я не могу заставить препроцессор выдавать код окончательной сборки прямо сейчас.

Другие вопросы по тегам