gpt4 book ai didi

operating-system - 错误系统调用 : Function not implemented

转载 作者:行者123 更新时间:2023-12-04 05:41:05 31 4
gpt4 key购买 nike

我正在尝试向 Linux 内核添加新的(虚拟的)系统调用。

1) 我在 linux-source/kernel/myfile.c 下添加了系统调用代码,并相应地更新了 Makefile。

2) 更新了 syscall.h、unistd.h 和 entry.S 文件以反射(reflect)新的系统调用 (pedagogictime(int flag,struct timeval *time))

然后编译内核并安装并重启镜像。

当我运行时:cat/proc/kallsyms | grep "pedag",这是我得到的输出

0000000000000000 T sys_pedagogictime0000000000000000 d event_exit__pedagogictime0000000000000000 d event_enter__pedagogictime0000000000000000 d __syscall_meta_教学时间0000000000000000 d 类型_pedagogictime0000000000000000 d args__pedagogictime0000000000000000 t trace_init_flags_enter__pedagogictime0000000000000000 t trace_init_flags_exit__pedagogictime0000000000000000 t __event_exit__pedagogictime0000000000000000 t __event_enter__pedagogictime0000000000000000 t __p_syscall_meta__pedagogictime0000000000000000 t __initcall_trace_init_flags_exit__pedagogictimeearly0000000000000000 t __initcall_trace_init_flags_enter__pedagogictimeearly

这意味着系统调用已正确注册。

在我的用户空间程序中,我正在写:

#define __NR_pedagogictime 1326 //1326 is my system call number
struct timeval *now = (struct timeval *)malloc(sizeof(struct timeval));

long ret = syscall(__NR_pedagogictime,0,now);
if(ret)
perror("syscall ");

但是我得到了错误:

“系统调用:未实现的功能”

我真的很感激任何帮助。谢谢。

编辑:

顺便说一句,syscall() 的汇编代码如下所示(如果有帮助的话):

    movl    $6, %esi
movl $1326, %edi
movl $0, %eax
call syscall
cltq

最佳答案

您选择了错误的系统调用号。看看内核如何检查系统调用数量限制 here .例如(x86,32 位):

496 ENTRY(system_call)
497 RING0_INT_FRAME # can't unwind into user space anyway
498 pushl_cfi %eax # save orig_eax
499 SAVE_ALL
500 GET_THREAD_INFO(%ebp)
501 # system call tracing in operation / emulation
502 testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)
503 jnz syscall_trace_entry
504 cmpl $(nr_syscalls), %eax
505 jae syscall_badsys
506 syscall_call:
507 call *sys_call_table(,%eax,4)
508 movl %eax,PT_EAX(%esp) # store the return value

因此,您可以看到这段代码比较了 %eax(系统调用编号)和 nr_syscalls(sys_call_table 大小)。高于或等于 syscall_badsys

您需要修改 arch/x86/include/asm/unistd_32.h标题也是。

关于operating-system - 错误系统调用 : Function not implemented,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11237420/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com