簡體   English   中英

如何在OS / 161中添加新的系統調用?

[英]How to add a new system call in OS/161?

我試圖在OS / 161代碼中添加一個新的系統調用,但是在弄清楚將原型添加到哪里時遇到了麻煩。 我相信您應該將其添加到內核空間和用戶空間中,但是我不確定要放入原型的文件是什么。在某處是否有指南說明如何在OS / 161中添加示例系統調用?

作為測試,我試圖添加一個函數printone() ,當用戶運行該程序時,它將僅打印“ 1”。

callno.h或定義了SYS_forkSYS_read類的常量的位置添加另一個系統調用號,例如SYS_print1

找到用於選擇函數的地方,看起來應該是mips_syscall() 雖然,我不確定為什么在此版本的源代碼中只有SYS_reboot用來調用sys_reboot() 此源代碼參考可能不完整。 該評論表明:

00049 mips_syscall(struct trapframe *tf)
00050 {
...
00070         switch (callno) {
00071             case SYS_reboot:
00072                 err = sys_reboot(tf->tf_a0);
00073                 break;
00074 
00075             /* Add stuff here */
00076  
00077             default:
00078                 kprintf("Unknown syscall %d\n", callno);
00079                 err = ENOSYS;
00080                 break;
00081         }
...
00108 }

同樣,添加您的case SYS_print1:並在專用功能(例如sys_print1()實現該功能。

對於內核方面應該是這樣。

可以在unistd.h聲明print1()的用戶模式原型以及read()等。

看起來read()的用戶模式實現可能在程序集文件中。 這是合理的,因為最后它應該執行C中直接不可用的MIPS syscall指令。您應該以類似的方式實現print1() (將SYS_print1加載到適當的寄存器中並執行syscall )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM