您的位置:首页 > 编程语言 > PHP开发

制作yaffs2根文件系统

2013-08-27 11:55 302 查看
现在大部分开发板都可以支持yaffs2 文件系统,它是专门针对嵌入式设备,特别是使用nand flash作为存储器的嵌入式设备而创建的一种文件系统,早先的yaffs仅支持小页(512byte/page)的nand flash,使用 yaffs2 就可以支持大页的 nand flash。

所谓制作根文件系统,就是创建各个目录,并且在里面创建各种文件,比如在/bin,/sbin/目录下存放各种可执行的程序,在/etc目录下存放配置文件,在/lib目录下存放库文件,下面就开始文件系统的制作。

可以从http://www.busybox.net/downloads/下载Busybox-1.13.3。

1.根文件系统的目录结构

        bin 存放所有用户都可以使用的、基本的命令。
        sbin 存放的是基本的系统命令,它们用于启动系统、修复系统等。
        usr 里面存放的是共享、只读的程序和数据。
        proc 这是个空目录,常作为proc文件系统的挂载点。
        dev 该目录存放设备文件和其它特殊文件。
        etc 存放系统配置文件,包括启动文件。
        lib 存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。
        boot 引导加载程序使用的静态文件
        home 用户主目录,包括供服务账号锁使用的主目录,如FTP
        mnt 用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。
        opt 给主机额外安装软件所摆放的目录。
        root root用户的主目录
        tmp 存放临时文件,通常是空目录。
        var 存放可变的数据。

2.建立根文件系统的目录

创建一个shell脚本文件create_filesystem用于构建根文件系统的各个目录。运行./ create_filesystem  nfsroot即可在当前目录下建立根文件系统的目录nfsroot,其脚本的内容如下:

#!/bin/sh

echo "------Create $1 directons start...--------"

mkdir $1

cd $1

echo "--------Create root,dev....----------"

mkdir root dev etc boot tmp var sys proc lib mnt home usr

mkdir etc/init.d etc/rc.d etc/sysconfig

mkdir usr/sbin usr/bin usr/lib usr/modules

echo "make node in dev/console dev/null"

mknod -m 600 dev/console c 5 1

mknod -m 600 dev/null c 1 3

mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp

mkdir var/lib var/lock var/run var/tmp

chmod 1777 tmp

chmod 1777 var/tmp

echo "-------make direction done---------"

改变了tmp目录的使用权,让它开启sticky位,为tmp目录的使用权开启此位,可确保tmp目录底下建立的文件,只有建立它的用户有权删除。

执行chmod  +x  create_filesystem添加可执行权限。

3.建立动态的链接库

