簡體   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