找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 10190|回复: 21

讨论一下OpenWRT+UPX的可能性 (将程序压缩到骨头大小,让4M闪存焕发青春,放飞8M闪存)

[复制链接]
发表于 2013-8-11 17:55 | 显示全部楼层 |阅读模式
本帖最后由 animefans_xj 于 2013-8-12 10:06 编辑

嗯,昨天在MW300R的Backfire上测试UPX又失败了,此帖子暂且搁置

对于大多人来说,4M的闪存显然不够玩OP的,而8M的闪存则在安装了几个软件后就会爆满。那么,有什么办法可以压缩可执行文件吗?有,UPX就是一个很好的例子(支持WinNT/CE的PE结构以及Unix的ELF),文件的压缩比可以达到50%以下。这样,大量的软件就可以很轻易地塞进8M FLASH了,甚至4MFlash都可以塞下transmission-daemon。不过本人对代码实在是有些无能为力(比如makefile),所以特开此贴来讨论一下,看看大家有什么办法让OP编译的时候自动压缩可执行文件吗。
至于效率的问题,可以只压缩那些特别大(>=256K)的程序
说明一点(可能有的朋友不是很清楚),UPX跟RAR、ZIP是不一样的,UPX在压缩程序后,会在压缩后的程序中嵌入UPX的解压模块,当执行程序时,会直接执行UPX的解压模块,随后解压模块将真正的程序解压到内存中并交由内存中解压好的程序运行,由于是直接解压到内存中,其间不会占用任何磁盘空间(但可能会多占用少量的内存空间和CPU)

更新:之前确实没注意到一点,就是根系统用的就是压缩系统,所以这个手段对于根系统可能是没有效果的。不过UPX对于后期安装软件的大小控制还是有很大帮助的,至少是我自己实测的。究其原因在于OP采用的是叠加的文件系统方案,固件原本的系统分区是只读的,而用户对系统做的更改都被存放在Overlay分区中,然后我们向系统中安装软件的时候实际是将软件存放到了/Overlay分区。然而这个Overlay分区并不是压缩文件系统,如果你放进去一个1M的文件,那么它在/Overlay分区中占用的空间不会小于1M。通过在编译的时候事先对软件包中的软件进行压缩,在后期用户安装软件的时候可以很大程度地节省/Overlay分区的空间,从而使Overlay分区能够容纳更多软件

对于技术性的东西最多也就是探讨,希望大家多多给出见解






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 8恩山币 +17 收起 理由
luokaichuang + 1 70M变8M是编译时用sstrip剔除了动态符号表和调试信息的可执行文件
papagogo + 1 强大的恩山!(以下重复1万次)
伤心的笔 + 1 扣分神马的,太没道理了,就为了显示自己的优越性?
zy900114 + 10 切糕党手持切糕刀强势围观楼主!
南浦月 + 3 扣分神马的,太没道理了,就为了显示自己的优越性?
zwqcactus + 1 支持技术性的讨论
masterkuo + 1 有内容的讨论,没有道理扣分。我给你加回来...
chenxin92 -1 根本不用这个压缩,openwrt的默认压缩就很厉害了,把70M大小压缩成8M了,

查看全部评分

只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-11 17:59 来自手机 | 显示全部楼层
压了你还要解开才能用啊,光字库和cpu占用就够呛了

点评

CPU占用这方面我压缩transmission的执行文件做过测试,问题不大 至于压了解开的问题是无需另外安装软件的,本来程序就要加载到内存里运行的,程序执行后会自动执行UPX解压并释放到内存中执行。  发表于 2013-8-11 18:02
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
 楼主| 发表于 2013-8-11 18:33 | 显示全部楼层
本帖最后由 animefans_xj 于 2013-8-11 18:35 编辑

CPU占用这方面我压缩transmission的执行文件在MW150R_OpenWRT Trunk / 32M RAM下做过测试,问题不大(毕竟是400MHZ的CPU了嘛,以前Intel 208MHZ的StrongARM在WinCE上跑UPX也没有太大的压力的)
至于压了解开的问题是无需另外安装软件的,本来程序就要加载到内存里运行的,程序执行后会自动执行UPX解压并释放到内存中执行。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-11 18:47 | 显示全部楼层
是个好办法,但是整个系统机制都要改,工作量不小!
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
 楼主| 发表于 2013-8-11 18:57 | 显示全部楼层
