zoukankan      html  css  js  c++  java
  • S3C6410嵌入式应用平台构建(六)——linux-3.14.4移植到OK6410-(Yaffs2文件制作)

    本文主要讲怎用利用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文件系统是挂载成功了,但是内核还是启动不起来,下篇文章在具体分析了。我的周末呀。。。。

  • 相关阅读:
    【UGUI】源码 -- 0总框架
    【Unity】 细说AssetBundle
    Unity文件引用、meta文件详解
    ( 资源管理器03 )Prefab加载自动化管理引用计数管理器
    ( 资源管理器 02 )AssetBundle 同步异步引用计数资源加载管理器
    ( 资源管理器 01 )Asset同步异步引用计数资源加载管理器
    git status 显示中文和解决中文乱码
    C# 16进制与字符串、字节数组之间的转换
    mac地址转byte数组
    unity插件调用打印机
  • 原文地址:https://www.cnblogs.com/lixiaoming90/p/3776418.html
Copyright © 2011-2022 走看看