问题标签 [osdev]

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 投票
3 回答
361 浏览

gcc - GCC 4.6.2 的神秘堆栈问题

我在大学里研究 Pintos 玩具操作系统,但是在使用 GCC 4.6.2 时有一个奇怪的错误。当我推送我的系统调用参数(内联汇编中只有 3 个 pushl-s)时,堆栈上也会出现一些神秘数据,并且参数的顺序错误。设置 -fno-omit-frame-pointer 可以消除奇怪的数据,但参数的顺序仍然错误。GCC 4.5 工作正常。知道什么具体的选项可以解决这个问题吗?

注意:使用 -O0 时问题仍然存在。

0 投票
3 回答
6491 浏览

kernel - 有没有足够好的小内核来学习 osdev?

我想了解更多关于 osdev 的信息。所以我考虑向其他小内核学习,以便在 osdev 上做得更好。有没有什么好的内核可以学习osdev?当然,它必须是 GPL,这样我才能访问源代码并可以自由修改它。

0 投票
3 回答
200 浏览

osdev - 是否有 PoC 空操作系统?

为了好玩,我想编写在无操作系统硬件上运行的代码。我认为编写将在 VM(如 VMware 或 virtualbox)中运行的代码会很好。但是我不想从头开始。我希望 C++ 运行时可用。允许我读/写的东西(可能是 FAT32 文件系统代码)。文本图形,如果我可以在屏幕上绘制图形(逐个像素。sdl 支持将是一个奖励,但不是必需的)。

如果需要,我会编写自己的线程。我将编写操作系统所需的所有其他内容(我想使用的)。我只想要一个基本的文件系统、gfx 和键盘/鼠标支持。

0 投票
1 回答
483 浏览

dynamic - Implementing a runtime library loader

I've been contemplating on writing a dlopen(), dlsym(), dlclose(), dlerror(), like library for one of my embedded projects where not even a C library exists (for which I already wrote my own C/C++ libraries for which can be found here www.libcaprice.com). But what's bugging me is implementing this dynamic library loader. I've taken a look at the paper: http://www.sco.com/developers/devspecs/gabi41.pdf But I can't seem to wrap my head around relocation and how you initialize the GOT.

At first I figured it should be easy to fopen() a library, and walk over the ELF header, validate it's a correct dynamic library, then search for some symbols when dlsym() is used. The problem with this is the library itself needs to be initialized, or more specifically the GOT. There also needs to be some relocation done to ensure that things are within certian bounds and allignment.

I've taken a look at some user-space implementations of this functionality, and they seem to be rather long, complex, and undocumented. So my question really is: are there any stand-alone opensource implementations of dydl that are licensed under a permissive licene, MIT or public domain perferably. Otherwise if there are none, and I will have to implement my own, can someone point me in the right direction of where I could start?

Please don't link the Application V Binary Interface Specification as I've already read the parts about dynamic linking and loading, and none seem to explain the concept of relocation in an understandable way.

0 投票
2 回答
2627 浏览

osdev - 内存映射的 I/O 地址从何而来?

我在搞一些业余爱好者的操作系统开发,我对内存映射的 I/O 地址有点困惑。我了解整个内存映射 I/O 概念,但我试图弄清楚开发人员如何获取地址来操作硬件。

这些地址是硬件供应商指定的,还是所有计算机的某种标准地址?例如,用于文本打印的 VGA 内存从地址 0xB8000 开始。这是每台 x86 机器的标准吗?如果是这样,谁制定了这个标准?例如,如果我想与以太网卡通信,我如何知道它用于通信的地址或端口?

提前致谢。

0 投票
1 回答
363 浏览

debugging - Ubuntu 11.10 的操作系统调试器

我一直在进行操作系统开发(不是构建 Linux 内核),并且已经到了需要调试器的地步,用于我的最新操作系统。我试过 Bochs(在我的 Win 7 分区下),但它无法识别我的 USB(它未格式化,我现在正在读取特定的扇区。)我宁愿在 Ubuntu 11.10 下做一些事情。

是否有可以让我为 Ubuntu 11.10 调试自定义构建操作系统的调试器?

0 投票
3 回答
1030 浏览

gcc - 加载 SSE 寄存器

我正在为操作系统开发课做作业项目。一项任务是在中断时保存 SSE 寄存器的上下文。现在,保存和恢复上下文很容易(fxsave/fxsave)。但我有测试的问题。我想将相同的样本日期放入其中一个寄存器,但我得到的只是错误中断 6。这是代码:

我在互联网上搜索解决方案。我得到的只是它可能与有效地址空间有关。但我不知道它是什么。

0 投票
2 回答
4050 浏览

cross-compiling - autotools:C 编译器无法创建可执行文件

我正在 OS X 上构建 x86_64-elf 内核。我的构建系统是 autotools。我成功编译 gcc 以在 OS X 上为 x86_64-elf 进行交叉编译。当我运行从 autotools 生成的配置脚本时,我遇到了一个问题:

所以我查看 config.log 并查看:

这很有意义。交叉编译器不会生成可执行文件,因为没有关联的运行时。但我不需要或不希望我的编译器生成可执行文件,我将为我的引导加载程序适当地链接它。我如何告诉 autotools 不要检查这个?

0 投票
1 回答
5915 浏览

operating-system - 识别一般保护故障 (x86) 上的故障地址

我正在尝试为 x86 上的一般保护故障 (GP#13) 编写 ISR。我无法从 INTEL 文档中找出如何找出导致异常的错误地址。我知道对于页面错误异常(GP#14),cr2 寄存器保存错误地址。任何帮助表示赞赏。

0 投票
1 回答
508 浏览

operating-system - entry() 从我在 Elf 中设置的入口点进入不同的地址

最近我正在学习操作系统。我想写一个简单的引导加载程序,将实模式更改为保护模式,然后加载简单的内核。
但我无法弄清楚入口地址问题。
起初我将引导加载程序放在 OS.img(qemu) 的第一个扇区,然后内核从第二个扇区开始。
这是我的内核的 readelf 结果: 在此处输入图像描述
入口点地址是 0x800c。
而LMA和VMA如下:
在此处输入图像描述
bootloader的一部分,它读取elf类型的内核,然后进入entry(),也就是入口点地址。
在此处输入图像描述
但是,当我反汇编引导加载程序时,entry() 如下: 在此处输入图像描述
调用 *0x8018,而不是 *0x800c。
我不知道为什么会这样。请你帮助我好吗?