原创 arm-linux学习之busybox文件系统(一)

2008-12-29 23:00 6872 8 8 分类: MCU/ 嵌入式
    移植linux到arm平台,完成bootloader和kernel之后就要制作自己的文件系统。这个东西搞的大爷很惨,上网查了很多资料,最初是从cramfs文件系统开始,然后ramdisk的ext2文件系统,最后才是jffs2文件系统。开始是找不到系统,后来是can't access tty,joy control turn off,后来是不能运行自己的程序。不知道怎么淡出就没有作笔记的习惯,现在从新作同样的事情的时候却又不出现这样的问题了¥#%@#……%¥……%
    (1)下载并且配置busybox,偶使用的版本是busybox-1.13.0.tar.gz,解压缩,

    [root@localhost busybox]# cd busybox-1.13.0
    [root@localhost busybox-1.13.0]# make menuconfig
    [root@localhost busybox-1.13.0]# make
    [root@localhost busybox-1.13.0]# make install PREFIX=_install
其中配置时:
 Busybox Settings  ---> 
     Build Options  --->  
        [ ] Build BusyBox as a static binary (no shared libs)      //采用静态编译的方式,不需要lib的支持,这种办法比较简单,但是不能运行自己的程序,所以选择下面的
Build shared libbusybox   方式,但是需要手动把运行程序以来的lib文件copy到/lib中。
        [ ]   Build BusyBox as a position independent executable             
        [ ] Force NOMMU build                                               
       
  • Build shared libbusybox                                          
            [ ]   Produce a binary for each applet, linked against libbusybox    
            [ ]   Produce additional busybox binary linked against libbusybox   
            [ ] Build with Large File Support (for accessing files > 2 GB)   
            (arm-9tdmi-linux-gnu-) Cross Compiler prefix  //交叉编译

            其他各项的配置省略,把.config文件放在后面。使用命令执行make install PREFIX=_install执行安装,目标在_install目录之下。安装完成之后会得到以下几个目录和一个文件
    [root@localhost _install]# ls
    bin  linuxrc  sbin  usr
    [root@localhost _install]# ls -l
    总计 28
    drwxr-xr-x 2 root root 4096 11-30 04:22 bin
    lrwxrwxrwx 1 root root   11 11-30 04:22 linuxrc -> bin/busybox
    drwxr-xr-x 2 root root 4096 11-30 04:22 sbin
    drwxr-xr-x 4 root root 4096 11-30 04:22 usr
        其中有个linuxrc文件,这就是默认情况下的脚本文件,一般需要自己编写这个文件。其实bosybox编译的结构就是一个二进制二文件busybosy,其他命令像ls,cd等等所有都是连接到busybox这个文件的。这一点比较#@#¥@#%。
    (二)制作跟文件系统
    1、顶层文件系统
    在/home/arm/建立一个root_dir的目录,然后在root_dir下面建立以下目录
    [root@localhost root_dir]# ls
    bin  etc   lib     mnt   root  sys  usr
    dev  home  lib64    proc  sbin  tmp  var
    再建立一个linuxrc的文件,将其属性改成可执行的脚本。
    [root@localhost root_dir]# ls
    bin  etc   lib    linuxrc   mnt   root  sys  usr
    dev  home  lib64    proc  sbin  tmp  var
    然后把刚才编译的busybox的的_install的bin   sbin  usr这三个目录全部copy到/home/arm/root_dir
    下。
    查看一下
    [root@localhost root_dir]# cd bin
    [root@localhost bin]# ls
    addgroup  cp        egrep   login     mountpoint     rm         umount
    adduser   cpio      fgrep   ls        mt             rmdir      uncompress
    ash       date      grep    lsattr    mv             run-parts  vi
    busybox   delgroup  gunzip  makemime  ping           sh         zcat
    cat       deluser   gzip    mkdir     pipe_progress  su
    chattr    dmesg     ip      mknod     ps             tar
    chmod     dumpkmap  kill    mktemp    pwd            tinylogin
    chown     echo      ln      mount     reformime      touch
    [root@localhost bin]# ls -l
    总计 1104
    lrwxrwxrwx 1 root root      9 11-15 00:16 addgroup -> tinylogin
    lrwxrwxrwx 1 root root      9 11-15 00:16 adduser -> tinylogin
    lrwxrwxrwx 1 root root      7 11-30 04:24 ash -> busybox
    -rwxr-xr-x 1 root root 431172 11-30 04:22 busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 cat -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 chattr -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 chmod -> busybox
    lrwxrwxrwx 1 root root      7 11-18 03:18 chown -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 cp -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 cpio -> busybox
    lrwxrwxrwx 1 root root      7 11-18 03:18 date -> busybox
    lrwxrwxrwx 1 root root      9 11-15 00:16 delgroup -> tinylogin
    lrwxrwxrwx 1 root root      9 11-15 00:16 deluser -> tinylogin
    lrwxrwxrwx 1 root root      7 11-30 04:24 dmesg -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 dumpkmap -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 echo -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 egrep -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 fgrep -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 grep -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 gunzip -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 gzip -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 ip -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 kill -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 ln -> busybox
    lrwxrwxrwx 1 root root      9 11-15 00:16 login -> tinylogin
    lrwxrwxrwx 1 root root      7 11-30 04:24 ls -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 lsattr -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 makemime -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 mkdir -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 mknod -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 mktemp -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 mount -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 mountpoint -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 mt -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 mv -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 ping -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 pipe_progress -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 ps -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 pwd -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 reformime -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 rm -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 rmdir -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 run-parts -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 sh -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 su -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 tar -> busybox
    -rwsr-xr-x 1 root root 473256 11-15 00:16 tinylogin
    lrwxrwxrwx 1 root root      7 11-18 03:18 touch -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 umount -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 uncompress -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 vi -> busybox
    lrwxrwxrwx 1 root root      7 11-30 04:24 zcat -> busybox
    [root@localhost bin]#
    2、设备节点
    在dev目录下创建三个节点
    [root@localhost dev]# ls -al
    总计 28
    crw-r--r--  1 root root 5, 1 11-28 23:28 console
    crw-r--r--  1 root root 1, 3 11-14 23:57 null
    crw-r--r--  1 root root 1, 5 11-14 23:57 zero
    当然这几个节点远远不够,需要的时候在给据major 和minor补充
    3、inittab文件
        inittab是init程序的配置文件,busybox目录下有个exmples目录(/home/arm/busybox/busybox-1.13.0/examples)该目录下有个示例inittab
    /home/arm/busybox/busybox-1.13.0/examples中inittab文件第38行到46行
    # Note: BusyBox init works just fine without an inittab. If no inittab is
    # found, it has the following default behavior:
    #         ::sysinit:/etc/init.d/rcS
    #         ::askfirst:/bin/sh
    #         ::ctrlaltdel:/sbin/reboot
    #         ::shutdown:/sbin/swapoff -a
    #         ::shutdown:/bin/umount -a -r
    #         ::restart:/sbin/init
    #
    # if it detects that /dev/console is _not_ a serial console, it will
    # also run:
    #         tty2::askfirst:/bin/sh
    #         tty3::askfirst:/bin/sh
    #         tty4::askfirst:/bin/sh

        如果出现
    can't access tty2,joy control turn off,等等,症结可能在这里。

        将
    /home/arm/busybox/busybox-1.13.0/examples/inittab 文件copy到/home/arm/root_dir/etc/目录下,并根据自己的要求修改就行了。(待续)


















                       
                                                                                
                                                         
       



  • 文章评论0条评论)

    登录后参与讨论
    我要评论
    0
    8
    关闭 站长推荐上一条 /2 下一条