繁体   English   中英

通过汇编程序在引导加载程序级别执行 C 程序

[英]Execute C program at bootloader level via Assembler

我在 Assembler 中编写了一个自定义(非常基本的“Hello world”)引导加载程序,我想在其中执行一个 C 程序,C 程序会工作,还是由于stdio.h文件丢失而失败? 我如何将 C 程序与引导加载程序捆绑到一个 single.bin 文件中以dd到 flash 驱动器/CD?

我不确定“丢失的stdio.h ”是什么意思,但是许多 C 运行时函数,包括那些在stdio.h中原型化的函数,都是使用系统调用实现的。 如果没有操作系统运行,这些系统调用将无法工作。

可以编写在没有操作系统的情况下运行的 C 代码,例如,大多数常见的引导加载程序只有少量的汇编程序,大部分是 C 代码。 诀窍是避免使用运行时库。 系统调用(例如显示)的替代方法是 BIOS 调用和特定于硬件的 I/O。

仅举一个例子,除了动态分配之外,读取模式下的fopen还需要以下低级操作:

  • 从存储中读取数据块
  • 读取文件系统元数据(通常是超级块和根目录)
  • 处理文件系统元数据以找出文件内容的存储位置
  • 创建包含足够信息的文件 object,以便freadfgetc在磁盘上查找数据

您没有操作系统可以帮助解决这些问题,您的 C 代码将需要实现驱动程序(可能调用 BIOS)以进行块读取,并实现其他步骤的行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM