我从头开始制作操作系统。我使用来自互联网的教程制作了一个hello world bootloader。
虽然我陷入了下一步。
我需要调用一个可执行文件(基本上是来自ASM bootloader代码的shell代码)。我google了一下,找不到任何实质性的解释。
那么,有人可以帮助我将我的bootloader连接到shell吗?一小段代码作为一个例子将是伟大的(我通过代码更好地理解)。我保证,我会用它来理解而不是复制任何东西。
谢谢!
答案 0 :(得分:2)
引导加载程序和应用程序(例如shell)之间的部分是......实质性的。可以说“从头开始制作操作系统”实际上意味着编写那部分,通常称为内核;与此相比,引导程序非常小而且简单。
我们以Linux为例(在32位x86上)。 Linux shell是x86操作码的集合,它们希望加载到RAM中的固定地址(在编译shell时选择,或者更准确地说,链接)。内核的第一项工作是设置MMU,以便shell具有该内存的视图。 shell将通过调用内核与外界通信,它将通过系统调用来实现。在Linux-x86中,系统调用使用int
操作码(这会触发软件中断,并且系统调用参数通常在某些寄存器中传递)。一些重要的系统调用包括read
和write
调用:从shell的角度来看,键盘上键入的内容可以从虚拟文件中读取,由描述符索引(整数,“标准输入”的值为0。这里内核的工作是累积关键笔划(每个都会触发硬件中断,内核接收内核 - 内核应该响应硬件中断 - 并转换成字符)并在应用程序时将它们返回给应用程序问他们。类似地,shell写出的关于shell认为是“标准输出”(描述符1)的数据必须由内核翻译成要显示的字符,这意味着与视频硬件交谈。
学习构建操作系统的一个很好的资源是Minix。 Minix最初是作为一种学习工具,在Tannenbaum的书"Operating Systems Design and Implementation"中详细描述。它是开源和免费的。帮自己一个忙,下载Minix源代码并购买这本书(或从某个地方的图书馆借用它)。