原创 Busybox制作Linux根文件系统

2010-12-28 10:12 6502 12 7 分类: MCU/ 嵌入式

Busybox ——嵌入式Linux中的瑞士军刀


利用busybox-1.13.0制作linux根文件系统(yaffs2)


源码下载:http://www.busybox.net/downloads/


操作系统:RedHat 9.0


硬件平台:TQ2440


设定工作目录为 /opt/myworks


所以相关的交叉编译器文件包、LINUX-2.6.25.8源码包、busybox-1.13等都是直接在该目录下。


配置流程:


1.       首先要设置交叉编译环境:


在PC linux中需要设置pofile环境:


/etc/profile文件添加:


# Path manipulation


if [ `id -u` = 0 ]; then


       pathmunge /sbin


       pathmunge /usr/sbin


       pathmunge /usr/local/sbin


    pathmunge /opt/myworkshop


    pathmunge /opt/myworkshop/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin


fi


然后设置环境变量生效:


Source /etc/profile


在busybox-1.13.0根目录下找到 MakeFile,找到并修改相应参数:


ARCH ?= arm


CROSS_COMPILE ?= arm-linux


2.     Busybox 配置:


使用命令:make menuconfig  (或make xconfig)


在General Configuration  --->下


  • Show verbose applet usage messages


  • Store applet usage messages in compressed form


  • Support --install [-s] to install applet links at runtime


  • Enable locale support (system needs locale for this to work)


  • Support for --long-options


  • Use the devpts filesystem for Unix98 PTYs


  • Support writing pidfiles


  •    Runtime SUID/SGID configuration via /etc/busybox.conf


  •      Suppress warning message if /etc/busybox.conf is not readable


    在Build Options  --->下


  • Build BusyBox as a static binary (no shared libs)


  • Build with Large File Support (for accessing files > 2 GB) 


    在Installation Options  --->中


    [ ] Don't use /usr


    Applets links (as soft-links)  --->下


    (X) as soft-links 


    ( ) as hard-links


    ( ) as script wrappers


    ( ) not installed


    (./_install) BusyBox installation prefix


    在Linux Module Utilities  --->下


    (/lib/modules) Default directory containing modules


    (modules.dep) Default name of modules.dep 


    [ ] Simplified modutils


  •    insmod 


  •    rmmod 


  •    lsmod 


    [ ]     Pretty output


  •    modprobe 


    [ ]     Blacklist support


    [ ]   depmod 


    --- Options common to multiple modutils 


    [ ] Support version 2.2/2.4 Linux kernels


  • Support tainted module checking with new kernels


  • Support for module.aliases file


  • Support for module.symbols file


    基本上是上面这些配置,其余使用默认即可。


    配置完之后使用命令:


    # make; make install


    这样在busybox-1.13.0文件夹下会生成一个 _install 的文件夹。


    在工作目录下,新建立一个文件夹root_2.6.25.8_fs,并将 _install里边的全部内容拷贝到root_2.6.24.8_fs下。


    同时还要建立这些文件和节点,相关命令如下:


    # cd /opt/myworks/root_2.6.25.8_fs


    # mkdir dev etc home lib mnt opt proc root sys tmp var web usr/lib usr/share


    # cd dev


    # mkno console c 5 1


    # mkno null c 1 3



    098c9307-5022-4b04-9013-ebeb4dccb803.jpg


    拷贝相应的库文件到 root_2.6.25.8_fs 下的lib:


    # cd /opt/root_2.6.25.8_fs


    # cp -f /opt/myworkshop/4.3.3/arm-none-linux-gnueabi/libc/armv4/lib/*.so* lib –a


    接下来,就是建立和配置一些文件了:


    为了简单起见,只建立了一些必要的文件,分别如下:


    # cd /opt/myworkshop/root_2.25.8_fs/etc


    # mkdir init.d sysconfig


    在etc下建立以下文件:


    fstab


    改文件指明需要挂载的文件系统


    group


    用户组


    inittab


    busybox 初始化时要配置文件


    passwd


    密码文件,用于保存用户密码等


    shadow


    在你的目标系统运行使用passwd命令创建密码时,需要该文件的参与


    profile


    用户环境配置文件


    resolv.conf


    存放DNS配置信息


    mdev.conf


    mdev.conf的配置文件


    在etc/init.d下建立rcS文件。


    属于脚本文件,busybox运行的第一个脚本文件,在inittab中有指定。


    在sysconfig下建立HOSTNAME文件。


    存放hostname的名。


    各文件的内容:




    fstab:


    # device     mount-point    type   options        dump  fsck order


    proc           /proc        proc   defaults        0     0


    tmpfs          /tmp         tmpfs  defaults        0     0


    sysfs          /sys         sysfs  defaults        0     0


    tmpfs          /dev         tmpfs  defaults        0     0


    var            /dev         tmpfs  defaults        0     0


    group:


    root:*:0:


    daemon:*:1:


    bin:*:2:


    sys:*:3:


    adm:*:4:


    tty:*:5:


    disk:*:6:


    lp:*:7:lp


    mail:*:8:


    news:*:9:


    uucp:*:10:


    proxy:*:13:


    kmem:*:15:


    dialout:*:20:


    fax:*:21:


    voice:*:22:


    cdrom:*:24:


    floppy:*:25:


    tape:*:26:


    sudo:*:27:


    audio:*:29:


    ppp:x:99:


    500:x:500:yourname


    501:x:501:yourname


    # /etc/inittab


    ::sysinit:/etc/init.d/rcS


    console::askfirst:-/bin/sh


    ::ctrlaltdel:/sbin/reboot


    ::shutdown:/bin/umount -a –r


    上面出现的 “console” 是比较通用的写法,这样会很省事,而不管驱动源码中的串口设备名是什么。




    passwd:


    root::0:0:root:/:/bin/sh


    ftp::14:50:FTP User:/var/ftp:


    bin:*:1:1:bin:/bin:


    daemon:*:2:2:daemon:/sbin:


    nobody:*:99:99:Nobody:/:


    yourname:$df8GIZx6d9$L2ctqdXbYDzkbxNURpE4z/:502:502:Linux User,,,:/home/yourname:/bin/sh


    红色部分是我们现在所做的系统的密码,这个我们暂且这样写,不会影响文件系统的制作,在系统做好之后,使用命令:


    # passwd yourname


    即可生成了密码。




    profile:


    # Ash profile


    # vim: syntax=sh


     


    # No core files by default


    #ulimit -S -c 0 > /dev/null 2>&1


     


    USER="`id -un`"


    LOGNAME=$USER


    PS1='[\u@\h \W]# '


    PATH=$PATH


     


    HOSTNAME=`/bin/hostname`


     


    export USER LOGNAME PS1 PATH


    resolv.conf:


    nameserver 202.96.128.166


    shadow: 留空即可


    mdev.conf:留空即可


    HOSTNAME:


    yourname


    rcS:


    #!/bin/sh


     


     


    PATH=/sbin:/bin:/usr/sbin:/usr/bin


    runlevel=S


    prevlevel=N


    umask 022


    export PATH runlevel prevlevel


     


    #


    #     Trap CTRL-C &c only in this shell so we can interrupt subprocesses.


    #


     


    mount -a


    mkdir /dev/pts


    mount -t devpts devpts /dev/pts


    echo /sbin/mdev > /proc/sys/kernel/hotplug


    mdev -s


    mkdir -p /var/lock


     


     


     


    /bin/hostname -F /etc/sysconfig/HOSTNAME


    完成以上步骤后,即可制作生成文件系统了。


    设置文件属性,使其可执行:


    # chmod 777 inittab


    # chmod 777 rcS


    最后生成镜像并烧录:


    针对128M以上NAND FLASH,所以使用这个命令:


    # mkyaffs2image root_2.6.25.8_fs/ root_2.6.25.8_fs.bin


    如果小于128M:


    # mkyaffsimage_2 root_2.6.25.8_fs/ root_2.6.25.8_fs.bin


    如果能成功busybox的文件系统,那么就可以看到以下运行的结果了:



     859483fa-5767-4821-bf02-9f0b06a93df5.jpg


    出现一些问题的解决办法:


    A. 当出现“ Bad inittab entry line  “ 的时候,最可能的原因是,inittab的文件的配置不符合约定造成的或者内容参数有误。


    解决办法:修改inittab文件。 其实inittab文件不是很必须,实在不行,可以去掉,也不会影响文件系统的制作。


    B. 当出现 “con’t open ….”等的时候。说明该设备,不存在,或者说所对应的关系没有一致造成的。

  • 文章评论0条评论)

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