动态链接库直接使用友善之臂的,首先,下载友善之臂的根文件系统解压后得到root_qtopia,把该文件下的lib下的文件全部复制到我们自己建立的lib/文件夹下。cp –rd  root_qtopia/lib/*  nfsroot/lib/

4.编译和安装Busybox

Bosybox 是一个遵循GPL v2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用 Busybox 可以自动生成根文件系统所需的bin、sbin、usr 目录和 linuxrc 文件。

解压Busybox,然后修改该目录下的makefile文件,修改平台为arm平台,修改编译器为默认的交叉编译器

CROSS_COMPILE ?=arm-linux-   //大约在164行

ARCH ?=arm  //大约在189行

config %config: scripts_basic outputmakefile FORCE改为  %config: scripts_basic outputmakefile FORCE

/ %/: prepare scripts FORCE  改为 %/: prepare scripts FORCE

配置busybox,在busybox-1.13.3目录下,这里我们只关心改动的地方。执行make menuconfig,其各个选项的配置如下(只列出更改的):

(1)Busybox Settings--->

        BuildOptions--->

                [*]Build BusyBox as a static binary(no shared libs)

        BusyboxLibrary Tuning --->

                (1024)Maximumlength of input

                [*]vi-style line editing commands

                [*]Fancyshell prompts

(2)Linux System Utilities --->

                [*]Support/etc/mdev.conf

                [*]Supportcommand execution at device addition/removal

(3) Linux Module Utilities--->

        [ ]simplified  modutils

                [*]insmod

                [*]rmmod

                [*]lsmod

                [*]modprobe

5.编译busybox

编译busybox到指定目录: make CONFIG_PREFIX= nfsroot install

即:执行make CONFIG_PREFIX=根文件系统目录 install

在rootfs目录下会生成目录bin、sbin、usr和文件linuxrc的内容。

6.建立etc目录

init进程根据/etc/inittab文件来创建其他的子进程,比如调用脚本文件配置IP地址,挂载其他的文件系统,最后启动shell等。

(1)拷贝主机etc目录下的passwd、group、shadow文件到rootfs/etc目录下。

(2)在etc/下创建mdev.conf文件

内容为:
# system all-writable devices

full  0:0  0666

null  0:0  0666

ptmx  0:0  0666

random  0:0  0666

tty  0:0  0666

zero  0:0  0666

# console devices

tty[0-9]* 0:5 0660

vc/[0-9]* 0:5 0660

# serial port devices

s3c2410_serial0  0:5  0666  =ttySAC0

s3c2410_serial1  0:5  0666  =ttySAC1

s3c2410_serial2  0:5  0666  =ttySAC2

s3c2410_serial3  0:5  0666  =ttySAC3

# loop devices

loop[0-9]*  0:0  0660  =loop/

# i2c devices

i2c-0  0:0  0666  =i2c/0

i2c-1  0:0  0666  =i2c/1

# frame buffer devices

fb[0-9]  0:0  0666

# input devices

mice  0:0  0660  =input/

mouse.*  0:0  0660  =input/

event.*  0:0  0660  =input/

ts.*  0:0  0660  =input/

# rtc devices

rtc0  0:0  0644  >rtc

rtc[1-9]  0:0  0644

# misc devices

mmcblk0p1  0:0  0600  =sdcard */bin/hotplug.sh

sda1  0:0  0600  =udisk * /bin/hotplug.sh

(3)etc/inittab文件:仿照Busybox的examples/inittab文件,在etc/目录下创建一个inittab文件,写上以下内容:

#etc/inittab

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

::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

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

(4)创建etc/init.d/rcS文件:

这是一个脚本文件,可以在里面添加自动执行的命令

#!/bin/sh

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

runlevel=S //运行的级别

prevlevel=N

umask 022  //文件夹的掩码

export PATH runlevel prevlevel

echo"-------------------------------------------------------"

mount –a //挂载/etc/fstab/文件指定的所有的文件系统

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

mdev –s

echo "        Kernel version: linux-2.6.32.2   "

echo "              mini2440              "

echo"-------------------------------------------------------"

/bin/hostname -F /etc/sysconfig/HOSTNAME    //主机的名字

最后,还要改变它的属性,使它具有可执行权限 chmod +x etc/init.d/rcS

(5)etc/sysconfig目录下新建文件HOSTNAME,内容为“mini2440”。

(6)创建etc/fstab文件:

内容如下,表示执行完,“mount -a”命
a3d1
令后将挂载proc,tmpfs等包含在该文件中的所有的文件系统。

#device mount-point type option dump fsck order

proc   /proc   proc    defaults 0 0

tmpfs  /tmp    tmpfs   defaults 0 0

none   /tmp    ramfs  defaults 0 0

sysfs   /sys    sysfs   defaults 0 0

mdev   /dev   ramfs  defaults 0 0

(7)创建etc/profile文件:

#Ash profile

#vim:syntax=sh

#No core file by defaults

#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

7. 制作根文件系统映像文件

使用命令mkyaffs2image-128Mrootfs rootfs.yaffs2生成根文件系统映像文件。

把生成的rootsfs.yassf2文件下载到nandFlash中的根文件系统区。然后从NANDFlash启动可以看到启动信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: