版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

问题现象:

嵌入式Linux设备网络升级,写升级包到flash过程中报Bus error错误导致升级中断。


问题原因:

升级过程中,当前程序的代码段被破坏了。

程序运行时如果内存紧张,有可能部分代码段占用的内存会被回收,需要使用时再从flash重新读取,而升级过程中会擦写flash,导致读的内容是错的,所以报bus error错误。

这是个偶现的错误,和升级时的内存使用情况有关,如果内存足够多,主程序的代码段没有回收,那就不会出现问题。


解决办法:

办法1:主程序只负责下载升级包,下载完成后,主程序退出,释放大段内存,再启动一个小进程专门用于升级,可最大程度避免该问题。

办法2:使用双分区的方式,主分区和备用分区乒乓升级,或是升级时先写备用分区,开机后再由uboot来搬运分区,可以彻底避免该问题。