问题标签 [bootloader]

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 投票
1 回答
1603 浏览

operating-system - 引导加载程序背后的理论

我从 osdev 下载了几个引导加载程序并成功加载了内核。但现在我想学习引导加载程序背后的理论。我想知道系统启动的原因以及引导加载程序代码背后的所有内容。谁能给我一个链接或一本书的链接?提前致谢。系统是x86。

0 投票
2 回答
425 浏览

assembly - 汇编代码说明

我已经开始学习组装了。我遇到了这些线。

我对声明的第一行 "bpbBytesPerSector: DW 512" 感到困惑。在这里,我认为 DW 是定义词。所以 DW 512 表示定义 512 个字表示 1024 个字节。现在标签是“bpbBytesPerSector”。每个扇区的字节数应该是 512(这是我的想法)。同样,我无法理解接下来的两行。我对此完全感到困惑。任何人都可以解释我。提前谢谢。

0 投票
5 回答
3833 浏览

assembly - 汇编代码说明

我已经开始学习组装了。我遇到了这些线。

在第二行代码中,代码段被推送到堆栈(我认为是这个)。我在很多代码中都看到过。为什么我们应该这样做以及它如何确保 DS =CS?在第三行 DS 是从堆栈中弹出的(我认为这个)。为什么要完成?它从堆栈中弹出意味着它之前被推入堆栈。没有代码。任何人都可以向我解释这一切吗?提前致谢。

0 投票
3 回答
7984 浏览

assembly - 如何通过 BIOS 中断处理实模式下的键盘?

我必须为可以运行计算机的操作系统编写代码。它就像一个桌面计算机。为此我正在阅读breakthorn操作开发系列我已经完成了bootloader的第二阶段引导加载程序处于实模式。在此之后,作者正在解释保护模式。我不想使用保护模式。我没有时间做那个。所以我想通过使用bios中断在实模式下编写计算器。可能吗?我认为它可以写在引导加载程序的第二阶段(我不确定。)意味着我不必使用内核(我不确定)。我不知道如何使用 BIOS 中断来处理键盘。任何人都可以提供一个链接来帮助我吗?如果我在上面假设的任何错误是错误的,请纠正我。在此先感谢。

0 投票
2 回答
305 浏览

assembly - 关于引导加载程序的问题

我正在关注breakthorn操作开发系列学习bootloader。在这个页面中,这些是三行代码:

在第二行中,他在软盘中加载了 7c00 处的 bios。为什么不在 0000 上?我检查了在哪里将引导加载程序存储在软盘映像上?. 这里也给出了同样的事情。但原因还没有解释。有人可以向我解释一下吗?提前致谢。

编辑:我很困惑,因为在稍后教程的同一站点中,代码是:

然后主要

现在在这里他为什么使用org 0?那么他为什么将地址复制到所有寄存器中?对不起,如果这是一个愚蠢的问题。我对汇编编程非常陌生,刚刚开始阅读有关引导加载程序的信息。

0 投票
3 回答
3542 浏览

c - 应用程序和引导加载程序代码中的向量表问题

我对引导加载程序代码中的向量表(中断表)有疑问,我的应用程序代码无法访问。好吧,主要问题是引导加载程序和应用程序代码中 ISR 的地址不同。所以,我的应用程序无法启动。关于如何让我的应用程序代码从我的向量表中找到正确的 ISR 例程地址的任何建议?

我正在使用 HCS08 和 Code Warriors。它是一个 USB Bootloader,由编程器加载到 FLASH 中,再通过 USB 加载一个 S19 文件。所以,我的 FLASH 上有两个程序。

0 投票
9 回答
955 浏览

algorithm - 从零开始的操作系统

虽然标题是我问题的一部分,但第二部分不会那么简单。第一部分:假设我想创建自己的操作系统。我该怎么做呢?我知道我必须创建一个引导加载程序。但我从那里去哪里?我必须将它发送到另一个程序,但要做到这一点,该程序必须已经存在,并且我必须确切知道它在内存空间中的位置。任何提示/教程?

