作嵌入式,一定要学会裁减
嵌入式的板子上最典型的就是没有挂硬盘(网络存储产品除外) , 就是flash , 一般就是 12M差不多。 我们的jk2410 上64M , 应该算比较大的了,奢侈!!
所在嵌入式的板子上搞移植 , 摆在面前首要问题, 就是万一放不下怎么办? 那产品就必然缺少某种功能。
裁减: 4 条路,
1> 作strip , 对于我们的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” 。
阅读(3337) | 评论(0) | 转发(0) |