老实说,您的问题的答案很简单。您的主要问题是“您从哪里获得未来软件更新的内存”。答案是系统的DRAM。在您问题的第一部分中,您谈论的是裸机编程。您问题的第二部分是关于操作系统级别的编程。对于第一部分,您基本上将处理器置于 isp 模式并编程闪存或其他 nv 内存。在第二部分,它的工作方式完全不同。
基本上,(精简机制)您的更新分为几个部分,即:引导加载程序、内核、initramfs、固件、应用程序。您首先使用诸如 ftp 之类的协议将代码(捆绑包)传输到设备。这种传输确实将代码放在系统的 DRAM 上。然后在您的系统(运行 Linux 的示例)上,您有代码(逻辑)来解压缩此代码并进行完整性检查(文件校验和)。然后系统有进一步的代码来分析所有这些组件并确定其现有组件是否需要更新(检查传入组件的 md5 总和并与现有组件进行比较)。例如,如果您在内核的 init 脚本中进行了更改,或者您想要在 init.d 中添加一些新脚本,那么您基本上更改了 initramfs。
新代码的最终目的地也是闪存。由于闪存有一些您需要遵循的规则来对其进行写入和擦除,因此您基本上在闪存上安装了闪存文件系统。但是你不能用它来烧写代码,因为像 jffs2 这样的文件系统使用磨损均衡机制,因此数据分散在物理闪存中(上面安装了 jffs2)。顺便说一句,这是不可接受的,因为您希望完整的引导加载程序、内核、initramfs 等位于闪存中的连续位置。所以在我们运行 Linux 的示例系统中,你有一个叫做 mtd 驱动程序的东西。您可以使用此驱动程序使用所有组件对闪存进行编程。长话短说,DRAM 是软件更新的临时位置。因此,您必须确保以下两项之一: 1. 您有足够的内存 2. 您的软件更新包适合 DRAM。