zoukankan      html  css  js  c++  java
  • Linux制作根文件系统笔记

    测试平台

    宿主机平台: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 会检查其内容,并用数字来决定是否对这个文件系统进行备份。 允许的数字是 010 表示忽略, 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

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

  • 相关阅读:
    【转载】poj 1276 Cash Machine 【凑钱数的问题】【枚举思路 或者 多重背包解决】
    一道蓝桥比赛的训练打印题【构造+不断的构造+构造规律】
    poj 1679 The Unique MST 【次小生成树+100的小数据量】
    poj 2828 Buy Tickets 【买票插队找位置 输出最后的位置序列+线段树】
    【转载】素数快速打表(据说是线性复杂度)
    HDU 1166 敌兵布阵 【线段树-点修改--计算区间和】
    yifan的数组
    Tempter of the Bone
    最短路
    排列2
  • 原文地址:https://www.cnblogs.com/silencehuan/p/11242444.html
Copyright © 2011-2022 走看看