[英]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。 一無所獲。
好,
open
在user.h中聲明。
open
在usys.S中定義:
讓我們來看看:
SYSCALL(open)
將轉化為
.globl open;
open:
movl $SYS_ ## open, %eax;
int $T_SYSCALL;
ret
發生了什么?
調用函數open
%eax
設置為SYS_open
(值為15(請參見syscall.h ),並且SYS_open
在sysfile.c中定義 T_SYSCALL
(64請參見traps.h )被引發。 open
返回。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.