XV6でシステムコール/ユーティリティを追加する方法への参照を教えてもらえますか/教えてください
グーグルでの徹底的な検索は無駄であり、難しい方法をハッキングすることもこれまでのところ生産的ではありませんでした。
参考書には、助けを借りて始めるためのhelloworldの例もありませんでした。
これを読んでください: http://Zoo.cs.yale.edu/classes/cs422/2010/xv6-book/trap.pdf
それはそれを非常によく説明しています
Xv6のシェルで呼び出すことができるシステムコールを追加するには、5つのファイルで何かを行う必要があります
sys.Sマクロを使用して、ユーザーの呼び出しをシステムコール関数に接続することを定義します
defs.h新しいシステムコールの前方宣言を追加します
Xv6でシステムコールを追加する簡単な例を説明します。
現在実行中のユーザープログラムのアドレススペースサイズを取得するには、システムコールを追加する必要があると想定します。システムコールにgetmysize()という名前を付けて、ユーザープログラム内からこのシステムコールを呼び出すことができます。
ユーザープログラムは次のように書くことができます。プログラム名をmyprog.c xv6にユーザープログラムを追加する方法を知っていると思います。したがって、トピックから外れるため、ここではこれらの手順については触れません。
#include "types.h"
#include "stat.h"
#include "user.h"
int main(void){
printf(1,"The size of my address space is %d bytes\n", getmysize());
exit();
}
このプログラムは、システムコールの動作を示すことのみを目的として作成されています。
次に、システムコールをxv6に追加します。
まず、ファイルの最後に次の行を追加しますsyscall.h。
#define SYS_getmysize 23
ここでの23は、ファイルに追加する行の前に指定された番号によって変わる可能性があることに注意してください。つまり、追加する行の前の行のシステムコール番号が22の場合、その行の番号は23になります。そのように単純です。
ここで、次の行をsyscall.cファイルに追加します。
extern int sys_getmysize(void);
システムコールの配列で、に次の行を追加します。
[SYS_getmysize] sys_getmysize,
ファイルsysproc.cに、プロセス処理またはメモリ管理に関連するシステムコールの場合、システムコールの実装が行われる場所に、システムコールの実装を次のように記述します。
int
sys_getmysize(void)
{
return proc->sz;
}
sys.Sファイルに、次の行を追加します。
SYSCALL(getmysize)
次に、ser.hファイルに以下を追加します。これは、ユーザープログラムがシステムコールを認識する方法です。
int getmysize(void);
OK。これで、ユーザープログラムを実行して、システムコールがどのように実行されるかを確認する準備が整いました。
システムコールを呼び出すmyprog.cを実行すると、この同じプログラムのアドレススペースのサイズが、ここで実装した内容に従って返されます。