[英]How to add a new system call in OS/161?
我試圖在OS / 161代碼中添加一個新的系統調用,但是在弄清楚將原型添加到哪里時遇到了麻煩。 我相信您應該將其添加到內核空間和用戶空間中,但是我不確定要放入原型的文件是什么。在某處是否有指南說明如何在OS / 161中添加示例系統調用?
作為測試,我試圖添加一個函數printone()
,當用戶運行該程序時,它將僅打印“ 1”。
在callno.h
或定義了SYS_fork
和SYS_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.