zoukankan      html  css  js  c++  java
  • ARM开发板系统移植-----rootfs的制作

      前面两篇文章分别介绍了mini2440开发板上运行的bootloader和kernel,到这里系统启动后其实是停留在一个“僵死”的状态---无法挂载根文件系统。

      这里将介绍如何制作一个根文件系统,并且挂载到内核中---即让内核能够访问到文件系统中的目录和文件。从用户的角度来看文件系统无非就是各个目录和文件,注意,这些目录和文件可以存在内存中,也可以存在Nand Flash 或者NOR Flash中,视具体的文件系统而定。本文就用基于内存的initram 和基于网络的nfs文件系统做例子介绍文件系统的概念。

      首先什么是文件系统?就本人理解而言,它就是操作系统提供的一种抽象,即操作系统将存储介质抽象化,并提供一种访问这种抽象的方法,让用户能够简洁且方便的访问存储介质(如硬盘和nand flash等)。为了实现这种抽象,操作系统把存储介质进行单元划分,文件存储在介质时就占据若干个单元。当然操作系统还记录下各个文件的基本属性(如文件大小、存储位置、所属人、访问权限等等),并组成一个文件控制块(FCB)。所有文件的FCB保存在一个目录文件中,即一个目录文件就是内容是FCB的文件,其自身也有FCB目录文件的FCB记录在上一层目录中,这样层层往上连接就形成了树状目录结构。或者这样描述:文件系统包含两部分:一组文件(即所要保存的数据)和目录文件(目录文件的内容是每个文件的FCB,FCB记录了文件的所有属性)。如下图所示:

      如上图所示是一个典型的Linux系统目录结构,从用户的角度看这就是Linux的文件系统,从右往左看,假设run目录下有个文件file,那么file的FCB就保存在run目录文件中,而run又是一个文件,其FCB 保存在VAR这个目录文件中,最后var的FCB就保存在根目录文件中。一次要访问到file,实质就是要沿着/var/run/file 这样一个路径。但是从操作系统的角度来看,这仅仅是提供给用户的可视性文件系统,具体的实现细节(比如文件的物理结构和逻辑结构)它已经隐藏起来。需要注意的是文件系统存储在外存储器中(nand flash等),内存中也会有相应的表明文件属性的目录项,用以加快操作系统访问文件的效率。即内核中也会有FCB的内容,甚至目录文件也会存在内存中。

      根据上面的背景知识其实就可以总结出建立根文件系统的步骤,无非就是创建这些目录和文件,然后让内核能够认识它们(即在内核中挂载根文件系统)。

      具体步骤如下:

      1、创建各个目录和必须的文件

        1.1、创建空目录:

          #mkdir rootfs

          #cd rootfs

          #mkdir bin dev etc lib proc sbin sys usr mnt tmp var

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

        1.2、创建设备文件:创建Linux启动需要的设备驱动文件:控制台和空

          #cd rootfs/dev

          #mknod -m 666 console c 5 1

          #mknod -m 666 null c 1 3

        1.3、加入配置文件:添加内核启动的一些配置文件

                     #tar etc.tar.gz

          #mv etc/* .../rootfs/etc/ -rf

        1.4、添加内核模块:

          #cd .../linux

          #make modules ARCH=arm CROSS_COMPILE=arm-linux-

          #make modules_install ARCH=arm INSTALL_MOD_PATH=.../rootfs

          1.5、编译/安装busybox:使用busybox添加常用的命令如cd、ls、date等等

          #make menuconfig

          #make

          #make install    

       2、挂载根文件系统:事实上挂载根文件系统就是完成指明根文件系统放在何处、操作系统如何使用文件系    统的目录文件等等工作。这里介绍一个基于内存的挂载方式,即根文件系统在编译后直接整合在内核代码中,随着代码被加载到内存中,内核启动过程中可以直接使用文件系统。initramfs文件系统的制作:

        2.1、#cd  .../rootfs/

           #ln -s ./bin/busybox init

               2.2、 配置内核,让内核知道文件系统的挂载方式是initramfs。

               2.3、编译内核

        2.4、设置uboot参数:

           setenv bootargs noinitrd console=ttySAC0,115200

      完成上面的工作就可以制作成一个拥有initramfs 文件系统的完整的Linux系统。

      至此一个完整的Linux系统就已经能够在mini2440中运行,接下来就可以在其上进行驱动或者应用开发。

  • 相关阅读:
    VS2008 插件开发.
    防刷新.
    JavaScript 的数据类型
    SQL Redist content: Command line option syntax error. Type Command /? for Help. 错误!!!
    使用Yahoo.com.cn的POP和SMTP
    文件上传
    待解决的问题
    [转]不常见但有用的HTML下拉选单
    新工具 BuildSql 生成数据库文档 .
    重写 DropDownList !
  • 原文地址:https://www.cnblogs.com/linzizhang/p/4819015.html
Copyright © 2011-2022 走看看