测试平台

宿主机平台:Ubuntu 12.04.4 LTS

目标机:Easy-ARM IMX283

目标机内核:Linux 2.6.35.3

交叉编译器:arm-linux-gcc 4.4.4

Busybox简介

关于busybox的原理及代码分析推荐 busybox详解

Busybox是一个开源项目,遵循GPL v2协议。Busybox将众多的UNIX命令集合进一个很小的可执行程序中,可以用来替代GNU fileutils、shellutils等工具集。Busybox中各种命令与相应的GNU工具相比,所能提供的选项比较少,但是也足够一般的应用了。Busybox主要用于嵌入式系统。

Busybox构建基础文件系统

下载 busybox

备注:2.6的内核不要使用太高版本busybox,会出现不兼容情况

wget https://busybox.net/downloads/busybox-1.22.1.tar.bz2

解压

tar xjvf busybox-1.22.1.tar.bz2

cd busybox-1.22.1

编译配置

make menuconfig

下面记录一下我主要配置的地方

1.Build Options

1)设置为静态编译,反正也不太大,共享库的话还得拷贝动态库文件

2)交叉编译工具,也可在make时使用 make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-

2.Installation Options

安装路径设置,最好放在支持nfs挂载的目录里面,因为后面文件系统需要通NFS挂载来测试

剩下的都是一些工具集的配置,刚开始使用默认配置即可;

编译与安装

make

make install

开始构建文件系统

1.完善文件系统

查看安装文件夹,发现之后 bin sbin usr 这三个文件夹,我们在此基础上添加其他文件夹

mkdir dev etc lib proc sys tmp var

2.添加C运行库

C运行库可以直接从使用的交叉编译工具中获取,一般在 /arm-none-linux-gnueabi/libc/lib/

