Chinaunix

标题: 基于s3c2440 yaffs2 文件系统的移植 [打印本页]

作者: iibull    时间: 2009-03-13 10:39
标题: 基于s3c2440 yaffs2 文件系统的移植
platform: s3c2440 + linux2.6.18 + yaffs2

首先在开发平台的上创建 rootfs 及 根目录下的一些必要的文件.
1.  创建必须的文件夹及设备文件
# mkdir rootfs
# cd rootfs
# mkdir bin dev etc lib mnt proc sbin sys root
# mkdir  /etc/var
# mkdir  /etc/tmp

# ln  -s /etc/var /var
# ln  -s /etc/tmp /tmp

2.   创建设备文件系统
从 Linux-2.6.18开始,负责旧版本的设备管理系统devfs已被废除,但新
版本的udev是一个基于用户空间的设备管理系统。在内核启动时并不能
自动创建设备节点,固需手动创建console和null两个启动过程必须的设
备节点。我们将采用busybox中内置的mdev,一个简化的udev版本.
# mknod -m 660 dev/console c 5 1
# mknod -m 660 dev/null        c 1 3

3.      建立动态运行库
# cp -rfd /usr/local/arm/4.0.3/arm-linux/lib/*  rootfs/lib/
拷贝经过交叉编译的库文件,参数-d,保持库文件的链接关系。
# rm -rf rootfs/lib/*.a  
删除所有的静态库文件。
注:/usr/local/arm/4.0.3/ 为交叉编译工具链的存放目录。
# arm-linux-strip rootfs/lib/*
移除所有的符号信息, 压缩库空间。
注:用arm-linux-gcc.3.4.1版本编译的时候可能不能通过,建议用4.0.3版本的。

4.      交叉编译busybox
解压缩tar -zxf busybox1.4.1.tar
解压后修改Makefile,指明交叉编译器:
     ARCH            ?= arm
    CROSS_COMPILE  ?= /usr/local/arm/4.0.3/bin/arm-linux-
在解压后的busybox 1.4.1目录里执行 make menuconfig,选择系统需要用到的命令或工具。
值得注意的是 shell 的选择,在 [color="#ff0000"]Choose your default shell (none) 这一项回车后选择ash, 否则,编译后会提示找不到shell,使系统无法启动。
还需选中以下两个选项:
Shell  --->
   
  •    Standalone shell
       
  •    Command line editing
        ...
       
       
  •      Tab completion         
       
  •        Username completion
      
       其中Tab comletion选项是用于输入命令后按 Tab 键自动补齐的.


    Busybox settings --->
       Build option  --->
          
  • Build BusyBox as a static binary (no shared libs)

    Init Utilities  --->
       
  •    init
       [ ]   debugging aid
       
  •    Support reading an inittab file
       [ ]   Support running commands with a controlling-tty
       
  •    Be _extra_ quiet on boot
       [ ]   Support dumping core for child processes (debugging only)
       
  •    Support running init from within an initrd (not initramfs)
       
  • poweroff, halt, and reboot
       
  • mesg

    Linux System Utilities  --->
       
  • mdev
       
  •    Support /etc/mdev.conf
       [ ]     Support command execution at device addition/removal




    必须选择 mdev 选项, 否则不能启用udev。
    执行 make install进行编译,编译完后,会出现_install目录,包含bin、sbin、usr三个目录和一个linuxrc文件。
    linuxrc是linux启动后第一执行的文件(由u-boot传给linux的启动参数决定,在kernel的boot option 的目录),其作用是执行相应的初始化工作。但u-boot编译生成的仅是一个指向/bin/busybox的链接文件。由于我们需要作一些初始化工作,如启动web服务器,加载特定驱动程序等,我们将自行编写linuxrc这个文件。bin、sbin、usr这三个目录里除了bin/busybox一个文件外,其余都是指向busybox的链接文件。我们将bin、sbin、usr这三个目录和linuxrc这个链接文件拷贝到rootfs的目录下,基本的文件系统制作完成。

    如果找不到linuxrc文件,可以自建一个:
    # ln -s /arm/busybox linuxrc


    5.      etc目录制作
    a)        添加 fstab 文件,添加 必须的挂靠目录
            none        /proc      proc   defaults   0 0
    none        /dev/pts   devpts mode=0622  0 0
    tmpfs       /dev/shm   tmpfs  defaults   0 0
    /dev/sda1   /mnt/flash  vfat  defaults   0 0

    b)        添加 init.d/rcS 文件 添加自动执行部分
    #! /bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/lib:
    runlevel=S
    prevlevel=N
    umask 022
    export PATH runlevel prevlevel
    #
    #Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
    #
    trap ":" INT QUIT TSTP
    /bin/mount -t proc  none  /proc
    /bin/mount -t tmpfs none  /root
    /bin/mount -t tmpfs none  /tmp
    /bin/mount -t tmpfs none  /var
    /bin/mount -t tmpfs none  /dev
    /bin/mount -t sysfs none  /sys
    /bin/mkdir -p /var/lib
    /bin/mkdir -p /var/run
    /bin/mkdir -p /var/log
    /bin/mknod -m 660 /dev/console c 5 1
    /bin/mknod -m 660 /dev/null    c 1 3
    /bin/mknod -m 666 /dev/ptmx    c 5 2
    /bin/mkdir  /dev/shm
    /bin/mkdir  /dev/pts
    echo  "Starting mdev ..."
    /sbin/mdev -s
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    /etc/rc.d/init.d/netd start
    /sbin/ifconfig lo    127.0.0.1
    /sbin/ifconfig eth0  192.168.0.9
    /sbin/route add default eth0
    /bin/hostname -F /etc/sysconfig/HOSTNAM

    c)        创建 rc.dinit.d etd 文件
    #!/bin/sh
    base=inetd
    # See how we were called.
    case "$1" in
      start)
            /usr/sbin/$base
            ;;
      stop)
        pid='/bin/pidof $base'
        if [ -n "$pid" ]; then
            kill -9 $pid
        fi
            ;;
    esac
    exit
    d)        其他文件具体参考rootfs目录

    2.      生成镜像文件
    a):  镜像文件tool文件:   mkfs.yaffs2
    b):  创建新的镜像文件:
      ./mkfs.yaffs2  1  rootfs  yaffs2.img
    mkfs.yaffs2参数说明可以参考./mkfs.yaffs2  -help

            新镜像文件yaffs2.img可以通过usb下载到nandflash里,Rootfs文件系统制作完成
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/90973/showart_1861442.html




    欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2