【发布时间】:2015-04-19 18:51:31
【问题描述】:
因此,我正在为嵌入式 Linux 系统进行开发,但我们在使用外部看门狗芯片时遇到了一些问题,需要在启动过程的早期进行馈送。
更具体地说,据我们所知,当内核在预引导环境中解压缩其映像时,这个外部看门狗会导致重置。在开始需要喂食之前没有足够的停机时间,这可能应该在硬件中分类,因为它是外部的,但需要内部软件解决方案。
我们的一位开发人员的解决方案是将一些额外的代码放入...
int zlib_inflate(z_streamp strm, int flush) 在lib/zlib_inflate/inflate.c 内核代码中
这个新代码在解压过程中周期性地切换看门狗引脚。
现在除了我觉得这有点肮脏的黑客之外。它确实有效,它在我脑海中提出了一个有趣的观点。因为这个库也在启动后使用。那么有没有一种很好的方法来检测您是否处于预启动环境中?所以它只能执行这种切换预启动,而不是在以后使用 lib 时。
顺便说一句,我也有兴趣从一开始就避免黑客攻击的任何想法。
【问题讨论】:
-
“因为这个库也是在启动后使用的。” -- 启动解压器不会有它自己的这个库代码的副本吗?否则,您将面临鸡与蛋的局面。
-
如果您在启动序列中使用 U-Boot,则不要使用 zImage 内核映像,而是使用压缩的 Image 文件.并使用 U-Boot 内置的解压缩器。 u-boot-2014.07/lib/zlib/inflate.c 似乎有执行看门狗重置的钩子。请参阅 Wolfgang Denk 在stackoverflow.com/questions/22322304/image-vs-zimage-vs-uimage/… 中的引用
-
我确定它有自己编译的二进制副本,但据我所知,它是从同一源编译的。其中有 hack 编码。我们正在使用 u-boot,我会研究一下。谢谢。
标签: linux-kernel embedded-linux u-boot watchdog compression