Assembly 裸机x86组件中的网络

Assembly 裸机x86组件中的网络,assembly,networking,operating-system,osdev,Assembly,Networking,Operating System,Osdev,我开始了编写玩具操作系统的旅程,我正在寻找帮助我的资源和书籍 我还没有弄清楚的一个特性是网络。我能找到的所有关于x86汇编中网络的教程都是基于Unix/Linux网络系统调用的 如何在裸机x86组件中实现这一点?是的,对于您想要支持的每个网卡,您都需要一个驱动程序。每个视频卡都有一个驱动程序。适用于每个键盘、鼠标、USB集线器等,但除非您有pcie控制器、USB根控制器等的驱动程序 在我看来,操作系统的大部分工作是驱动程序。当你成为Windows或Linux的时候,厂商就想为你的操作系统编写驱动

我开始了编写玩具操作系统的旅程,我正在寻找帮助我的资源和书籍

我还没有弄清楚的一个特性是网络。我能找到的所有关于x86汇编中网络的教程都是基于Unix/Linux网络系统调用的


如何在裸机x86组件中实现这一点?

是的,对于您想要支持的每个网卡,您都需要一个驱动程序。每个视频卡都有一个驱动程序。适用于每个键盘、鼠标、USB集线器等,但除非您有pcie控制器、USB根控制器等的驱动程序

在我看来,操作系统的大部分工作是驱动程序。当你成为Windows或Linux的时候,厂商就想为你的操作系统编写驱动程序,你所要做的就是批准或不批准它们,但在这之前很久,你必须在没有太多文档访问权限的情况下编写它们。通常,Linux驱动程序源代码是您了解如何与设备通信所需的全部

视频在历史上一直是封闭文档,网络并不是这样开始的,但Broadcom和Realtek基本上是封闭文档,即使您是一家非常大的公司,您也可能无法获得保密协议,如果您有保密协议,您必须非常小心地处理它,在GitHub上发布源代码给基于它的驱动程序是在诉讼中失去房子的一个好方法。在达成任何此类交易之前创建一家有限责任公司,以保护您的个人资产,并聘请律师。所以,再一次,以Linux源代码为例,请注意用于该源代码的许可证

我不知道你的目标是什么,但我会坚持x86或者永远不做,从一些手臂开始,不管是一个大的cortex-m7 mcu还是一个全尺寸的手臂,覆盆子Pi,比格犬使用ti部件,比如开放文档,意式浓缩咖啡/macchiatobin等等。Pi是首屈一指的,甚至比当年的avr怪胎还要好,裸机论坛,尽管是Broadcom,文档很少。uart作为您的主要接口,只需进行任务切换,并开始形成关于驱动程序接口和应用程序空间与内核的概念,并让应用程序运行,这将让您享受很长一段时间

如果您想要x86,那很好;你一定是受到了某种特别的痛苦。我宁愿在脚底纹一个纹身,这样疼痛更小,愈合更快

您标记了这个程序集,我希望您不是在程序集中编写它,但如果您是,我希望您理解它的执行速度不会比用C编写并编译它快。您经常可以手动调整编译后的代码,它不是也永远不会是完美的,但对于大型项目,编译器将更加一致。当你厌倦了处理器X时,你的大部分代码应该移植到处理器Y,你可以继续。你的经历会有所不同

基于您所问问题的事实意味着您可能看不到项目的规模,以及所需的时间。也许你喜欢,你也喜欢。也要明白,你不会在击球时第一次打出一支本垒打,你会多次将它劈成两半或扔掉,然后从头开始。编写大量的一次性代码以使某些东西工作,然后在创建真正的代码后将其扔掉

任何一件事,无论是一个键盘,一块网络板上的物理层等等,都可能是一个需要数周全职工作的研究项目。准备好你要进入的领域

这是非常可行的,个人在没有其他程序员的情况下完成了这项工作,这些操作系统就在那里,如果你看的话,只是想让你看到全局,然后再加上制造你想要使用的产品的供应商缺乏支持

我还没有弄清楚的一个特性是网络。我能找到的所有关于x86汇编中网络的教程都是基于Unix/Linux网络系统调用的

