本文主要讲怎用利用yaffs2工具和busybox制作yaffs2文件系统镜像。大多数都是参照网上的,目的在于记录学习,不做任何用途。

   一、制作mkyaffs2image工具

         进入yaffs2源码目录下utils目录,修改mkyaff2image.c,做如下修改:

进入yaffs2源码目录下direct目录,修改yportenv.h

增加#define CONFIG_YAFFS_DEFINES_TYPES

保存后make,这时就在utils目录生产mkyaffs2image文件,把这个文件拷贝到/usr/bin目录下

到此,后面我们就可以用该工具制作镜像文件了。

 

    二、制作根文件系统

当我们在linux下输入ls  / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。

该标准规定了根目录下各个子目录的名称及其存放的内容:

目录名

存放的内容

/bin

必备的用户命令,例如ls、cp等

/sbin

必备的系统管理员命令,例如ifconfig、reboot等

/dev

设备文件,例如mtdblock0、tty1等

/etc

系统配置文件,包括启动文件,例如inittab等

/lib

必要的链接库,例如C链接库、内核模块

/home

普通用户主目录

/root

root用户主目录

/usr/bin

非必备的用户程序,例如find、du等

/usr/sbin

非必备的管理员程序,例如chroot、inetd等

/usr/lib

库文件

/var

守护程序和工具程序所存放的可变,例如日志文件

/proc

用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容

/sys

用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容

/mnt

文件系统挂接点,用于临时安装文件系统

/tmp

临时性的文件,重启后将自动清除

制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:

· 编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录

· 利用交叉编译工具链,构建/lib目录

· 手工构建/etc目录

· 手工构建最简化的/dev目录

· 创建其它空目录

· 配置系统自动生成/proc目录

· 利用udev构建完整的/dev目录

· 制作根文件系统的Yaffs2映像文件

下面就来详细介绍这个过程。

  1. 下载并编译Busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录

  1.1 下载网址:http://www.busybox.net/   我下载  busybox-1.22.1.tar.bz2

  1.2 解压后修改Makefile文件,这就不用说,跟Linux一样。

   1.3 配置菜单

我们大多按找默认配置,然后在此基础上进行修改。

   $ make defconfig

   $ make menuconfig

Busybox Settings --->Build Options --->(arm-linux-) Cross Compiler prefix
Busybox Settings --->General Configuration --->[*] Don't use /usr

Busybox Settings --->Installation Options—>你自己要安装的目录(默认是_install目录)

我自己设置在ok6410_fs/  


  1.4 编译,安装

  $make;make install

  我们进入ok6410_fs后发现,已经有了  /bin、/sbin、/usr/bin、/usr/sbin

 

2. 构建基本的文件夹及文件

   建立Linux文件系统基本的文件夹,我也是参照别人的,无非就是新建文件夹,然后改权限嘛,我这里就偷个懒,和别人一样,写个脚本。

保存,修改权限:chmod +x creat_fs.sh

$ ./creat_fs.sh

 

2. 1 创建 /etc/profile文件,主要用于环境变量。文件内容如下:

2.2 创建初始化文件。etc/init.d/rcS

注意修改这个文件权限:chmod +x /etc/init.d/rcS

2.3 创建etc/fstab文件


2.4 创建 etc/inittab文件

inittab文件中每个条目用来定义一个需要init启动的子进程,并确定它的启动方式,格式为<id>:<runlevel>:<action>:<process>。例如:ttySAC0::askfirst:-/bin/sh

 

2.5 创建 usr/etc/init


注意修改权限:chmod +x usr/etc/init

 

2.6 创建usr/etc/mdev.conf,内容为空。

 

3. 拷贝arm工具链中库文件到lib目录中

$ cp /usr/local/arm/toolschain/4.4.3/arm-none-linux-gnueabi/lib/*so* lib/ –d

-d的作用,原来是一个链接文件的还拷贝成一个链接文件,如果不带-d的话会拷贝到源文件,这个时候文件就会比较大

 

4. 到此,基本的根文件系统已经准备好,下面用mkyaffs2image产生镜像文件。

$ mkyaffs2image ok6410_fs  rootfs.yaffs2

 

最后通过,tftp下载到板子上,写到nandflash上启动,启动log如下:


从上面可以看出,yaffs2文件系统是挂载成功了,但是内核还是启动不起来,下篇文章在具体分析了。我的周末呀。。。。

posted on 2014-06-08 16:52  程序马  阅读(1337)  评论(0编辑  收藏  举报