问题标签 [xv6]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
73 浏览

operating-system - gdb 没有在 kern/entry.S 中达到断点

我试图让 gdb 在内核中启用分页的部分(kern/entry.S)中断,我在反汇编程序显示的地址(如 kernel.asm 中)设置了一个断点,但它没有被命中。有人可以帮我理解为什么会这样。早些时候我也无法在引导加载程序 boot/boot.S boot/main.c 中命中任何断点,例如我无法命中 bootmain(使用函数名称设置断点告诉我符号尚未加载),我可以检查 nm/objdump 输出,我可以清楚地看到 bootmain 已定义。

请帮助我理解我做错了什么

0 投票
1 回答
236 浏览

c - GDB 无法识别新文件/行

我正在尝试使用 qemu 模拟器和 gdb 内核调试 xv6。

但是,gdb 不会识别我对文件所做的任何添加。例如,它不会识别新文件,甚至是现有文件中的新行,例如:

在文件 x86.hi 中添加了另一个函数,这是代码(我添加了 cas):

gdb 将识别 lcr3,但不会识别 cas,但是,当我实际搜索文件时,我可以找到以下行:

我正在使用这个makefile(基本的xv6 makefile): https ://github.com/mit-pdos/xv6-public/blob/master/Makefile

很高兴得到任何帮助。谢谢你。

0 投票
1 回答
531 浏览

linux - 如何将“top”系统命令添加到 xv6?

我是初学者,对自己编写系统命令一无所知。这是我的课堂作业。任何帮助都会很棒。谢谢。

0 投票
3 回答
2904 浏览

macos - 在 MAC 上编译 XV6

在编译 XV6 之前,我已经阅读了这个页面来构建我自己的编译器工具链。结果是相似的。

但是,当我开始编译 XV6 时,出现错误:

我搜索了很多博客,没有人有这个问题。我使用 MAC OS X El Capitan (10.11.3)

0 投票
2 回答
597 浏览

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

当我阅读 xv6 源代码时,我对下面声明的语法感到困惑。谁能给我解释一下?

0 投票
1 回答
311 浏览

c - 从 C 程序编译和构建 C 文件

我想知道是否可以编译和构建,并最终从另一个 C 文件运行一个 C 文件(这个 C 文件最终将是一个系统调用文件)。

IE

是否有任何 C 函数可以做到这一点?

0 投票
2 回答
3288 浏览

c - 在 xv6 中实现系统调用

我正在尝试实现一个名为 getprocs() 的系统调用,它返回实际进程的数量。我已经实现了添加新系统调用的所有必要条件。这个系统调用所做的是获取表中的进程并将它们复制到结构数组中。该结构称为 uproc,其成员是 int pid、int ppid 和 char name。然后,我在 ac 文件中创建了一个程序,该程序尝试以树格式打印进程,但我在打印进程名称时遇到了麻烦。我不知道从哪里开始。下面我附上了我的代码,我在其中定义了 getprocs()、struct uproc,以及我尝试打印进程的程序。我还包括它向我抛出的错误。

proc.c 中的 getprocs() 定义:

uproc.h 中的结构 uproc:

尝试在 pstree.c 中打印进程的程序:

没有任何内容打印到屏幕上,尝试运行 pstree 后出现以下错误:

pid 3 pstree:cpu 1 上的陷阱 14 err 4 eip 0x6da addr 0x42444cb--kill proc

0 投票
2 回答
2210 浏览

linux - 如何在xv6中获取指针的页目录

这是proc.c中的'translate()'我想在给定指针的虚拟地址的情况下获取物理地址,但我不知道如何获取指针pgdir(页面目录)......

0 投票
1 回答
265 浏览

c - 在 x86 中恢复 Stackframe

我正在尝试编写一个将信号实现到 xv6 中的程序

我已经想出了如何操作堆栈(我认为),但我在恢复它时遇到了麻烦。这是我的信号传递代码:

此函数将信号帧添加到进程堆栈并保存易失性寄存器

我无法在我的void signal_return(void).

我尝试恢复框架是:

谁能指出我正确的方向?

0 投票
2 回答
1384 浏览

c - 在 xv6 中创建线程时注册指针

我想通过使用系统调用“clone()”在 xv6 中创建一个线程,但是我对堆栈创建感到困惑,因为如果我想创建一个线程,我需要创建相应的寄存器指针,例如 ebp、esp , eip。但我不知道如何设置这些寄存器指针的值。

这是xv6中clone()的代码,不知道为什么要这样设置寄存器指针的值......