系统调用不是问题中有趣的部分。网卡大多是封闭的,因此您需要Linux源代码才能有机会。网络本身有很好的文档记录,但是你要先从最古老的RFC开始,前几天在Wikipedia上,看起来它们有链接,这很好。例如,ICMP您需要arp/rarp first Wikipedia似乎在这方面做得非常好,超过了让ping工作所需的。但你可以看到底部的RFC792,然后你可以看到RFC777、760和700等等,我发现最好是尝试自己的堆栈,从旧的开始,因为最新的堆栈要么有洞,要么是以一种预期的方式编写的,你已经在这个行业工作了几十年。旧的更简单,更容易理解和开始

有几本网络书。当我对这些东西感兴趣的时候,我买不起的书,然后是TCP/IP图文并茂的系列,我免费得到了这些书的拷贝 这些天来,et都是非法的PDF。你也可以在维基百科上找到OSI层,还有安德鲁·S·塔恩鲍姆的书,它们都是用来教这一点的

但是在一天结束的时候,有一半是硬件为你提供数据包。另一半是协议,它们是这些数据包中的内容/有效负载

如何在裸机x86汇编中实现

操作系统本质上是一个裸机程序,因此可以覆盖裸机。编程语言是编程语言C是迄今为止最适合这项工作的语言,没有第二种。但是,如果你只是编写代码,那么你正在执行的算法/任务和执行它所需的代码是两件不同的事情。如果您知道任务/算法/过程,那么您只需敲出代码,稍后再来清理它

99%的baremetal正在阅读或者说没有编写最终的代码,其中一些99%是一次性的代码,这是为了弄清楚它到底是如何工作的,因为几乎所有的文档都有错误,甚至写得很好,但大多数都写得很差

用任何语言编写代码都是很容易的


@所以,我是否必须为这个操作系统中可能使用的每个网卡编写驱动程序


是的,绝对是……这就是制作操作系统的全部内容。幸运的是,芯片数量少于供应商,而且有很大一部分人只是购买了相同的芯片制作电路板,并在上面写上了自己的名字。如此多的pcie供应商/产品ID可能映射到同一个驱动程序。

是的,对于您想要支持的每个网卡,您都需要一个驱动程序。每个视频卡都有一个驱动程序。适用于每个键盘、鼠标、USB集线器等,但除非您有pcie控制器、USB根控制器等的驱动程序

在我看来,操作系统的大部分工作是驱动程序。当你成为Windows或Linux的时候,厂商就想为你的操作系统编写驱动程序,你所要做的就是批准或不批准它们,但在这之前很久,你必须在没有太多文档访问权限的情况下编写它们。通常,Linux驱动程序源代码是您了解如何与设备通信所需的全部

视频在历史上一直是封闭文档,网络并不是这样开始的,但Broadcom和Realtek基本上是封闭文档,即使您是一家非常大的公司,您也可能无法获得保密协议,如果您有保密协议,您必须非常小心地处理它,在GitHub上发布源代码给基于它的驱动程序是在诉讼中失去房子的一个好方法。在达成任何此类交易之前创建一家有限责任公司,以保护您的个人资产,并聘请律师。所以,再一次,以Linux源代码为例,请注意用于该源代码的许可证

我不知道你的目标是什么,但我会坚持x86或者永远不做,从一些手臂开始,不管是一个大的cortex-m7 mcu还是一个全尺寸的手臂,覆盆子Pi,比格犬使用ti部件,比如开放文档,意式浓缩咖啡/macchiatobin等等。Pi是首屈一指的,甚至比当年的avr怪胎还要好,裸机论坛,尽管是Broadcom,文档很少。uart作为您的主要接口,只需进行任务切换,并开始形成关于驱动程序接口和应用程序空间与内核的概念,并让应用程序运行,这将让您享受很长一段时间

如果您想要x86,那很好;你一定是受到了某种特别的痛苦。我宁愿在脚底纹一个纹身,这样疼痛更小,愈合更快

您标记了这个程序集,我希望您不是在程序集中编写它,但如果您是,我希望您理解它的执行速度不会比用C编写并编译它快。您经常可以手动调整编译后的代码,它不是也永远不会是完美的,但对于大型项目,编译器将更加一致。当你厌倦了处理器X时,你的大部分代码应该移植到处理器Y,你可以继续。你的经历会有所不同

基于您所问问题的事实意味着您可能看不到项目的规模,以及所需的时间。也许你喜欢,你也喜欢。也要明白,你不会在击球时第一次打出一支本垒打,你会多次将它劈成两半或扔掉,然后从头开始。编写大量的一次性代码以使某些东西工作,然后在创建真正的代码后将其扔掉

