有没有支持zlib压缩的EC600N_CNLC的固件?

想让移远EC600支持zlib压缩功能,但似乎在官方的SDK中没有这个功能,有没有支持zlib压缩的EC600N_CNLC的固件?

zlib解析不需要特殊的固件. 支持uzlib功能固件既可.

解压脚本示例如下:

import uzlib as zlib
import ql_fs


class FileDecode(object):
    def __init__(self, zip_file, parent_dir="/usr/"):
        self.fp = open(zip_file, "rb")
        self.fileData = None
        self.parent_dir = parent_dir

    def unzip(self):
        """缓存到内存中"""
        self.fp.seek(10)
        data = self.fp.read()
        self.fileData = zlib.decompress(data, -15)

    @classmethod
    def _ascii_trip(cls, data):
        return data.decode('ascii').rstrip('\0')

    @classmethod
    def file_size(cls, data):
        """获取真实size数据"""
        size = cls._ascii_trip(data)
        if not len(size):
            return 0
        return int(size, 8)

    @classmethod
    def get_file_name(cls, file_name):
        """获取文件名称"""
        return cls._ascii_trip(file_name)

    def unpack(self):
        """解压文件"""
        idx = 0
        count = len(self.fileData)
        folder_list = set()
        print("total_size:" + str(count))
        while idx < count:
            size = self.file_size(self.fileData[idx + 124:idx + 135])
            file_name = self.get_file_name(self.fileData[idx:idx + 100])
            full_file_name = self.parent_dir + file_name
            if not size:
                if len(full_file_name):
                    """文件夹"""
                    ql_fs.mkdirs(full_file_name)
                    if full_file_name not in folder_list and full_file_name != self.parent_dir:
                        folder_list.add(full_file_name)
                        print("Folder {} CREATED".format(full_file_name))
                else:
                    return
            else:
                begin = idx + 512
                end = idx + 512 + size
                write_data = self.fileData[begin:end]
                update_file = open(full_file_name, "wb+")
                update_file.write(write_data)
                update_file.close()
                print("FILE {} WRITE BYTE BEGIN {} END {}".format(full_file_name, begin, end))
            """ 由于打包过程中会对文件长度不为512整数倍时, 会对文件尾部补\x00操作, 故在此将文件尾部填充长度添加到文件长度中. """
            if (size & 0x1ff) != 0:
                size += 512 - (size & 0x1ff)
            idx += 512 + size
        print("UNPACK SUCCESS")


if __name__ == '__main__':
    fd = FileDecode("usr/Grey.tar.gz")
    fd.unzip()
    fd.unpack()

压缩不能直接使用Windows加密软件加密. 需使用CMD命令压缩. 说明如下:

文件夹压缩CMD命令: tar -zcvf GreyFiles.tar.gz usr

tar -zcvf: 固定不变, 无需修改.

GreyFiles.tar.gz: 生成的文件名.

usr: 需要压缩的文件夹

QuecPython开源Solutio网站就是这个. 小型的示例脚本参考https://bbs.quectel.com.cn/viewtopic.php?t=283&page_type=3&page=3&per_page=8&type=2&forum_id=1&is_blog=0&top_tag_ids=¤t_page_index=1 内部内容会不定期更新.

但EC600NCNLC已经EOL了. 固件也停止了跟新. 建议切换其他型号.

我看官网的V007版本支持uzlib的,你可以下载使用下

没有,官方 EC600N_CNLC 固件 暂不支持zlib压缩功能

我在EC800K上实现过,要支持ZIP文件,需要自己解析ZipEntry,ZipEntry是固定26字节大小的,循环读取解析即可,然后送到zlib.DecompIO进行解压。但是,解压内部申请一个很大(32KB)的内存,在很多模组上实际跑起来会因为RAM不足崩溃(其他业务代码要占用比较多),导致不实用,一种解决方案就是ZIP包调整为只存储不压缩。这种方案是直接兼容WINZIP、WINRAR产生的压缩包,我们是用来做OTA包。