第二个问题。我目前正在研究内存管理,我想我有一个关于放置算法更好实现的理论,但除了理论上我没有办法真正测试它。一旦我可以创建操作系统(所以这是供将来参考),我如何真正弄乱主内存并移动进程?

PS:另外,我是否必须编写自己的文件系统?

编辑:在阅读了当前的评论后,我想修改我所说的。当我说“第二部分不会那么简单”时,这似乎是一个糟糕的选择。我知道两者都将是非常困难的努力,但这对我来说并不重要。我只是喜欢学习新事物。我并不是要有人为我写教程,只是为了给我指明正确的方向。

0 投票
1 回答
2873 浏览

hid - PIC24 固件引导加载程序不启动加载的程序

我知道这可能不是解决这个问题的最佳地点,但我尝试了 Microchip 论坛,但尚未得到回复。我正在努力让一个 HID 引导加载程序项目在我使用 PIC24FJ64GB002 构建的原型板上工作。我修改了示例 HID Bootloader 项目以与我的板一起使用,我修改了示例 HID 鼠标项目以也与我的板一起使用。当我使用引导加载程序代码对设备进行编程时,它运行良好,Microchip 引导加载程序 Windows 程序找到该设备并显示“已连接设备。”。但是当我尝试将鼠标程序的十六进制文件加载到我的设备上时,它说它成功完成但鼠标程序永远不会运行。我不确定我是否使用了正确的链接器脚本。

0 投票
3 回答
1805 浏览

linux - catch the serial number from bootloader

I want to catch the serial number which has been written into the U-Boot environment.

Bootloader :U-boot 1.2 kernel:2.6.24 tool-chain:arm-linux-gcc-3.4.1 rfs :busybox-1.9.2

Please tell me how can I do this?

Thanks a lot.

0 投票
2 回答
1066 浏览

kernel - 我在 D 中的操作系统内核:一些嵌入的字符串不起作用

我知道这是一个很难回答的问题,主要是因为有很多事情可能是错误的,很难确定。但我会提供尽可能多的信息;希望这会有所帮助。

我开始使用 D 语言和 Digital Mars D 编译器编写自己的内核,在弄清楚如何生成可以重定位的平面二进制文件后遇到了很多麻烦,我终于想出了生成一个普通 PE 文件的想法地址,并用字节(NOP 操作码)0xC0000000替换其所有标头。0x90这工作得非常好,我可以在屏幕上写东西,设置分页,进入保护模式等等。当然,借助 16 位基于汇编的引导加载程序的帮助。

一切都很好,也就是说,我决定移植 D 运行时库以在我的内核中使用。我设法提取了该库的一个子集并对其进行了修改以将其编译到我的应用程序中。然后我运行我的程序。(注意:我根本没有 使用该库;我的代码是启动后执行的第一个代码——发生的第一件事是打印"Kernel"到屏幕上,在此之前没有调用任何运行时代码。)

AD 数组(因此是字符串,因为字符串只是 a char[])只不过是一个具有指针和大小成员的结构,因此在 32 位系统上它将是 8 个字节大。有趣的是,当我运行我的程序时,结构的成员显示为零——也就是说,指针和大小都为零。(我通过在屏幕上打印指针的值以及长度成员来验证这一点——两者都为零。)一旦我删除了运行时的源代码(无论如何都没有执行),它们工作得很好.

我将其缩小为两种可能性:

  1. 堆栈不知何故设置不正确:我排除了这一点,因为没有运行时库一切正常,我通过反汇编文件确认在我的代码之前没有执行其他代码。

  2. PE 文件部分有些有趣:我检查并发现运行时版本中有两个 TLS(线程本地)变量。果然,当我让它们共享(而不是线程本地)时,我的代码工作了!但是,当我调用我在不同文件中编写的代码时,我的代码仍然表现出同样kernel.d的问题——只有作为启动文件的代码在使用字符串时表现正确;在其他文件中,数组再次为零。

现在,有没有人猜测为什么会发生这种情况?

如果需要更多信息,我很乐意发布。

谢谢!