繁体   English   中英

open()的定义在xv6中的位置

[英]Location of the definition of open() in xv6

我有一个分配的任务,可以让我设计自己的系统调用。 为此,我想查看开放系统调用的定义。 通过这个,我的意思是我想看看实际的open(const char *,const int)的定义方式,而不是sys_open的定义(因为我知道源代码在哪里并且可以读取它)。

在xv6的文档和xv6-public中的文件中,我都找不到定义原型的任何引用。 我和我朋友的理论是,它是在某个asm文件或某个.o文件中定义的。 会有人碰巧知道实际的源代码在哪里吗? 我将不胜感激。

尝试在源文档中打开ctrl-f,并尝试对xv6-public中的所有文件进行grep。 一无所获。

好,

openuser.h中声明。

openusys.S中定义:

让我们来看看:

SYSCALL(open)

将转化为

  .globl open; 
  open: 
    movl $SYS_ ## open, %eax; 
    int $T_SYSCALL; 
    ret

发生了什么?

调用函数open

  • 寄存器%eax设置为SYS_open (值为15(请参见syscall.h ),并且SYS_opensysfile.c中定义
  • 中断T_SYSCALL (64请参见traps.h )被引发。
  • 系统调用返回后, open返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM