免费注册 查看新帖 |

Chinaunix

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

根文件系统的制作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-13 16:37 |只看该作者 |倒序浏览
此文仅介绍busybox生成根文件系统的步骤和方法.对生成后的文件是否运行未做验证.
一  修改busybox中的 Makefile文件
找到  ARCH  和 CROSS_COMPILE 修改成如下
ARCH            ?= arm
CROSS_COMPILE   ?= /usr/local/arm/3.3.2/bin/arm-linux-
二  配置busybox(不同的busybox采用不同的配置方案,此外仅供参考)
[root@localhost busybox]# make defconfig
[root@localhost busybox]# make xconfig
=============================================
修改配置 主要修改如下
=============================================
Busybox Settings
     Build Options
   
  • Build BusyBox as a static binary   
          //选此项静态编译。
    Miscellaneous Utilities
         []taskset    //选了就会出错
    -------------------------------------------------
    三  编译
    [root@localhost busybox-1.5.1]# make all install
    -----------------------------------------------------------------
    最后会在  busybox-1.5.1/_install/目录生成你要的 bin sbin  usr 目录
    ------------------------------------------------------------------

    2. 编写linuxrc 文件
    -----------------------------------------------------------------
    #!/bin/sh
    #echo "mount /etc as ramfs"
    /bin/mount -n -t ramfs ramfs /etc
    /bin/cp -a /mnt/etc/* /etc
    echo "re-create the /etc/mtab entries"
    # re-create the /etc/mtab entries
    /bin/mount -f -t cramfs -o remount,ro /dev/mtdblock/3  /
    #mount some file system
    echo "mount  /dev/shm as tmpfs"
    /bin/mount -n -t  tmpfs tmpfs /dev/shm
    #挂载/proc为proc文件系统
    echo "mount /proc as proc"
    /bin/mount -n -t  proc none /proc
    #挂载/sys为sysfs文件系统
    echo "mount  /sys as sysfs"  
    /bin/mount -n -t  sysfs none /sys
    /bin/mount -f -t ramfs ramfs /etc
    echo "yaffs is mounted"
    /bin/mount -t yaffs /dev/mtdblock/1 /mnt/yaffs
    exec /sbin/init
    ---------------------------------------------------------------------
    3. 权限修改
    chmod  chmod 775 linuxrc
    4.  编写 inittab文件

    ---------------------------------------------------------------------
    ::sysinit:/etc/init.d/rc

    ::askfirst:-/bin/sh
    tty2::askfirst:-/bin/sh
    tty3::askfirst:-/bin/sh
    tty4::askfirst:-/bin/sh
    tty0::askfirst:-/bin/sh
       
    ::restart:/sbin/init
            
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a -r
    ::shutdown:/sbin/swapoff -a
    ----------------------------------------------------------------------
    5. rc文件
    ----------------------------------------------------------------------
    #!/bin/sh
    /bin/mount -a
    -----------------------------------------------------------------------
    6. fastab 文件
    ----------------------------------------------------------------------
    none  /proc  proc defaults 0 0
    none  /dev/pts devpts mode=0622 0 0
    tmpfs  /dev/shm tmpfs defaults 0 0
    ----------------------------------------------------------------------
    7. 各文件的关系
    ----------------------------------------------------------------------
    7.1 建立一个目标板的空根目录
    我们将在这里构建构建根文件系统,创建基础目录结构. 存放交叉编译后生成的目标应用程序
    (BUSYBOX,TINYLOGIN),存放库文件等。
    [root@localhost rootfs]# mkdir my_rootfs
    [root@localhost rootfs]# pwd
    /home/arm/dev_home/rootfs/my_rootfs
    [root@localhost rootfs]# cd my_rootfs
    [root@localhost my_rootfs]#
    7.2 在my_rootfs中建立Linux目录树
    [root@localhost my_rootfs]#mkdir bin dev etc home lib mnt proc sbin sys tmp root usr
    [root@localhost my_rootfs]#mkdir mnt/etc
    [root@localhost my_rootfs]#mkdir usr/bin usr/lib usr/sbin
    [root@localhost my_rootfs]#touch linuxrc
    [root@localhost my_rootfs]#tree
    |bin
    |dev
    |etc
    |home
    |lib
    |linuxrc
    /* 此文件为启动脚本,是一shell脚本文件。本文后面有专门介绍 */
    |mnt
    | `etc   
    |proc
    |sbin
    |sys
    |tmp
    |root
    `usr
    |bin
    |lib
    `sbin
    8. 把上面编译出来的 busybox文件拷贝到 my_rootfs 文件系统
    ---------------------------------------------------------------
    把 busybox1.5.1/_install/目录下的 bin  sbin  usr 覆盖 my_rootfs
    文件夹里的空文件夹。
    --------------------------------------------------------------
    9. 把 5 生成的文件(rc)拷贝到 /mnt/etc/init.d/目录(先在/mnt/etc/目录新建格init.d目录)
    把 4,6生成的文件(inittab和 fastab )放到 /mnt/etc/目录
    把 2 生成的文件linuxrc 放到/目录
             这里所提到的 /目录即my_rootfs目录。
    10. 新建/dev设备,在/dev目录(即my_rootfs/dev/).
    mknod console c 5 1
    非常重要之/lib,务必重视(此处对lib的添加的前提是对busybox的编译采用的是动态的编译方式,如果一天开始采用的是静态的编译方式,则没有必要对lib目录的文件拷贝)   
        找到你编译环境的target目录,把需要的lib文件先用strip压縮(非target目录下的,而已编译环境提供的strip),先把最基本的libc, ld等等,必须同样做跟target/lib里面一样的link。
        然后根据特定的应用加相应的lib,不要把不用的加进去,lib比较占空间
    采用动态方式的拷贝方法如下:
    /*****
    [root@localhost bin]# file busybox
    busybox: elf 32-bit lsb executable, arm, version 1, dynamically linked (uses shared libs), for gnu/linux 2.0.0, stripped
    四 查看共享了哪些库文件
    用命令 arm-linux-readelf -a ${program} | grep "shared library"
    ---------------------------------------------------------------
    [root@localhost bin]# pwd
    /root/maoyong/busybox-1.4.2/_install/bin
    [root@localhost bin]# arm-linux-readelf -a busybox | grep "shared library"
    0x00000001 (needed) shared library: [libcrypt.so.1]
    0x00000001 (needed) shared library: [libm.so.6]
    0x00000001 (needed) shared library: [libc.so.6]
    ------------------------------------------------------------------
    如上所示 要把 /usr/local/arm/3.3.2/arm-linux/lib目录下的
    libcrypt.so.1
    libm.so.6
    libc.so.6
    文件是busybox所需的共享库文件,要把它以及和他相关的链接文件拷贝到
    你新建的文件系统的 lib 目录。
    (注意: libcrypt.so.1 libm.so.6 libc.so.6相关的链接文件也要拷贝到lib目录)
    *****/
    8. 生成cramfs文件

    ----------------------------------------------------------------
    下载mkfs.cramfs工具,然后用下面命令生成你要的cramfs文件系统
    ./mkcramfs  ./my_rootfs    ./root.cramfs
    在ubuntu系统,mkfs.cramfs工具可以直接apt-get 获取。
    Mkfs.cramfs 工具由util-linux-2.12r.tar.bz2产生(./configure  make  makeinstall)
                   
                   
                   

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

    本版积分规则 发表回复

      

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

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP