LZMA ERROR 1 - must RESET board to recover错误分析

29 篇文章 2 订阅
16 篇文章 0 订阅

因为项目的需要,编译了MTK官方的4.1版SDK,最终生成了manfeel_uImage文件,刷入开发板之后重启,出现了这个LZMA ERROR 1的错误。是我运气太好,还是太背?上次也碰到过这个问题,改动了一下load address(由原来的0x80000000改成了0x80100000),就过了。然而,这次的问题貌似没那么简单。

只好深入uboot的lib_generic/lzmaDecode.c中一探究竟。解压缩lzma数据的函数原型是:

int lzmaBuffToBuffDecompress(char *dest,int *destlen,char *src,int srclen);

看了代码之后,不得不吐槽一下写这个代码的人,为神马任何错误,作者都返回1?是作者太自(Zi)信(Da),还是认为人们不需要了解错误的细节?好,抱怨归抱怨,代码是必须要分析的,加上一些诊断输出代码后,发现了有用的信息:

stream version is not supported, outSize = FFFFFFFF
LZMA ERROR 1 - must RESET board to recover

对照该部分代码分析:

memcpy(properties,src,sizeof(properties));
src += sizeof(properties);
outSize = 0;
for (ii = 0; ii < 4; ii++)
{
  unsigned char b;
  memcpy(&b,src, sizeof(b));
  src += sizeof(b);
  outSize += (unsigned int)(b) << (ii * 8);
}
 
if (outSize == 0xFFFFFFFF)
{
  //sprintf(rs + strlen(rs), "\nstream version is not supported");
  printf("\nstream version is not supported, outSize = %X\n", outSize);
  return 1;
}
 
for (ii = 0; ii < 4; ii++)
{
  unsigned char b;
  memcpy(&b,src, sizeof(b));
  src += sizeof(b);
  if (b != 0)
  {
    //sprintf(rs + strlen(rs), "\n too long file");
    printf("\n too long file");
    return 1;
  }
}

大概分析了一下lzma的头部信息:

image

显然,后面的数据大小是有问题的!对比一下OP的一个firmware,就能更加清楚:

image

初步分析,问题可能出现在lzma压缩上,是否是lzma版本导致的问题?

进入source/vendors/Ralink/MT7620,查看Makefile

发现这个该死的Makefile调用的居然是系统默认的lzma文件,Ubuntu14.04的lzma版本是:

xz (XZ Utils) 5.1.0alpha
       liblzma 5.1.0alpha

果断修改,将4.32.7版本的lzma拷贝到source目录,修改Makefile如下:

#manfeel, do NOT use the system default lzma(5.1.0alpha), just use the 4.32.7
image: mkimage
    $(CROSS_COMPILE)objcopy -O binary -R .note -R .comment -S $(ROOTDIR)/$(LINUXDIR)/vmlinux  $(KERNELZ)
    cd $(IMAGEDIR) ; rm -f $(KERNELZ).*; ../$(COMP) -v -9 -f -S .$(COMP) $(KERNELZ)

 

打完收工,一桩悬案终于水落石出… …

在你提供的引用中,没有直接提到"ERROR: Could not build wheels for backports.lzma, which is required to install pyproject.toml-based projects"这个特定错误。但是,可以通过引用的内容来得出一些相关的信息来回答你的问题。 首先,在引用中提到了类似的错误信息:"ERROR: Could not build wheels for lanms-neo, which is required to install pyproject.toml-based projects"。这意味着在安装基于pyproject.toml的项目时,出现了构建wheels的错误。根据这个信息,我们可以推测在你的问题中,是在安装backports.lzma时出现了构建wheels的错误。 此外,在引用中提到了一些需要注意的点,包括在Windows系统上使用virtualenv和conda构建环境时可能遇到的兼容性问题,以及可能需要安装OpenSSL。这些信息可能与你遇到的错误有关。 综上所述,为了解决"ERROR: Could not build wheels for backports.lzma, which is required to install pyproject.toml-based projects"这个错误,你可以尝试以下步骤: 1. 确保你的系统已经安装了Microsoft Visual C++ 14.0或更高版本。这是因为在引用中提到了这个错误的原因之一是缺少Microsoft Visual C++ 14.0或更高版本。 2. 检查你是否已经安装了OpenSSL。如果没有安装,你可以根据引用中提供的链接下载和安装OpenSSL DLLs。 3. 尝试在安装backports.lzma之前更新并升级你的Python环境、pip和setuptools。 4. 如果使用virtualenv或conda构建环境,可以尝试使用其他方式构建环境,例如使用venv。 5. 如果问题仍然存在,你可以尝试寻求更多关于backports.lzma安装错误的帮助,例如在相关的论坛或社区中提问,以获取更具体的解决方案。 请注意,以上步骤仅为一般性建议,具体解决方案可能因个人情况而异。建议根据引用内容中提供的信息和你遇到的具体问题,进一步调查和尝试解决方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值