原创 【原】编译BusyBox制作文系统

2009-10-8 09:46 4942 7 7 分类: MCU/ 嵌入式

一、环境
Ubuntu 8.04
arm-linux-gcc 3.4.5
busybox-1.1.3


二、busybox制作文件系统
  1、下载busybox1.1.3(http://www.busybox.net/)并解压。
  2、进入解压后的目录,配置Busybox


  #make menuconfig


  Busybox Settings >


  General Configuration >
  

  • Support for devfs


      Init Utilities >
      

  • init
      
  • Support reading an inittab file /* 支持init读取/etc/inittab配置文件,一定要选上 */
      
  •      Be _extra_ quiet on boot      
      
  •      Support running init from within an initrd (not initramfs)
      
  • poweroff, halt, and reboot
      
  • mesg


      Shells >


      Choose your default shell (ash) >
      /* (X) ash 选中ash,这样生成的时候才会生成bin/sh文件
      * 看看我们前头的linuxrc脚本的头一句:
      * #!/bin/sh 是由bin/sh来解释执行的
      */ (我开始就因为在这里没选上,结果就造成启动不起来  )
      

  • ash


    添加历史记录、自动补全、删除字符的功能:
       Shells --->
    ---   Bourne Shell Options                                          
       [ ]   Hide message on interactive shell startup                  
       [ ]   Standalone shell                                           
      

  •    command line editing                                       
      
  •      vi-style line editing commands                           
          (15)    history size                                         
      
  •      history saving                                           
      
  •      tab completion                                           
      
  •        username completion                                   
       [ ]     Fancy shell prompts


      Coreutils >
      

  • cp
      
  • cat
      
  • ls
      
  • mkdir
      
  • echo (basic SuSv3 version taking no options)
      
  • env
      
  • mv
      
  • pwd
      
  • rm
      
  • touch


      Editors >
      

  • vi


      Linux System Utilities >
      

  • mount
      
  • umount
      
  • Support loopback mounts
      
  • Support for the old /etc/mtab file


        Linux Module Utilities  --->
       

  • insmod                
       
  • rmmod      
       
  • lsmod       
       
  •    lsmod pretty output for 2.6.x Linux kernels       
       
  • modprobe      
       
  •    Multiple options parsing             
                         ---   Options common to multiple modutils       
       
  •    Support tainted module checking with new kernels      
        [ ]   Support version 2.2.x to 2.4.x Linux kernels    //此项一定不要选!!!     
       
  •    Support version 2.6.x Linux kernels                                       


        Networking Utilities >
       

  • ifconfig  
       
  • ping  


         Archival Utilities  --->
        

  • tar
        
  •      Enable archive creation (NEW)
        
  •      Enable -j option to handle .tar.bz2 files    



        注:可根据需要自已选择命令。


        3、如果文件系统在2410上运行的话,不需要修改源码,如果在2440上运行,需要将busybox-1.1.3/init/init.c中的
    两处
      close(0);
      close(1);
      close(2);
    注释掉:
      /* Clean up */
      //close(0);
      //close(1);
      //close(2);


     /* Close whatever files are open, and reset the console. */
     //close(0);
     //close(1);
     //close(2);
       4、编译并安装Busybox (1.1.3的Makefile里没有设置ARCH和CROSS内容,需要亲自在指令里写上,我是这么做的)


         #export PATH=$PATH:usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/bin
         #make TARGET_ARCH=arm CROSS="arm-linux-"
         #make install


        5、建立根文件系统结构
         #cd ~
         #mkdir rootfs
         #cd rootfs
         #mkdir bin dev etc lib proc sbin tmp usr var mnt
         #chmod 1777 tmp
         #mkdir usr/bin usr/lib usr/sbin
         #mkdir var/lib var/lock var/log var/run var/tmp
         #mkdir etc/init.d
         #chmod 1777 var/tmp
           把 busybox1.1.3/_install/目录下的所有文件copy过来覆盖rootfs文件夹里的空文件夹。


        lib里面还要拷入一些库文件,下面仅给出一些常用的库
         #cd rootfs/lib
         #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/ld* ./
         #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libc-2.3.6.so ./
         #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libc.so.6 ./
         #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libm* ./
         #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/libcrypt* ./
           当然为了方便,可以将交叉编译的库全放进去,但是这样会增加文件系统的体积。
         #cp -rfd /usr/crosstool/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib/* ./  (注意-d,保持库文件的链接关系)


        6、创建etc/init.d/rcS
    #!/bin/sh
    echo "running /etc/init.d/rcS"
    echo "mount the /proc file system"
    /bin/mount -t proc proc /proc


    echo "mount tmpfs filesystem to /tmp"
    /bin/mount -t tmpfs none /tmp


    echo "mount ramfs filesystem to /var"
    /bin/mount -t ramfs none /var


         然后修改权限:chmod 775 rcS


        7、创建etc/inittab
    # This is run first except when booting
    console::sysinit:/etc/init.d/rcS
    # Start an "askfirst" shell on the console
    #::askfirst:-/bin/bash
    console::askfirst:-/bin/sh
    # Stuff to do when restarting the init process
    ::restart:/sbin/init
    # Stuff to do before rebooting
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r
        注:需要将内核源码drivers/char/tty_io.c中所有的
    noctty = 1改为noctty = 0


        8、再创建etc/fstab
    none            /proc           proc    defaults 0 0
    none            /dev/pts        devpts  mode="0622"       0 0
    tmpfs           /dev/shm        tmpfs   defaults        0 0


        至此,根文件系统制作完毕。


  • PARTNER CONTENT

    文章评论0条评论)

    登录后参与讨论
    EE直播间
    更多
    我要评论
    0
    7
    关闭 站长推荐上一条 /1 下一条