cp -av /home/ctools/arm-2011.03/arm-none-linux-gnueabi/libc/lib/* lib/

3.添加初始化脚本

初始化脚本放置在 etc 目录下,  先从busybox中拷贝初始化脚本模板

cp -av /home/vmuser/wtools/busybox-1.22.1/examples/bootfloppy/etc/* etc/

初始化脚本文件修改

1)打开 myrootfs/etc/inittab, 注释第三行,因为我们不是使用tty2

最小文件系统挂载测试

NFS根文件系统设置

1)开机按空格,进入Uboot

2)修改内核启动参数变量 bootargs ,设置为内核 nfs 启动

setenv bootargs 'root=/dev/nfs rw console=ttyAM0,115200n8 nfsroot=192.168.1.123:/home/vmuser/workspace/myrootfs ip=192.168.1.124:192.168.1.123:192.168.1.254:255.255.255.0:epc.zlgmcu.com:eth0:off mem=64M'
saveenv
reset

3)复位,内核启动正常

文件系统增加功能

上面的系统启动后,发现仅挂载了 proc文件系统

/etc/fstab是用来存放文件系统的静态信息的文件,当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。

/etc/fstab文件主要包括6段,依次是:

<file system>  <dir>  <type>  <options>  <dump>  <pass>

<file system> 要挂载的分区或存储设备
<dir> 挂载的目录位置
<type> 挂载分区的文件系统类型,比如:ext3、ext4、xfs、swap
<options> 挂载使用的参数有哪些。举例如下:
  auto - 在启动时或键入了 mount -a 命令时自动挂载。
  noauto - 只在你的命令下被挂载。
  exec - 允许执行此分区的二进制文件。
  noexec - 不允许执行此文件系统上的二进制文件。
  ro - 以只读模式挂载文件系统。
  rw - 以读写模式挂载文件系统。
  user - 允许任意用户挂载此文件系统,若无显示定义,隐含启用 noexec, nosuid, nodev 参数。
  users - 允许所有 users 组中的用户挂载文件系统.
  nouser - 只能被 root 挂载。
  owner - 允许设备所有者挂载.
  sync - I/O 同步进行。
  async - I/O 异步进行。
  dev - 解析文件系统上的块特殊设备。
  nodev - 不解析文件系统上的块特殊设备。
  suid - 允许 suid 操作和设定 sgid 位。这一参数通常用于一些特殊任务,使一般用户运行程序时临时提升权限。
  nosuid - 禁止 suid 操作和设定 sgid 位。
  noatime - 不更新文件系统上 inode 访问记录,可以提升性能。
  nodiratime - 不更新文件系统上的目录 inode 访问记录,可以提升性能(参见 atime 参数)。
  relatime - 实时更新 inode access 记录。只有在记录中的访问时间早于当前访问才会被更新。(与 noatime 相似,但不会打断如 mutt 或其它程序探测文件在上次访问后是否被修改的进程。),可以提升性能。
  flush - vfat 的选项,更频繁的刷新数据,复制对话框或进度条在全部数据都写入后才消失。
  defaults - 使用文件系统的默认挂载参数,例如 ext4 的默认参数为:rw, suid, dev, exec, auto, nouser, async.
<dump> dump 工具通过它决定何时作备份. dump 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 0 和 1 。0 表示忽略, 1 则进行备份。大部分的用户是没有安装 dump 的 ,对他们而言 <dump> 应设为 0。
<pass> fsck 读取 <pass> 的数值来决定需要检查的文件系统的检查顺序。允许的数字是0, 1, 和2。 根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为 2. 0 表示设备不会被 fsck 所检查。

我们参照模板添加 sysfs tmpfs devfs的支持

动态创建设备节点

修改 /etc/init.d/rcS

#! /bin/sh

/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s

然后重新启动,增加的文件系统均已支持

Linux制作根文件系统笔记的更多相关文章

  1. 使用Busybox-1.2.0制作根文件系统

    使用Busybox-1.2.0制作根文件系统 cross-3.3.2 make-3.8.1 STEP 1: 创建根文件系统目录,主要包括以下目录/bin,/etc,/dev,/mnt,/sbin,/u ...

  2. 利用busybox制作根文件系统

    实际项目中可以使用Buildroot制作根文件系统 1.busybox源码下载及配置 https://busybox.net/downloads/ 1.1.修改Makefile (1) ARCH = ...

  3. 第4阶段——制作根文件系统之分析init进程(2)

    本节目标: (1) 了解busybox(init进程和命令都放在busybox中) (2) 创建SI工程,分析busybox源码来知道init进程做了哪些事情 (3)  分析busybox中init进 ...

  4. mkyaffs2image制作根文件系统、使用NFS挂载虚拟机目录(2)

    1.制作根文件系统及nfs烧写 1.1 先解压文件系统,/wok/nfs_root 目录下是已经构造好的各种文件系统:① fs_mini.tar.bz2 是最小的根文件系统,里面的设备节点是事先建立好 ...

  5. 制作根文件系统之内核如何启动init进程

    start_kernel其实也是内核的一个进程,它占用了进程号0,start_kernel的内容简写如下: asmlinkage void __init start_kernel(void) //内核 ...

  6. mini6410基于linux2.6.36内核通过NFS启动根文件系统总结(四制作根文件系统及通过NFS挂载文件系统)

    http://blog.csdn.net/yinjiabin/article/details/7489563 根文件系统一般包括: 1)基本的文件系统结构,包含一些必须的目录,比如:/dev,/pro ...

  7. 通过busybox制作根文件系统

    通过busybox制作根文件系统可以自定义选项,在制作的根文件系统中添加需要的命令,指定生成的根文件系统到相应的目录下. 一. 根文件系统的获取方式--->官网: https://busybox ...

  8. 通过busybox制作根文件系统详细过程

    我在之前的uboot通过NFS挂载ubuntu根文件系统中也有实现过根文件系统的制作,那只是在ubuntu官网已经做好的根文件基础上安装一些自己所需的软解而已.而使用busybox制作根文件系统可以自 ...

  9. 制作根文件系统之Busybox init进程的启动过程分析

    先来介绍一下什么是Busybox:它是将众多的UNIX命令集合进一个很小的可执行程序中. 在制作根文件系统之内核如何启动init进程中遗留了一个问题是/linuxrc是内核启动的第一个应用程序,那么它 ...

随机推荐

  1. CRC校验原理和verilog实现方法(二)

    1 前言 在 前面的博客  CRC校验原理和verilog实现方法(一)  中,介绍了CRC校验的原理和手动计算过程.本文说一下我在学习CRC校验FPGA实现的一点心得体会. 2 线性反馈移位寄存器 ...

  2. 【JavaWeb】EL表达式&过滤器&监听器

    EL表达式和JSTL EL表达式 EL表达式概述 基本概念 EL表达式,全称是Expression Language.意为表达式语言.它是Servlet规范中的一部分,是JSP2.0规范加入的内容.其 ...

  3. 项目去O实践

    现状(自下而上) 1.Oracle数据库,表,序列,存储过程,视图 2.ibatis框架,映射xml中的sql语句 3.应用中通过指定字符串的形式获取查询结果   目标 1.置换数据库为PG数据库,迁 ...

  4. OpenGL学习笔记(四)纹理

    目录 要完成的纹理效果 纹理环绕方式 纹理过滤 多级渐远纹理 加载与创建纹理 stb_image库的使用方法 生成纹理对象 应用纹理 纹理单元 参考资料:OpenGL中文翻译 要完成的纹理效果 纹理是 ...

  5. shell的编程规范和变量

    目录 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官" 二.用户的登录shell 三.shell脚本的构 ...

  6. 关于c++ STL map 和 unordered_map 的效率的对比测试

    本文采用在随机读取和插入的情况下测试map和unordered_map的效率 笔者的电脑是台渣机,现给出配置信息 处理器 : Intel Pentium(R) CPU G850 @ 2.90GHz × ...

  7. mock平台介绍和moco的简单例子

    1.mock是什么?mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.在具体的测试过程中,我们经常会碰到需要模拟数据或者接口的情况,因为环 ...

  8. 【ShardingSphere技术专题】「ShardingJDBC」SpringBoot之整合ShardingJDBC实现分库分表(JavaConfig方式)

    前提介绍 ShardingSphere介绍 ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sharding-Proxy和Shardin ...

  9. 深度学习框架如何自动选择最快的算法?Fast Run 让你收获最好的性能!

    作者:王博文 | 旷视 MegEngine 架构师 一.背景 对于深度学习框架来说,网络的训练/推理时间是用户非常看中的.在实际生产条件下,用户设计的 NN 网络是千差万别,即使是同一类数学计算,参数 ...

  10. 题解 God Knows

    传送门 这里有个线段树维护单调栈的神仙技巧 同机房dalao @Yubai的不同理解方式 yysy,我考场上连\(n^2\)的暴力都没搞出来 这里实际上求的是最小权极大上升子序列 但这个跟题目几乎没什 ...