您的位置:首页 > 其它

[培训新人系列之1] 作嵌入式,一定要学会裁减

2008-03-18 09:55 239 查看
作嵌入式,一定要学会裁减
嵌入式的板子上最典型的就是没有挂硬盘(网络存储产品除外), 就是flash , 一般就是 12M差不多。 我们的jk2410上64M , 应该算比较大的了,奢侈!!
所在嵌入式的板子上搞移植, 摆在面前首要问题, 就是万一放不下怎么办? 那产品就必然缺少某种功能。
裁减: 4 条路,
1>
作strip
strip作用是删除程序中的一些对调试有用的符号信息和section信息.详见另一片文章<<程序减肥三步走>>
对于我们的jk2410 就是arm-9tdmi-linux-gnu-strip, 比如要减小程序sshd的大小:
arm-9tdmi-linux-gnu-strip sshd ,可以加通配符号 arm-9tdmi-linux-gnu-strip ./*
2>这步才是最关键的,初学者总是 ./configure --prefix=/work/bob 一堆交叉编译参数, && make && make install. 结果,有用没有用的,统统copy到 /work/bob/下面来了。这显然不是嵌入式之道,如果都这么玩,板子的flash再大,也是放不下的。
要考虑哪些是有用的,哪些是没有用的,举个最简单的例子,man这个目录肯定没有用,你copy到板子上去干吗呢?
我的经验是,举个mysqld的例子:思路就是一个一个的往板子里面放,“需要的一个不少,不需要的一个不多” 。
下面的例子,可能我的记性有误,就这个意思吧 。
先运行mysqld , 系统提示少了某些*.so 文件, 我就copy到板子(也可以nfs均可)
再运行发现少了 /sbin/xx 文件, 再copy过来。
再运行,提示必须创建某些数据库 , 然后我把脚本copy到板子上去。
又发现 hostname好像不对, 再设置hostname 。
最后,发现 /tmp/ 权限不够, 再chmod -R 777 /tmp/
最后,mysqld --user=root , 然后ps 死活没有mysqld ,
杀手锏(绝对必杀):strace ,strace -f -F -o bob.log mysqld --user=root ,
发现好像说是没有/dev/urandom ,好家伙,那就mknod 好了。最后终于跑起来了,我发现好多东西都没有用,我记录下来,重新修改Makefile,make install的时候,只copy刚才需要的file 。而且一定要arm-9tdmi-linux-gnu-strip先。
3> 这步,就比较高级一些了。如果上面两条都做过了。size还是太大,没有办法,只能改代码了。把我们不需要得功能得代码统统删除掉了。
比如 mysql,有些功能我们就不需要,干脆删掉好了。编译之后,空间又小了很多。 再说了, kernel 就是个典型得例子,400多MB得code,编译出来得uImage才1M,奇迹!
4> My God! 经过上面三条,size还是太大,仍然放不下,没有办法了,找老板:“老板,我得flash太小了,放不下某个功能得binary,强烈要求换一个大点得flash” 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: