我試圖寫一個簡單的系統調用XV6(文檔可用here和Github here),以瞭解它們是如何實現的。我已經使用這些步驟試圖瞭解XV6上的UNIX系統調用
- 在
syscall.c
,宣告extern int sys_hello(void)
並加入到[SYS_hello] sys_hello
陣列static int (*syscalls[])(void)
- 在
syscall.h
,定義SYS_hello
呼叫號碼22 - 在
user.h
,聲明的函數原型int hello (void);
- 在
usys.S
中,將SYSCALL(hello)
添加到宏 在
sysproc.c
,在底部int sys_hello(void) { cprintf ("Hello World System Call\n"); return 0; }
創建
hello.c
這只是調用hello()
系統調用- 新增
hello.c
到Makefile
添加的功能sys_hello(void)
並運行代碼
它的工作如預期。
現在,我的問題是,似乎syscall.c中的數組與syscall.h文件中的系統調用號碼的命令索引相匹配 但是,如果我將hello位置移動到第二個位置syscall.c並讓syscall.h中的系統命令號保持22,系統命令與以前一樣工作。在哪裏,我預計它會中斷。你能幫我理解數組syscall.c如何映射(如果這甚至是正確的話)到syscall.h系統調用號?
我對XV6和C相當陌生,所以如果這個問題看起來很愚蠢,請不要生我的氣,我只是在努力學習。
這裏是Github上鍊接到我的XV6庫叉是否有幫助:github.com/AdityaSingh/XV6