问题标签 [fat16]

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 投票
2 回答
180 浏览

assembly - 引导加载程序加载自身而不是内核

我目前正在研究用 x86 NASM 程序集编写的引导加载程序,旨在从 FAT16 格式化磁盘加载内核(R.BIN)。它并没有这样做,在合并了用于调试的短消息(A、B、C、D、J、!;涉及它们的行标有星号)之后,我发现引导加载程序一直到点它完美地跳转到加载的内核,尽管它没有跳转到内核,而是似乎再次加载自己。

为了测试引导加载程序,我有一个已安装的空白映像,我一直在使用以下命令写入引导加载程序:( dd if=LOADER.BIN of=/dev/loop0 我还复制了 R.BIN 到它)之后,我将保存这个新映像,并在虚拟盒子。

这是我的完整代码:

正如我所说,引导加载程序似乎正在按计划执行所有操作,直到跳转到内核,当它在调试消息开始时重新开始并再次循环。

0 投票
1 回答
205 浏览

assembly - FAT16 Bootloader 仅加载文件的第一个簇

我目前正在修复我为加载自定义实模式 x86 内核(SYS.BIN)而编写的引导加载程序。我设法让它读取根目录和 FAT,并从文件系统加载一个小型内核,所有这些都在引导扇区内。但是,我开始使用更大的内核对其进行测试,并且似乎引导加载程序不会加载多个集群。我根据另一个类似的引导加载程序检查了我的代码,在加载多集群文件时,它似乎在有效地做同样的事情。主要区别在于我将第一个 FAT 加载到 segment 中0x3000,将根目录加载到 segment 中0x3800,以便内核可以访问它们。(我完全搞砸了分割吗?)

我可能应该提到我正在通过使用 NASM 编译来测试它,将生成的BOOT.BIN文件写入原始 32M 映像的第一个扇区,将其安装到循环设备上,复制SYS.BIN并创建该循环设备的新映像,这然后我将 QEMU 作为硬盘放入。我确信它只是加载文件的第一个集群。

特别是,我相信导致问题的代码可能在这里:

这是我的完整代码,包括 BPB:

在此先感谢您的帮助。

更新:我在 BOCHS 调试器中运行了这个,似乎程序正在将单词加载cluster0x0003under .load_cluster,但随后0x0000.next_cluster几条指令下加载。

0 投票
1 回答
141 浏览

assembly - 我的引导加载程序无法正确加载完整文件 (FAT16)

我一直在编写一个小型操作系统,并且一直使用虚拟机对其进行测试,特别是它可以在 QEMU、VMWare 和 VirtualBox 上运行。内核希望从 HDD 启动,因此为了在真实硬件上对其进行测试,我将其刻录到真实 HDD 并将其连接到真实 PC。从那里开始就是一场灾难!一切正常。我已经部分修复了我能找到的所有错误,但我真的不知道是什么原因造成的:VBR 在被 MBR 加载后,实现只加载第二阶段引导加载程序的一部分;在 BOCHS 中,它仅加载第一个集群,但在真实 pc 中,内存中加载的代码更少。处理 FAT16 的所有代码都在一个文件中,但它仍然太大而无法在此处发布,因此我将在 GitHub 上提供其链接。此文件 ( /boot/include/fat16.inc ) 包含在主 VBR 文件 (/boot/src/vbr.asm)。vbr.asm 中可能会丢失一些初始化,但由于空间限制,它们会在 MBR 文件 ( /boot/src/mbr.asm ) 中处理。

编辑

如果由于某些原因 GitHub 存储库丢失了,我将发布 fat16.inc 的代码以供未来的读者使用:

0 投票
1 回答
18 浏览

hex - 如何找到文件的第一个簇/块?

我有一个包含以下信息的 FAT16 驱动器: 在此处输入图像描述 每扇区字节数:512 字节 (0x200)

每个集群的扇区数:64 (0x40)

保留扇区:6 (0x06)

FAT 数量:2 (0x02)

根条目数:512 (0x0200)

扇区总数:3805043 (0x3a0f73)

每个文件分配表的扇区数:233 (0xE9)

根目录位于扇区 472 (0x1d8) 在此处输入图像描述

我正在寻找包含以下详细信息的文件:

文件名称:LOREMI~1

文件扩展名:TXT

文件大小:3284 字节 (0x0cd4)

第一个集群:660 (0x294)

但是,我承认文件簇的开始位于扇区 42616。我的问题是我应该使用什么等式来产生 42616? 在此处输入图像描述

我很难弄清楚这一点,因为除了 Tavi Systems 制作的教程之外几乎没有任何关于此的信息,但涉及此的部分很难理解。