Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1614608
  • 博文数量: 197
  • 博客积分: 10046
  • 博客等级: 上将
  • 技术积分: 1983
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-07 12:36
个人简介

在外企做服务器开发, 目前是项目经理, 管理两个server开发的项目。不做嵌入式好久了。

文章分类
文章存档

2011年(2)

2010年(6)

2009年(18)

2008年(30)

2007年(100)

2006年(41)

分类: LINUX

2007-08-31 17:36:29

作嵌入式,一定要学会裁减

嵌入式的板子上最典型的就是没有挂硬盘(网络存储产品除外) , 就是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” 。
阅读(3302) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~