免费注册 查看新帖 |

Chinaunix

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

使用BusyBox构建根文件系统 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-14 14:46 |只看该作者 |倒序浏览

                                                                                一)移植BusyBox
下载busybox源代码,最新版本为busybox-1.15.0
http://www.busybox.net/downloads/
解压并进入目录:
# tar jxvf busybox-1.15.0.tar.bz2# cd busybox-1.15.0
修改Makefile:
# gedit Makefile &
把 164 行修改为:
CROSS_COMPILE = /opt/arm-2009q1/bin/arm-linux-
把 189 行修改为:
ARCH = arm
配置:
# make menuconfig
选上以下几项:
               
                Busybox Settings  --->
         Build Options  --->
               
  • Build BusyBox as a static binary (no shared libs)
                   
  • Build with Large File Support (for accessing files > 2 GB)
             Busybox Library Tuning  --->
                   
  •    vi-style line editing commands
                   
  •    Fancy shell prompts
    Linux Module Utilities  --->
            [ ] Simplified modutils
            
  •    insmod
            
  •    rmmod
            
  •    lsmod
            
  •    modprobe
            
  •    depmod
    退出并保存配置。
    编译:
    # make
    安装:
    # make install
    在busybox-1.15.0目录下可以找到_install子目录,这就是刚才的安装目录。
    二)加入必要的目录与文件
    改名为最小化根文件系统目录:
    # mv _install mini_rootfs
    进入最小化根文件系统目录:
    # cd mini_rootfs
    在mini_rootfs目录里建立一个名为create_rootfs.sh的脚本文件:
                   
                   
                    #!/bin/sh
    #root dir
    mkdir bin sbin lib etc dev sys proc tmp var opt mnt usr home root media
    #usr sub dir
    cd usr
    mkdir bin sbin lib local
    #usr/local sub dir
    cd local
    mkdir bin sbin lib
    cd ../..
    #etc sub dir
    cd etc
    touch inittab
    touch fstab
    touch profile
    touch passwd
    touch group
    touch shadow
    touch resolv.conf
    touch mdev.conf
    mkdir rc.d
    mkdir init.d
    touch init.d/rcS
    chmod +x init.d/rcS
    mkdir sysconfig
    touch sysconfig/HOSTNAME
    cd ..
    #dev sub dir
    cd dev
    mknod console c 5 1
    chmod 777 console
    mknod null c 1 3
    chmod 777 null
    cd ..
    #var sub dir
    cd var
    mkdir log
    cd ..
    为create_rootfs.sh加上可执行权限:
    # chmod +x create_rootfs.sh执行该脚本以生成最小化根文件系统所需要的目录与文件:# ./create_rootfs.sh
    拷贝交叉编译器里的动态链接库到最小化根文件系统的 lib 和 usr/lib 目录:
    # cp -f /opt/arm-2009q1/arm-none-linux-gnueabi/libc/armv4t/lib/*so* lib -a
    # cp -f /opt/arm-2009q1/arm-none-linux-gnueabi/libc/armv4t/usr/lib/*so* usr/lib -a
    etc/fatab文件的内容为:
    # /etc/fstab: static file system information.
    #
    # Use 'vol_id --uuid' to print the universally unique identifier for a
    # device; this may be used with UUID= as a more robust way to name devices
    # that works even if disks are added and removed. See fstab(5).
    #
    # file system> mount point>   type>  options>       dump>  pass>
    proc            /proc           proc    defaults        0       0
    sysfs            /sys            sysfs    defaults        0        0
    tmpfs            /var            tmpfs    defaults        0        0
    tmpfs            /tmp            tmpfs    defaults        0        0
    tmpfs            /dev            tmpfs    defaults        0        0
    etc/inittab文件的内容为:
    ::sysinit:/etc/init.d/rcS
    s3c2410_serial0::askfirst:-/bin/sh
    ::ctrlaltdel:-/sbin/reboot
    ::shutdown:/bin/umount -a -r
    ::restart:/sbin/init
    etc/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
    export LD_LIBRARY_PATH=lib:/usr/lib:$LD_LIBRARY_PATH
    etc/init.d/rcS的内容:
    #!/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
    runlevel=S
    prevlevel=N
    umask 022
    export PATH runlevel prevlevel
    mount -a
    mkdir /dev/pts
    mount -t devpts devpts /dev/pts
    echo /bin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    /bin/hostname -F /etc/sysconfig/HOSTNAME
    ifconfig eth0 192.168.0.80
    resolv.conf文件的内容为:
                   
                    nameserver 202.96.128.166
    etc/sysconfig/HOSTNAME文件的内容为你的英文名字。
    etc/passwd、etc/group、etc/shadow、etc/mdev.conf文件的内容为空。
    OK,算是做好了~~
    三)用户管理
    在文件系统正常运行起来后,使用adduser命令,使用方法为:# adduser root
    运行该命令后会打印出如下消息:passwd:unknown uid 0
    这表示不能为该用户设置密码,此时你会发现passwd命令也无法使用。
    解决的办法是,打开/etc/passwd文件,其内容为:root:x:1000:1000:Linux User…:/home/root:/bin/sh
    将用户ID和组ID均更改为0。
    打开/etc/group文件,其内容为:root:x:1000:
    同样将组ID改为0。
    然后,passwd命令就可以正常使用了。
    这时为root用户设置口令:# passwd root
    根据提示输入密码。
    这是我做好的最小化根文件系统的压缩包:

           
            文件:mini_rootfs.tar.gz
            大小:2971KB
            下载:
    下载
           
    # tar zxvf mini_rootfs.tar.gz
    为了正常使用,你还需要在它的dev目录里建立如下两个设备文件:
    cd dev
    mknod console c 5 1
    chmod 777 console
    mknod null c 1 3
    chmod 777 null
    cd ..


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

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP