assembly - 如何从 USB 启动 512 字节引导加载程序 (ARM x86)

标签 assembly boot

它是一个简单的非特定于操作系统的汇编程序,旨在与我的 PC 架构配合使用。由NASM的Linux版本编译。

我尝试将其插入 USB,当我在 BIOS 中选择从 USB 启动时,它确实尝试从 USB 启动。和沉默。硬件继续运行,但我的程序应该将字符打印到屏幕上。只是黑屏,左上角有一个闪烁的白色光标(我认为它属于BIOS)。

也许 BIOS 没有将我的"file"算作引导扇区。

这是USB内容(Win7的截图,不是英文,但你可以很容易地理解它是什么):

属性

enter image description here 我需要什么东西才能使 USB 驱动器可启动吗?我需要像主引导记录一样对其进行分区吗?

最佳答案

几年前,我成功创建了一个可启动的 shell 模拟器,它应该从 USB 驱动器启动,我也多次陷入解决这个问题的困境,但为了实现这一点,你需要将 MBR 放入是驱动器第一个扇区的 Bootstrap ,具有特殊的引导签名,它的长度必须为 512 字节,从那里您可以引导驱动器上的任何其他扇区,其中将包含其余的可 Bootstrap 。因此,请确保您的引导加载程序代码正确并且位于驱动器的第一个扇区。

http://wiki.osdev.org/Bootloader

http://forum.osdev.org/viewtopic.php?f=1&t=20561

还要确保您的系统支持 USB 启动功能,您可以通过 BIOS 启动设置轻松找出它。

关于assembly - 如何从 USB 启动 512 字节引导加载程序 (ARM x86),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38630714/

相关文章:

assembly - 在 Rust 内联汇编中使用字符串常量

assembly - 在程序集问题中将大写字母转换为小写字母

linux - 内核参数

Android Boot-Up BroadCast 不调用

assembly - 如何检测卷引导记录(分区引导扇区)中的保护模式?

linux - 如何调试间歇性失败的 upstart 脚本?

c - WinMain 入口点 - 汇编代码看起来好像没有参数传递给入口点

c++ - 语言如何与硬件对话?

Android 应用程序不会在启动时启动

c++ - 在 Android NDK 项目中使用内联 ARM asm