标签: xv6

如何在xv6中添加系统调用/实用程序

任何人都可以告诉我/指出如何在XV6中添加系统调用/实用程序

谷歌上的详尽搜索是徒劳的,而且通过艰难的方式进行黑客攻击到目前为止还没有成效.

参考书也没有任何帮助世界的例子,从任何帮助开始,非常感谢

operating-system system-calls xv6

15
推荐指数
3
解决办法
3万
查看次数

C功能说明

有人可以向我解释一下这个函数的语法吗?其中SYS_fork是常量,sys_fork是一个函数.

static int (*syscalls[])(void) = {
[SYS_fork]    sys_fork,
[SYS_exit]    sys_exit,
[SYS_wait]    sys_wait,
[SYS_pipe]    sys_pipe,
[SYS_read]    sys_read,
[SYS_kill]    sys_kill,
[SYS_exec]    sys_exec,
};
Run Code Online (Sandbox Code Playgroud)

谢谢!

c xv6

15
推荐指数
1
解决办法
939
查看次数

如何在Windows上编译和运行xv6?

我们正在课程中教授xv6.目前我们使用windows中的putty登录我们学校的linux服务器.

在那里,我们使XV6的源代码更改(使用vim)然后编译并在运行QEMU简单

make clean
make
make qemu-nox
Run Code Online (Sandbox Code Playgroud)

它并不总是可以连接到他们的服务器,因此我希望能够编译和运行带有Windows的xv6(显然在一些模拟器中).

我可以用什么模拟器进行上述工作?(编辑代码,编译和运行)以及如何?

unix windows compilation virtual-machine xv6

9
推荐指数
2
解决办法
5482
查看次数

使用gdb在xv6上调试用户代码

我正在做一个基于xv6的操作系统类,我编写了一个需要在其上运行的程序.

我知道我可以调试内核代码,make qemu-gdb但我不确定如何调试我自己的用户程序.

可以说我想调试cat,我该怎么做呢?

谢谢

PS是不是有xv6标签?这个问题是否应该在这里?

gdb qemu xv6

8
推荐指数
2
解决办法
4907
查看次数

如何在XV6中将值传递给系统调用函数?

我试图在XV6中创建一个简单的基于优先级的调度程序.为此,我还必须创建一个允许进程设置其优先级的系统调用.我已经完成了创建系统调用所需的所有内容,如此处和其他地方所述:

如何在xv6中添加系统调用/实用程序

问题是,当我调用函数时,我无法传递任何变量,或者更确切地说,它运行时没有任何错误,但正确的值不会显示在函数内部.

外部声明(syscall.c):

...
extern int sys_setpty(void);

static int (*syscalls[])(void) = {
...
[SYS_setpty]  sys_setpty,
};
Run Code Online (Sandbox Code Playgroud)

系统调用向量(syscall.h):

#define SYS_setpty 22
Run Code Online (Sandbox Code Playgroud)

实现(sysproc.c):

void
sys_setpty(int pid, int pty)
{
  cprintf("function pid: %d \n", pid);
  cprintf("function pty: %d \n", pty);
}
Run Code Online (Sandbox Code Playgroud)

(defs.h和user.h):

void setpty(int, int);
Run Code Online (Sandbox Code Playgroud)

宏(usys.S):

SYSCALL(setpty)
Run Code Online (Sandbox Code Playgroud)

功能调用:

setpty(3, 50);
Run Code Online (Sandbox Code Playgroud)

输出:

function pid: 16843009
function pty: 16843009
Run Code Online (Sandbox Code Playgroud)

这些值始终是完全相同的确定数字:16843009.我已经通过为pid和pty分配值来检查cprintf是否正常工作.我花了大约6个小时尝试了我能想到的所有可能的组合,并且我开始认为没有内置的机制来通过XV6中的系统调用传递值.我错过了什么吗?先感谢您.

c system function call xv6

8
推荐指数
1
解决办法
1万
查看次数

声明"extern struct cpu*cpu asm("%gs:0");"是什么意思?

当我正在阅读xv6源代码时,我对下面声明的语法感到困惑.有谁可以向我解释一下?

extern struct cpu *cpu asm("%gs:0");
Run Code Online (Sandbox Code Playgroud)

