Nếu bạn có nghĩa là thư viện cuộc gọi như những mặt hàng trong fcntl.h
, họ không nằm trong hạt nhân, chúng là một phần của glibc
.
Nếu bạn là đề cập đến các cuộc gọi hạt nhân thực, hệ thống gọi xyzzy
thường được xử lý theo chức năng sys_xyzzy
.
File entry.S, ít nhất là trong 2.4 (Tôi đã không nhìn hạt nhân sau), đã tổ chức một hệ thống bản đồ bảng số cuộc gọi đến các chức năng:
.data
ENTRY(sys_call_table)
.long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/
.long SYMBOL_NAME(sys_exit)
.long SYMBOL_NAME(sys_fork)
.long SYMBOL_NAME(sys_read)
.long SYMBOL_NAME(sys_write)
.long SYMBOL_NAME(sys_open) /* 5 */
.long SYMBOL_NAME(sys_close)
.long SYMBOL_NAME(sys_waitpid)
.long SYMBOL_NAME(sys_creat)
.long SYMBOL_NAME(sys_link)
.long SYMBOL_NAME(sys_unlink) /* 10 */
.long SYMBOL_NAME(sys_execve)
.long SYMBOL_NAME(sys_chdir)
.long SYMBOL_NAME(sys_time)
.long SYMBOL_NAME(sys_mknod)
.long SYMBOL_NAME(sys_chmod) /* 15 */
:
.long SYMBOL_NAME(sys_ni_syscall) /* sys_remap_file_pages */
.long SYMBOL_NAME(sys_ni_syscall) /* sys_set_tid_address */
KernelGrok dường như có một trang hữu ích cho thấy hệ thống cuộc gọi, tên, thông số và nơi tìm nguồn. Ví dụ: (hơi định dạng lại):
0 sys_restart_syscall
eax = 0x00
kernel/signal.c:2058
1 sys_exit
eax = 0x01
ebx = int error_code
kernel/exit.c:1046
2 sys_fork
eax = 0x02
ebx = struct pt_regs *
arch/alpha/kernel/entry.S:716
3 sys_read
eax = 0x03
ebx = unsigned int fd
ecx = char __user *buf
edx = size_t count
fs/read_write.c:391
4 sys_write
eax = 0x04
ebx = unsigned int fd
ecx = const char __user *buf
edx = size_t count
fs/read_write.c:408
:
v.v. Nhưng, là trường cũ, tôi thích giữ nguồn hạt nhân địa phương và chỉ sử dụng grep
:-)