任何一件事,无论是一个键盘,一块网络板上的物理层等等,都可能是一个需要数周全职工作的研究项目。准备好你要进入的领域

这是非常可行的,个人在没有其他程序员的情况下完成了这项工作,这些操作系统就在那里,如果你看的话,只是想让你看到全局,然后再加上制造你想要使用的产品的供应商缺乏支持

我还没有弄清楚的一个特性是网络。关于x86汇编中网络的所有教程 我可以找到的是基于Unix/Linux网络系统调用的

系统调用不是问题中有趣的部分。网卡大多是封闭的,因此您需要Linux源代码才能有机会。网络本身有很好的文档记录,但是你要先从最古老的RFC开始,前几天在Wikipedia上,看起来它们有链接,这很好。例如,ICMP您需要arp/rarp first Wikipedia似乎在这方面做得非常好,超过了让ping工作所需的。但你可以看到底部的RFC792,然后你可以看到RFC777、760和700等等,我发现最好是尝试自己的堆栈,从旧的开始,因为最新的堆栈要么有洞,要么是以一种预期的方式编写的,你已经在这个行业工作了几十年。旧的更简单,更容易理解和开始

有几本网络书。当我对这些东西感兴趣的时候,我买不起的Comer书籍,然后是免费发给我的TCP/IP插图系列,这些天可能会得到非法的PDF。你也可以在维基百科上找到OSI层,还有安德鲁·S·塔恩鲍姆的书,它们都是用来教这一点的

但是在一天结束的时候,有一半是硬件为你提供数据包。另一半是协议,它们是这些数据包中的内容/有效负载

如何在裸机x86汇编中实现

操作系统本质上是一个裸机程序,因此可以覆盖裸机。编程语言是编程语言C是迄今为止最适合这项工作的语言,没有第二种。但是,如果你只是编写代码,那么你正在执行的算法/任务和执行它所需的代码是两件不同的事情。如果您知道任务/算法/过程,那么您只需敲出代码,稍后再来清理它

99%的baremetal正在阅读或者说没有编写最终的代码,其中一些99%是一次性的代码,这是为了弄清楚它到底是如何工作的,因为几乎所有的文档都有错误,甚至写得很好,但大多数都写得很差

用任何语言编写代码都是很容易的


@所以,我是否必须为这个操作系统中可能使用的每个网卡编写驱动程序


是的,绝对是……这就是制作操作系统的全部内容。幸运的是,芯片数量少于供应商,而且有很大一部分人只是购买了相同的芯片制作电路板,并在上面写上了自己的名字。这么多pcie供应商/产品ID可能映射到同一个驱动程序。

在裸机x86组件中,这有点困难,因为您首先需要为网卡编写驱动程序。如需有关如何编程简单NE2000芯片组的说明,请参阅。然后,您必须编写自己的网络堆栈。这是以前做过的,但确实是一项相当大的工作。@fuz那么,我是否必须为这个操作系统中可能使用的每个网卡编写驱动程序?如果操作系统本身没有提供任何驱动程序,这正是您需要做的。有两种常用于业余操作系统项目的卡:Novell NE2000(包括克隆版)和Intel E1000 Pro/1000。两者都相当容易获得,对于一个爱好项目来说,将自己限制在一两个型号是个好主意。@fedqx当然。但是请注意,编写纯以太网驱动程序总的来说只是编写网络堆栈的一小部分。在裸机x86组件中,这有点困难,因为您首先需要为网卡编写驱动程序。如需有关如何编程简单NE2000芯片组的说明,请参阅。然后,您必须编写自己的网络堆栈。这是以前做过的,但确实是一项相当大的工作。@fuz那么,我是否必须为这个操作系统中可能使用的每个网卡编写驱动程序?如果操作系统本身没有提供任何驱动程序,这正是您需要做的。有两种常用于业余操作系统项目的卡:Novell NE2000(包括克隆版)和Intel E1000 Pro/1000。两者都相当容易获得,对于一个爱好项目来说,将自己限制在一两个型号是个好主意。@fedqx当然。但是请注意,编写纯以太网驱动程序总的来说只是编写网络堆栈的一小部分。实现IP再实现TCP要复杂得多。谢谢你的回答!谢谢你写这篇文章!节省了我很多时间。谢谢你的回答!谢谢你写这篇文章!节省了我很多时间。