-
Notifications
You must be signed in to change notification settings - Fork 287
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
杰杰: patch时控制空间占用的办法? #182
Comments
|
@sisong 十分感谢您百忙之中的回复,我我想到了一个方法,可以节省一点内存,不知道能不能实现,方法如下:首先将旧固件压缩存放到压缩分区,然后将原本旧固件区域作为新固件的输出分区,差分升级包存放在差分升级包分区,在升级的时候讲旧固件解压到ram(运行内存)中,作为参数传入,这样子应该能减少不少磁盘的占用。 |
为什么要压缩old?先下载补丁,再直接加载old到内存,删除old; 这样更快更省磁盘 |
@sisong 因为我考虑了升级失败需要回滚,所以要备份一下,采用压缩的方式备份,占用flash会小一点 |
嗯 |
@sisong 好的,非常感谢您!我后续遇到问题再来请教您,非常感谢。 |
你好,我注意到您有提及“diffSize这块占用,一个可行的办法是:不要全部下载下来,将网络上的补丁包抽象成一个hpatch_TStreamInput输入流,当其数据被实际访问到的时候,才从网上即时下载(不储存在内存里或磁盘上);”,想请教一下如何实现,打个比方:我在服务器上上传了差分包,通过http连接的方式下载下来,每次请求http服务器数据,服务器发送256个字节大小的数据给我(也就是读一次http应答能拿到差分包的256个字节),那么我在打补丁的时候可以通过“ mem_as_hStreamInput(&diffStream,diff,diff+256);”这样的方式不断去顺序生成新固件吗?还是我的描述不对,思路不对,我在这个问题上困扰三天了,非常期待您的解答。 |
每个差分包都有控制字段的,并不是偏移就可以解决的事
…---原始邮件---
发件人: "8888github8888"<[email protected]>
发送时间: 2021年1月4日(周一) 下午5:57
收件人: "sisong/HDiffPatch"<[email protected]>;
抄送: "Mention"<[email protected]>;"杰杰"<[email protected]>;
主题: Re: [sisong/HDiffPatch] 杰杰: patch时控制空间占用的办法? (#182)
你好,我注意到您有提及“diffSize这块占用,一个可行的办法是:不要全部下载下来,将网络上的补丁包抽象成一个hpatch_TStreamInput输入流,当其数据被实际访问到的时候,才从网上即时下载(不储存在内存里或磁盘上);”,想请教一下如何实现,打个比方:我在服务器上上传了差分包,通过http连接的方式下载下来,每次请求http服务器数据,服务器发送256个字节大小的数据给我(也就是读一次http应答能拿到差分包的256个字节),那么我在打补丁的时候可以通过“ mem_as_hStreamInput(&diffStream,diff,diff+256);”这样的方式不断去顺序生成新固件吗?还是我的描述不对,思路不对,我在这个问题上困扰三天了,非常期待您的解答。
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.
|
感谢您的回复,正如你所说,每个差分包都有控制字段,因为我打算在嵌入式设备上打补丁,在下载差分包的时候,内存只剩20k左右的空间,甚至更小(但是一个差分包的大小在40k以上),老固件是存在与flash上(类似电脑硬盘),输出的新固件会写进flash另一个分区,差分包只能放在内存里,但是因为空间大小无法放下整个差分包。我从您的示例代码上看,似乎不能把一个差分包分块来生成新固件,不知道是不是我遗漏了什么,能否请您指教一下。 |
不对,patch函数只能执行一次; 你的数据不在内存,就不应该使用mem_as_hStreamInput; |
感谢您的提示,我再研究一下您的源码。 |
by @jiejieTop :
我想将它用在嵌入式设备上,实现差分升级,但是对内存资源的消耗好像有点大,一般来说很少会留出 (oldSize+newSize+diffSize)+O(1) bytes of memory 那么多的空间~ 请问博主还有其他方法吗~
The text was updated successfully, but these errors were encountered: