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

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

  • 相关阅读:
    remove white space from read
    optimize the access speed of django website
    dowload image from requests
    run jupyter from command
    crawl wechat page
    python version 2.7 required which was not found in the registry windows 7
    health
    alternate rows shading using conditional formatting
    word
    【JAVA基础】static 关键字
  • 原文地址:https://www.cnblogs.com/silencehuan/p/11242444.html
Copyright © 2011-2022 走看看