**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。
我们不允许问题寻求书籍、工具、软件库等的建议。您可以编辑问题,以便使用事实和引文来回答。
3天前关闭。
Improve this question
我正在做一个项目,我需要通过Wi-Fi/以太网与Raspberry Pi通信,并做一些事情。目标是尽可能低的水平。所以,在解决了我的组装问题后,我想知道是否有可能做裸机。在我的项目中,我打开了一个插座,接收字符并“移动”连接到RPI的LED网格中的灯。做LED部分本身相对容易,因为我知道物理存储器中的对应地址,但是我找不到任何关于在没有操作系统的情况下创建套接字和打开通信的可能性的信息。这甚至是可能的吗?如果是的话,你有什么文档可以建议我吗?
谢谢你!
我还没有找到合适的东西,我希望能够打开一些东西,比如在ARM汇编裸机中的socket编程,并通过那个socket与我的计算机通信。
1条答案
按热度按时间z4iuyo4d1#
这当然是可能的。
汇编语言是您为自己创建的一个额外的复杂性,欢迎您使用该编程语言,但C加上这里和那里的一点点asm最适合裸机。
在Pi网站上有一个很好的裸机论坛,几乎和avrfreaks一样好。无论哪种方式都很好,知识渊博的人不会因为你重新发明轮子而倾倒你...
ARM与您的问题几乎没有任何关系。所有的网络等都不属于ARM的参与范围-他们的参与仅限于在本网站上使用英语与适当的人进行对话。对话可以使用法语、西班牙语或中文等。不会有任何损失。它只是另一种语言。你可以把ARM拿出来,插进一个RISCV核心或MIPS或其他以及99-100%的代码和你需要解决的问题来做网络,闪烁LED,等等都是一样的。处理器伊萨只是你用来做它的语言。ARM在他们的IP中没有网络没有LED,没有GPIO,什么都没有,只有处理器核心,一些缓存,MMU,和一个或多个总线(Axi等)所有的神奇都发生在芯片供应商的竞技场上,或者在电路板上。
如果没有操作系统,你必须做或找到所有的工作。网络是其中之一(沿着文件系统)在那里你说好吧,我不打算做这个裸机。我已经在8051汇编中做了一个非常粗糙UDP堆栈,我已经在其他平台上用C语言重复了这一点。但是我做了很多欺骗。TCP/IP是一个完全不同的交易,你有多少年的业余时间来做这个工作?如果你问这个问题,如何做Wi-Fi/以太网/插座裸机?你还没有准备好这个任务。
你有所有的网络基础知识要学习,通过层到TCP甚至UDP。你必须学习外围设备,其中一些甚至博通可能有一个nda与限制多少,他们可以告诉甚至与他们的芯片客户的nda(USB控制器、DDR控制器等可能是购买的IP,它们可能能够或不能够证明给它们的客户,在这种情况下,Raspberry Pi是一个奇怪的混合体,它是一个带有ARM协处理器的GPU,如果你愿意的话,这样GPU就拥有了所有的启动魔力,所以我们没有u-boot或其他,带有源代码,我们可以偷的东西。现在说,由于各种原因,他们的手臂被扭曲了,他们确实在某一点上释放了一些。
树莓派真的不是你想在上面做这个的平台。它是一个很好的学习裸机的平台,构建引导程序和C入口代码,闪烁LED等。几乎零风险的砖板等,不像许多MCU板。但网络,现在最新的PI 4可能是不同的,我还没有看。2但在此之前,首先你需要基本的裸机技能(大多数人由于某种原因不能做到这一点,我不明白为什么,但已经看到了这一切太频繁)。接下来你需要学习usb外围设备,从逆向工程的Linux代码(或者从Pi网站上的论坛上的裸机乡亲那里逆向工程其他代码)因为网络是从USB上黑客攻击的东西,你必须通过usb才能进入网络设备,然后你必须学习这个东西,然后你需要基本的数据包知识,阿普,ip,udp和/或tcp,tcp是一个皇家PITA即使你作弊。现在你可以去得到lwip和保存一些头痛,但你仍然必须让usb和网络控制器工作自己。wifi是它自己的问题,我认为有一个非常非常短的Wi-Fi供应商名单(ip/模块,即使是网络领域的大牌也会购买这些模块,而不是自己制作),这是好的,也是坏的,可能有很多参考资料(逆向工程Linux源代码等),但同时可能没有文档等。
一般来说,除了gpio,spi,i2c,uart,也许还有一两件事,你想只使用一个已经移植的操作系统,其余的,网络,usb,文件系统,dram,和一些其他的。
如果你想做网络来闪烁一些LED,要么在Pi上运行Linux,与它的竞争对手不同,Pi的人做了一个非常好的工作,使库提供MCU一样的低速外设访问,给予它一个Arduino或mbed或其他类似的感觉,但在Linux上。所以它也是一个伟大的平台。
但是如果你想做裸机。也许得到一个基于stm32的板上有rj45 10/100/1000 baseT以太网。通过逆向工程他们的示例代码的斗争,但是会有文档,你可以比较代码。然后学习你的基本知识,比如接收阿普,然后回复,工作到ping,然后UDP如果你作弊还不错。然后确定您是否真的觉得需要TCP。
或者,也可以使用esp 32产品,它可以为您提供以太网/wifi功能,您只需编写代码即可(裸机或其他)通过UART或其他方式与它交谈。或者你可以使用他们的SDK,让esp 32做所有的事情。但你要么在他们的沙箱中很重,或者有一个类似的逆向工程任务,以弄清楚如何运行他们的外围设备以及编写自己的堆栈。还有其他的平台和沙箱,你可以玩像arduino以及技术上是裸机,但它实际上是一个操作系统加上api一样的经验。
如果你想进入网络领域,带有线网络接口的罕见/大型MCU是你最好的选择。或者是一个支持一些旧网卡的仿真系统,比如ne 2000,我不记得另一个了。这些对裸机来说并不难。
你可能只想使用UART来与你的LED闪烁的东西交谈,而不是Wi-Fi,或者你只想使用Linux,或者你想切换到另一个平台/解决方案。
usb已经解决/ish,usb是相当痛苦的一旦你过去的控制器这不是痛苦,它是外设,你可能会认为所有的键盘和鼠标都是一样的,不,这是一个漫长的,昂贵的,研究项目只是为了得到基本的HID的东西。然后联网,至少它是一个固定/焊接下来的USB以太网学习,而不是替代噩梦,你可以在网上买到什么。但我不我不知道论坛上的裸机Pi的人是否已经解决了网络问题。你当然可以添加一个esp 32或esp8266,然后通过它来获得网络。
它能在裸机中完成吗?当然,你认为操作系统是什么......裸机程序......操作系统只是运行指令的软件,没有魔力。你想控制一个外设,你只需要在正确的位置以正确的顺序进行读写的指令,裸机,内核驱动程序,等等。你能用汇编语言编写裸机吗?当然你能,它并不是裸机的定义,它只是您给自己增加的负担,但是裸机的人有时候只是为了乐趣或性能或其他原因而增加负担。(汇编编程很少能顺便提供性能提升,不像裸机那样)。