Assembly 从引导加载程序调用shell

Assembly 从引导加载程序调用shell,assembly,Assembly,我正在从头开始做一个操作系统。我已经使用互联网上的教程制作了一个hello world引导程序 不过,我在下一步就被卡住了 我需要调用一个可执行文件(基本上是ASM引导加载程序代码中的shell代码)。我在谷歌上到处搜索,找不到任何实质性的东西,也找不到一个好的解释 那么,有人能帮我将引导加载程序连接到shell吗?一小段代码作为示例将非常好(我对代码的理解更好)。我保证,我会用它来理解而不是复制任何东西 谢谢 引导加载程序和应用程序(如shell)之间的部分有点。。。实质性的。可以说,“从头开

我正在从头开始做一个操作系统。我已经使用互联网上的教程制作了一个hello world引导程序

不过,我在下一步就被卡住了

我需要调用一个可执行文件(基本上是ASM引导加载程序代码中的shell代码)。我在谷歌上到处搜索,找不到任何实质性的东西,也找不到一个好的解释

那么,有人能帮我将引导加载程序连接到shell吗?一小段代码作为示例将非常好(我对代码的理解更好)。我保证,我会用它来理解而不是复制任何东西


谢谢

引导加载程序和应用程序(如shell)之间的部分有点。。。实质性的。可以说,“从头开始制作操作系统”实际上意味着编写这一部分,通常称为内核;与此相比,引导加载程序非常小且简单

让我们以Linux为例(在32位x86上)。LinuxShell是x86操作码的集合,这些操作码期望在RAM中的固定地址加载(在编译shell或更准确地说,链接shell时选择该地址)。内核的第一项工作是设置MMU,以便shell能够查看内存。shell将通过调用内核与外部世界进行通信,并通过系统调用进行通信。在Linux-x86中,系统调用使用
int
操作码(这会触发软件中断,并且系统调用参数通常在一些寄存器中传递)。一些重要的系统调用包括
读取
写入
调用:从shell的角度来看,您在键盘上键入的内容可以从虚拟文件中读取,并通过描述符(一个整数,值为0表示“标准输入”)进行索引。这里,内核的工作是累积击键(每个击键都会触发内核接收到的硬件中断——内核应该响应硬件中断——并转换为字符),然后在应用程序请求时将它们返回给应用程序。类似地,shell在其认为的“标准输出”(描述符1)上写入的数据必须由内核转换为要显示的字符,这意味着与视频硬件对话


学习构建操作系统的一个重要资源是。Minix最初是一种学习工具,在Tannenbaum的书中有详细描述。它是开源和免费的。帮你自己一个忙,下载Minix源代码并购买这本书(或者从某个图书馆借来)。

你希望shell能做什么?我希望shell运行一些非常基本的2-3命令。说列表目录什么的。非常基本的东西。要将引导加载程序连接到该shell,我能做的最简单的事情是什么?我不确定这是否有帮助,但我打算运行这个引导加载程序,只从USB连接到外壳。我不知道这是否会有帮助,但我认为无论如何都值得一提;这取决于你打算让贝壳做什么。谢谢托马斯。我现在更好地了解大局了。但那不是我打算做的。正如Ignacio所建议的,我需要从引导加载程序文件调用一个shell(可执行文件)。