回chenxin92:那个压缩是厉害,但是我们自己安装的软件呢?你敢说也是这般压缩?之所以提出这般问题是因为实测能够大幅降低空间占用的,而且8M闪存有些捉衿见肘。
另外,只是问个问题而已,人各有所需,只是与你见解不同你凭什么乱扣分?
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-11 20:22 | 显示全部楼层
对内部不了解
但是对技术性的讨论,无条件支持
有没有道理,能不能实现都是其次
能引起大家的讨论,促进进步才是正道
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-11 20:59 来自手机 | 显示全部楼层
没啥用的,openwrt本来用的就是压缩文件系统
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-11 21:03 来自手机 | 显示全部楼层
oenwrt用的squashfs是lzma压缩算法,最新的upx也是lzma,你觉得有用不
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
 楼主| 发表于 2013-8-11 21:36 | 显示全部楼层
本帖最后由 animefans_xj 于 2013-8-11 21:55 编辑
huaxie1988 发表于 2013-8-11 21:03
oenwrt用的squashfs是lzma压缩算法,最新的upx也是lzma,你觉得有用不

主文件系统若能再压缩自然是更好(本来构想的时候确实也包含在内,但是squashfs和UPX确实都是LZMA的没错),但是最重要的是使软件源中的软件包都经过压缩,从而多出一个安装压缩版软件的选择。毕竟Overlay分区是jffs2的。将软件包中的执行文件压缩,后期安装的软件同样节省空间。我的意思是,编译的时候自动为软件包里面的程序压缩。因为并不是所有固件都是全集成的,也有人喜欢下干净点的固件然后按照自己的喜好来安装软件的,但是8M的空间实在捉衿见肘,何况Overlay分区又不是压缩文件系统。就说装一个Aria2就要耗费2M,而OP固件即使在8M的FLASH上也很难得到2M多的空闲吧?这个时候UPX就有很大的用处了,就像上面的截图,Aria2在压缩和不压缩的情况下相差1M多,这对于本来就空间宝贵的Overlay (/dev/mtdblock3) 分区显得十分重要。同样,尽管Transmission只有300K,但对于4M Flash的 Overlay分区来说同样是一个难题。根系统确实是压不了了,可能压了还不如不压,但是一切的出发点是构建一个压缩的软件源,从而使得本来对于4M Flash过大的软件有安装进去(指的是用户自行安装而不是固件集成)的机会,同样为8M Flash留下更多空间。
而对于16M Flash来说,百害无一利。这个我承认,但一开始就是为了8M和4M闪存来谈这个的。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-11 22:48 | 显示全部楼层
没在uclibc下试过upx的说,先告诉我能工作吗?
我都是自己编译固件把软件都搞到squashfs中了
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-12 00:06 来自手机 | 显示全部楼层
animefans_xj 发表于 2013-8-11 21:36
主文件系统若能再压缩自然是更好(本来构想的时候确实也包含在内,但是squashfs和UPX确实都是 ...

我觉得既然都外接usb设备了压缩还不如用extroot,想装多少软件就装多少软件。就算不extroot也可以把软件装到usb设备的。
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-12 00:17 来自手机 | 显示全部楼层
ayaka 发表于 2013-8-11 22:48
没在uclibc下试过upx的说,先告诉我能工作吗?
我都是自己编译固件把软件都搞到squashfs中了

upx是开源的。目测用uclibc编译后能压缩uclibc的程序吧

点评

这我当然知道,可是不是什么在glibc下能用的软件在uclibc也能用  发表于 2013-8-13 03:01
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
 楼主| 发表于 2013-8-12 10:05 | 显示全部楼层
嗯,昨天在MW300R的Backfire上测试UPX又失败了,这个要帖子要暂时搁置一下了
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-12 11:08 | 显示全部楼层
跟平台有关,upx支持平台才有相关的解压代码,否则怎么解压?

点评

嗯,这个查过,是支持的。以前也成功过  发表于 2013-8-12 11:31
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
发表于 2013-8-12 11:58 | 显示全部楼层
楼主的想法很好,但是你UPX压缩意义不大.首先摆在面前的,SquashFS本身就是LZMA的压缩,jffs2的也是LZMA的压缩.如果你的程序再增加UPX的压缩代码,就不再是缩小体积了,反而是增加体积.
楼主可以参考这样的做法,
把几个文件压缩成RAR文件再跟单个文件压缩成RAR,再将这几个压缩文件再压缩成1个,对比一下哪个体积大.
只谈技术、莫论政事!(点击见详情) | 恩山无线论坛欢迎您的来访,请互相尊重、友善交流,建议保持一颗平常心看待网友的评论,切勿过度反应。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-9-27 01:33

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表