想让移远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包。