x86 gcc inline-assembly xv6

6
推荐指数
2
解决办法
428
查看次数

如何使用GDB使用SMP(对称多处理器)调试QEMU?

我是一个研究生操作系统类,我们使用QEMU模拟我们的内核,并使用gdb进行调试.调试已经足够直截了当......直到现在.如何将gdb连接到我在QEMU中运行的其他CPU?

我们的makefile允许我们在一个终端中使用"make qemu-nox"或"make qemu-nox-gdb"启动qemu,如果我们使用后者,那么使用gdb在另一个终端中使用"gdb"连接到它(在同一目录中).因此,我不太确定如何再次连接到同一个QEMU,而是连接到另一个处理器(我现在一共运行4个).

c debugging gdb qemu xv6

6
推荐指数
1
解决办法
982
查看次数

错误:找不到有效的 QEMU 可执行文件

我正在听 MIT 操作系统工程讲座。我已经安装了 Qemu 并成功运行了它,我可以在该文件夹中使用这些命令 "make clean" "make" 和 "make qemu" 。Labs 还有一个单独的文件夹...根据说明,我们必须在 labs 文件夹中使用“make”命令,但是当我在 labs 文件夹中使用 make 命令时,我收到以下错误

*** Error: Couldn't find a working QEMU executable.
*** Is the directory containing the qemu binary in your PATH
*** or have you tried setting the QEMU variable in conf/env.mk?
***
***
*** Error: Couldn't find a working QEMU executable.
*** Is the directory containing the qemu binary in your PATH
*** or have you tried setting the QEMU variable in …
Run Code Online (Sandbox Code Playgroud)

qemu path xv6

6
推荐指数
1
解决办法
4861
查看次数

使用 qemu 启动 xv6

我正在尝试使用 qemu 启动 xv6,但每当我运行时make qemu,我都会收到以下错误

\n
usertests.c: In function \xe2\x80\x98sbrktest\xe2\x80\x99:\nusertests.c:1461:13: error: writing 1 byte into a region of size 0 [-Werror=stringop-overflow=]\n 1461 |   *lastaddr = 99;\n      |   ~~~~~~~~~~^~~~\ncc1: all warnings being treated as errors\nmake: *** [<builtin>: usertests.o] Error 1\n
Run Code Online (Sandbox Code Playgroud)\n

运行make qemu-nox导致同样的错误。我正在使用Kubuntu 21.10操作系统。这里是一种解决方法,但如果有人发现,我正在寻找解决方案。

\n

operating-system qemu xv6

6
推荐指数
1
解决办法
1889
查看次数

`x/24x $esp` 是什么意思?

我正在运行xv6- 由 MIT 制造的操作系统。我正在运行 gdb 来检查堆栈指针(?)。我正在运行gdb以查看堆栈指针寄存器的值。

我的教授说“让我们看看堆栈”然后输入x/24x $esp.

问题:什么是x, /, 24, $esp??? $esp 只是一个显示堆栈寄存器当前地址的堆栈指针?

我得到的输出是:

(gdb) x/24x $esp
0x7bdc: 0x00007db4  0x00000000  0x00000000  0x00000000
0x7bec: 0x00000000  0x00000000  0x00000000  0x00000000
0x7bfc: 0x00007c4d  0x8ec031fa  0x8ec08ed8  0xa864e4d0
0x7c0c: 0xb0fa7502  0xe464e6d1  0x7502a864  0xe6dfb0fa
0x7c1c: 0x16010f60  0x200f7c78  0xc88366c0  0xc0220f01
0x7c2c: 0x087c31ea  0x10b86600  0x8ed88e00  0x66d08ec0
Run Code Online (Sandbox Code Playgroud)

我从谷歌找到了一些参考:

x/6x $esp 以查看 int 放入堆栈中的内容。

(gdb) x/6x $esp
0x7bdc: 0x00007db4  0x00000000  0x00000000  0x00000000
0x7bec: 0x00000000  0x00000000
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义。

PS此时我需要找到堆栈的开头和堆栈上的项目。(一旦我理解了这个命令!)

参考: …

memory assembly stack operating-system xv6

5
推荐指数
1
解决办法
3256
查看次数