免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1552 | 回复: 0
打印 上一主题 下一主题

n---多的 Busybox [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-12 11:55 |只看该作者 |倒序浏览
busybox编译
********************************************
   busybox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,
   而所有这一切功能却 只有区区1M左右的大小.我们平时用的那些linux命令就好比是分立式的电子元件,
   而busybox就好比是一个集成电路,把常用的工具和命令集成压缩 在一个可执行文件里,功能基本不变,而大小却小很多倍,
   在嵌入式linux应用中,busybox有非常广的应用,另外,大多数linux发行版的安装程 序中都有busybox的身影,
   安装linux的时候案ctrl+alt+F2就能得到一个控制台,而这个控制台中的所有命令都是指向busybox的链 接.
       我用的BusyBox版本是busybox-1.1.3,大家可以先到网上下载一个。
       其实BusyBox编译并不是很难,主要是它要跟交叉编译器的搭配以及配置的问题。下面是一些必需要设置的选项:
    Busybox Settings  --->
         General Configuration  --->  
               
  • Support for devfs
             Build Options  --->
                
  • Build BusyBox as a static binary (no shared libs)  
                 这个最好选上,因上这样子编译出来的busyBox才是可以独立运行的,
                 否则的话需要将它用到的一些库文件放到文件系统的lib目录中。
              │
  • Do you want to build BusyBox with a Cross Compiler?              │ │  
              │ │(/HOME/toolchains/gcc-4.0.2-glibc-2.3.5/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu│
              上面是我的交叉编译器的路径,你要根据你具体的情况来设置。
           Installation Options  --->
                
  • Don't use /usr   
        这样子编译出来的busybox才不会安装到你主机的/usr目录下。一定要选上。
       --Applets下面是需要编译进busybox的功能选项,其他的可以根据需要自选,但是不要太贪心.
        最后执行make,make install,在$/busybox-1.1.3下会产生一个busybox可执行文件,以及生成一个_install目录,
        里面有三个目录:bin, lib,sbin以及一个linuxrc脚本文件。其中在/bin目录下有很多的常用命令的链接,
        例如ls,mount,cat等,这些都是指向 busybox中相应功能的链接,我们也可以手动建立指向busybox的链接,
        不同的链接名完成不同的功能.例如:   
      最常用的用法是建立指向busybox的链接,不同的链接名完成不同的功能.
      #ln -s busybox ls
     #ln -s busybox rm
      #ln -s busybox mkdir
      然后分别运行这三个链接:
      #./ls
      #./rm
      #./mkdir
      就可以分别完成了ls rm 和mkdir命令的功能.虽然他们都指向同一个可执行程序busybox
      但是只要链接名不同,完成的功能就不同,busybox就是这么的神奇.
            我们也可以这样来用:
      #busybox ls
      他的功能就相当运行ls命令

        好了,这样一个具有基本功能的busybox已经基本编译好了,把它放到文件系统(我的是cramfs)中后,重新编译文件系统,
        下载到板子上运行发现无 法使用退格,命令保存等功能,后来参照了luofuchong大侠的文章,发现要在busybox中作如下的设置即可:                                                                                                                                              Shells  --->  
                     Choose your default shell (ash)  --->                                                                                                                                            (X) ash
                     ---   Bourne Shell Options
                     
  •    command line editing      
                     
  •      vi-style line editing commands
    (15)    history size                                              │ │  
      │ │   
  •      history saving                                            │ │  
      │ │   
  •      tab completion                                            │ │  
      │ │   
  •        username completion
            这样配置编译之后,就可以使用上下键来选择命令,以及使用退格键了。     
    *************************************************************************************************
    10009.用busybox裁减linux     
    busybox 制作tiny linux
    我省去了制作启动盘的过程,这个网上可以大把大把的抓!
    更多...
    我通过在硬盘上安装linux得到linux的分区:
    /dev/hda1 /boot
    /dev/hda2 /
    /dev/hda3 swap
    好了,现在开始用busybox来制作了。。。
    实际操作过程相当简单:
    下载好busybox的源文件,大家最好到busybox的官方网站上面去下,这样还可以看到很多文档 :)
    我下载的是busybox-1.00-rc3版本,也是它的最新版
    tar zxvf busybox-1.00-rc3.tar.gz
    cd busybox-1.00-rc3
    make menuconfig
    (这个过程类似编译linux内核,如果你还不会编译内核的话,那先看看我的blog里面的另一篇文档好了)
    做好自己的选项后,
    make dep
    make
    make install
    默认情况下,busybox会在当前目录下生成一个_INSTALL的目录,编译后生成的文件都在这个目录下,
    一会儿我们也要用这个目录下的文件来制作我们的tiny linux  
    我们先看一看这个目录下的结构:
    /usr
    /etc
    /....
    因为我是在编译好后才写这篇文档的,所以目录列不全了,反正这个也不重要,大家在尝试中自己观察吧
    然后就是替换工作了,关于busybox的工作原理大家可以参考busybox的资料,网上一大把一大把的抓!!
    主要的操作目录有 etc usr bin sbin  
    将这几个目录用刚才编译过的目录替换,然后将原etc目录下的 passwd passwd- shadow shadow-  
    几个文件放到busybox的目录下(你得登陆吧,哈哈,登陆就得用这几个文件了)
    其实这个时候系统的大小就已经不到200M了,
    下面是进一步的裁减工作,这个工作主要集中在lib目录下
    lib目录的结构:
    根目录下是一些常用的so库
    modules 是linux的模块
    modules 目录里面还有 EL 结尾的文件夹目录,如果你是多cpu的话,有一个smp结尾的目录,如果你已经编译了内核的话,
    还有一个ELcustom结尾的目录
    决定你用那个内核,如你用smp的话,那就删掉其他的两个,如果你用自己编译的内核的话,那就删掉另外的两个,同样的道理
    其他在lib目录下的so文件大家自己决定吧,不过有这样一个问题,
    如果你裁减完登陆时出现“Login incorrect:User 'unknown' failed on 'tty2'”提示的话,
    很可能就是你这里面的库删错了,补回来吧。。
    裁减过程,除了删除文件外,我觉得还有一个问题,就是完善功能,实现linux的常用功能:如网络,文件系统的rw属性等
    这个也是我在裁减过程中遇到的问题,
    1,恢复网络功能
    网络功能需要这样几个必要的条件:
    1)内核支持inet4
    2)有网卡驱动
    好了,假设上面的都成立,我们开始给这个tinylinux设定网络:
    我的网卡是8139的所以,我需要的网卡驱动在/lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so
    当然,pci的网卡还需要这个东东:/lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o
    (为什么要这个我也说不清楚,反正要一定要有,freebsd在编译内核的时候,也是一定要加上mii这个东西的,
    编译过bsd内核的朋友一定有印象)
    ok,还有一个so是要加上的,那就是/lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o,
    这个东东,是什么作用,高手来解答吧,我也不清楚,或者大家去google搜索一下好了
    总结一下加入网络的步骤:
    /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o
    /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o
    /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so
    看到什么了吗?
    你的网卡已经起来了。。。不过这样还不可以
    在/etc/modules.conf文件中要增加这样的一句:alias eth0 8139too (为啥呢?我也不懂,向大家请教,)
    现在应该可以了,控制台里面输入:ifconfig eth0 inet 192.168.0.2 netmask 255.255.255.0
    结果呢?应该就是大家期望的了。。
    还可以添加路由的:
    /sbin/route add default gw 192.168.0.1
    不管别的了,先ping一下网关再说:
    #ping 192.168.0.1
    .........................
    登陆到192。168。0。1上面去:
    192。168。0。1#ping 192.168.0.2
    。。。。。。。。。。。。。
    网络功能基本上没有问题了,我试过ping 202.102.88.*这个外网ip的。
    2。文件系统的读写功能。
    busybox的启动过程跟linux是不一样的,它在内核启动后,运行/etc/init.d/rcS这个脚本的,而且只有这一个启动脚本,
    所以,如果有什么在启动时候运行或初始化的程序,只能写在这个脚本里了。
    在我的观察来看,linux启动过程中,与文件系统(我指的是mount或umount这样的操作)相关的操作是有这样的步骤的
    :第一个步骤是内核以ro(read-only,只读)的形式来mount / ,这个在grub。conf(grub的配置文件,在/boot/grub/目录下)
    有这样的描述:”kernel /boot/powerbit.vmlinux ro root=/dev/hdb1“ ,看到那个“ro”了吗?
    第二个步骤是系统在fsck(磁盘扫描,检查文件系统上一次关机时是否正常umount),然后进行“umount -a”
    第三个步骤是这样的,在检查完文件系统没有问题后,运行"mount -t ext3 remount rw /" 这样的语句,
    注意到“rw”了吗?就是这个标志,决定我们的tiny linux的文件系统是否能够写入的,或许你这样考虑,
    我直接在grub.conf里面把“ro”改成“rw”不可以吗?自己试试就知道了:)
    3。login
    关于login我不想多说了,关键在于/lib里面的库文件,不可多删,当然,为了系统尽可能的小,也一定不要少删啊。。
    多用户登陆的话,需要更改/etc/inittab,详细的参考busybox的文档吧
    最后总结一下rcS这个文件吧:
    rcS:
    /bin/fsck ????(参数自己找找吧,不懂的话看看rc.sysinit)
    /sbin/umount -a
    /sbin/mount -a
    /sbin/mount -t ext3 remount rw /
    /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/lib/crc32.o
    /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/mii.o
    /sbin/insmod /lib/modules/2.4.21-9.ELcustom/kernel/drivers/net/8139too.so
    /sbin/ifconfig eth0 192.168.0.253 netmask 255.255.255.0
    /sbin/route default gw 192.168.0.1
    参考资料:
    http://www.linuxjournal.com/article.php?sid=4335

    http://www.linuxjournal.com/article.php?sid=4395

    http://www.linuxjournal.com/article.php?sid=4528

    **************************************************************************************

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/53632/showart_420276.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP