前面两篇文章分别介绍了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中运行,接下来就可以在其上进行驱动或者应用开发。

ARM开发板系统移植-----rootfs的制作的更多相关文章

  1. ARM开发板系统移植-----u-boot的编译

    本文和另外两篇姊妹篇都是为了说明如何裁剪出适合在mini2440 开发板上运行的Linux系统,以记录自己的学习成果.其中本文先介绍了嵌入式系统的软件组成部分,然后介绍编译出适合在mini2440开发 ...

  2. ARM开发板系统移植-----kernel的编译

    前面一篇文章http://www.cnblogs.com/linzizhang/p/4817336.html介绍了开发板上系统软件的第一部分--bootloader的编译方法. 背景:把bootloa ...

  3. 烧写ARM开发板系统教程----->uboot 、内核以及文件系统

    一.sd启动 将u-boot镜像写入SD卡,将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是 ...

  4. 列出当前ARM开发板系统加载的模块

    lsmod 列出当前系统中加载的模块,其中左边第一列是模块名,第二列是该模块大小,第三列则是使用该模块的对象数目

  5. iTOP-IMX6UL 实战项目:ssh 服务器移植到 arm 开发板

    实验环境:迅为提供的Ubuntu12.04.2 以及虚拟机 编译器:arm-2009q3 编译器 开发板系统:QT系统   开发板使用手册中给Windows 系统安装了 ssh 客户端,给 Ubunt ...

  6. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  7. ubuntu 交叉编译qt 5.7 程序到 arm 开发板

    ubuntu 交叉编译qt 5.7 程序到 arm 开发板平台1 ubuntu 12.042 arm-linux-gcc 4.5.13 QT 5.74 开发板210 armcortex-A8 一 概述 ...

  8. 使用arm开发板搭建无线mesh网络(二)

    上篇博文介绍了无线mesh网络和adhoc网络的区别,这篇文章将介绍无线mesh网络的骨干网节点的组建过程.首先需要介绍下骨干网节点的设计方案:每个骨干网节点都是由一块友善之臂的tiny6410 ar ...

  9. 【分享】iTOP4412开发板-Bluetooth移植文档

    [分享]iTOP4412开发板-Bluetooth移植文档 最近须要把Bluetooth移植到iTOP-4412 开发平台.查阅了相关资料,经过一段时间的研究.调试,最终成功的将蓝牙功能移植到了开发板 ...

随机推荐

  1. linux关于bashrc与profile的区别(转)

    转载自:http://www.cnblogs.com/hongzg1982/articles/2101792.html bashrc与profile的区别 要搞清bashrc与profile的区别,首 ...

  2. android开发环境与工具使用相关备忘录

    一.名称简介 1.ADT(Android Development Tools) 可以简单理解为在eclipse下开发安卓的插件或工具包. 查看当前ADT版本方法:help-> about ecl ...

  3. 【转】shell 教程——06 Shell变量:Shell变量的定义、删除变量、只读变量、变量类型

    Shell支持自定义变量. 定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编 ...

  4. 微信开发第2章 通过appid appsecret获取accesstoken

    通过 appid appsecret是可以获取accesstoken的 ,请不要一直获取,不然会把token的机会浪费掉,获取到后7200秒后失效,建议保存为6000秒到7000秒左右,具体可以查看微 ...

  5. mysql引擎互转问题

    // InnoDB转MyISAM ALTER TABLE `tablename` ENGINE = MYISAM // MyISAM转InnoDB alter table tablename type ...

  6. 用APK Downloader直接从Google Play上下载apk

    APK Downloader可以直接从Google Play上下载apk,相比较其他软件,这个不需要提供Google ID,对于没有刷机的同学还是有些帮助的.

  7. HTML5 简单画图,切片,变形

    本人是在校学生,由于这段时间不知道怎么回事,心情比较无聊没有事干,所以利用这段时间学一下HTML5,发博客的目的是为了以后可以查询,也希望各位大神能够指导像我们这样的菜鸟,告别菜鸟的时段 我学东西时候 ...

  8. 关于虚拟机VM

    装Vmware虚拟机+安装系统不再困难 不要再以为你是女生,你就可以不用学装系统,亲,我们是计算机系的女生,顶起!!呼啦呼啦,这篇我装VM+系统的记录,作为勉励. 想必很多人都会使用到虚拟机,因为我们 ...

  9. SQL Server与Oracle对比学习:权限管理(二) 一些有趣的比喻

    http://blog.csdn.net/weiwenhp/article/details/8094739 目录(?)[-] SQL Server权限管理 login 与user的区别 角色role ...

  10. [TypeScript] Using Exclude and RootDir until File Globs Lands in 2.0.

    Files globs will be available in TypeScript 2.0, so in the meantime, we need to use "exclude&qu ...