• 根文件系统制作、NFS配置与安装及利用NFS挂载根文件系统


    • 最近打算从头开始制作根文件系统,下面是开发过程。

    一、根文件系统的制作


    0、FHS(Filesystem Hierarchy Standard)标准介绍

    该标准规定了根目录下各个子目录的名称及其存放的内容:

    目录名 存放的内容
    /bin 必备的用户命令,例如ls、cp等
    /sbin 必备的系统管理员命令,例如ifconfig、reboot等
    /dev 设备文件,例如mtdblock0、tty1等
    /etc 系统配置文件,包括启动文件,例如inittab等
    /lib 必要的链接库,例如C链接库、内核模块
    /home 普通用户主目录
    /root root用户主目录
    /usr/bin 非必备的用户程序,例如find、du等
    /usr/sbin 非必备的管理员程序,例如chroot、inetd等
    /usr/lib 库文件
    /var 守护程序和工具程序所存放的可变,例如日志文件
    /proc 用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容
    /sys 用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容
    /mnt 文件系统挂接点,用于临时安装文件系统
    /tmp 临时性的文件,重启后将自动清除

    1、制作根文件系统过程

    制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:

    • 编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录

    • 利用交叉编译工具链的lib,构建根文件系统的/lib目录
    • 手动构建/etc及最简/dev目录
    • 创建其他空目录
    • 配置系统自动生成的/proc目录
    • 利用udev构建完整的/dev目录

    1)编译、安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录

     Busybox,人称Linux系统的瑞士军刀,是一个集成了一百多个最常用linux命令和工具的软件,busybox的配置程序和linux内核菜单配置方式简直一模一样,很容易上手。

    • 解压busybox,我用的是天嵌科技提供的开发板光盘资料工具
       tar jxvf busybox-1.20.0_for_TQ210_V1.0.tar.bz2 -C /
    • 进入解压后得到的busybox目录,将Makefile文件中的两行修改为如下(黑体部分为修改之后的内容)

        190 ARCH ?= arm

        164 CROSS_COMPILE ?=arm-linux-

    • 配置busybox
      make menuconfig

       

    •  busybox配置主要分两部分。

      第一部分是Busybox Settings,主要编译和安装busybox的一些选项。这里主要需要配置:

      1)、Build Options -- Build BusyBox as a static binary (no shared libs),表示编译busybox时,是否静态链接C库。我们选择动态链接C库。

      2)、Installation Options -- Applets links (as soft-links) -- (X) as soft-links,表示安装busybox时,将各个命令安装为指向busybox的软链接还是硬链接。我们选择软链接。

      3)、Installation Options -- (/work/nfs_root/fs_mini3) BusyBox installation prefix,表示busybox的安装位置。我们选择/work/nfs_root/fs_mini3

      4)Busybox Library Tuning。保留Command line editing以支持命令行编辑;保留History size以支持记忆历史命令;选中Tab completion和Username completion以支持命令自动补全

      第二部分是Applets,他将busybox的支持的几百个命令分门别类。我们只要在各个门类下选择想要的命令即可。这里我们基本保持默认设置。

      1)选中Networking Utilities -- httpd下的Enable -u <user> option,以启用http服务器的功能allows the server to run as a specific user

    • 编译busybox
      make
    • 安装busybox
      make install

      在busybox的目录下产生_install目录,此即为得到的根文件系统。

    2)利用交叉编译工具链的lib构建文件系统的/lib目录

      将交叉编译工具链中的库文件拷到刚得到的文件系统的/lib目录下,不需要拷这么多,busybox只用到了3个库:通用C库(libc)、数学库(libm)、加密库(libcrypt),因此我们只需要拷贝这3个库的库文件即可。

       在文件系统目录下创建lib目录

    mkdir lib

       复制库文件 

    cp  libcrypt-* /opt/EmbedSky/TQ210/busybox-1.20.0/_install/lib
    cp  libcrypt.so.* /opt/EmbedSky/TQ210/busybox-1.20.0/_install/lib
    cp  libm-* /opt/EmbedSky/TQ210/busybox-1.20.0/_install/lib
    cp  libm.so.* /opt/EmbedSky/TQ210/busybox-1.20.0/_install/lib
    cp  libc-* /opt/EmbedSky/TQ210/busybox-1.20.0/_install/lib
    cp  libc.so.* /opt/EmbedSky/TQ210/busybox-1.20.0/_install/lib
    cp  ld-* /opt/EmbedSky/TQ210/busybox-1.20.0/_install/lib


    3)手动构建/etc目录

    /etc 目录存放的是系统程序的主配置文件,因此需要哪些配置文件取决于要运行哪些系统程序。即使最小的系统也一定会运行1号用户进程init,所以我们至少要手 工编写init的主配置文件inittab。

    我们制作最简单的/etc/inittab文件,其内容如下:

    ::sysinit:/etc/init.d/rcS
    ::askfirst:-/bin/sh
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/bin/umount -a –r

    分析inittab脚本文件可知/etc/init.d/rcS脚本在/etc/inittab中以最高优先级第一个被init程序解析并使用daemon方式启动,

    所以这样rcS脚本就作为一个独立的程序存在于进程空间了,故需要先创建rcS脚本。

    vim etc/init.d/rcS

    在其中输入如下内容

    #!/bin/sh
    mount -t tmpfs tmpfs /tmp   #不挂载,QT程序运行时会出错
    
    #将/proc挂载为虚拟文件系统,以保存进程信息
    mount -t proc proc /proc
    
    #使用mdev创建/dev目录内容
    mount -t tmpfs mdev /dev
    mount -t sysfs sysfs /sys
    mkdir /dev/pts
    mount -t devpts devpts /dev/pts
    echo /sbin/mdev>/proc/sys/kernel/hotplug
    mdev -s

    环境变量配置文件profile

    vim etc/profile

    输入如下内容

    #!/bin/sh
    export HOSTNAME=lz
    export USER=root
    export HOME=root
    export PS1="[$USER@$HOSTNAME:W]#"
    export PATH=/bin:/sbin:/usr/bin:/usr/sbin
    export LD_LIBRARY_PATH=/lib:/usr/lib

    4)利用mdev构建/dev目录

    首先需手动创建/dev文件夹并在此文件夹下创建两个设备文件console和null,

    mkdir dev
    cd dev/
    mknod console c 5 1 mknod null c 1 3

    udev 的原理是:操作系统启动的时候将识别到的所有设备的信息自动导出到/sys目录,然后用户态的应用程序udev根据/sys中的设备信息,自动在/dev 目录下创建所有正确的设备文件。因此我们要做的就是:配置自动生成/sys目录下的内容并调用mdev(mdev是busybox中对udev的简化实 现)。也就是添加3)中rcS文件后面那部分的内容。

    为了实现自动挂载与卸载SD卡,需要做以下工作:
    在文件系统根目录下
    vim etc/mdev.conf
           mmcblk[0-9]p[0-9] 0:0 666 @ /etc/sd_card_inserting
            mmcblk[0-9] 0:0 666 $ /etc/sd_card_removing
    红色部分,是一个脚本,脚本内容可以根据我们的需要定制,可以实现挂载,卸载或其他一些功能
     
    自动挂载SD卡脚本如下
    挂载
    vim etc/sd_card_inserting
            #!/bin/sh
            mount -t vfat /dev/mmcblk0p1 /mnt/sd
    卸载
    vim etc/sd_card_removing
            #!/bin/sh
            sync
            umount /mnt/sd

    5)创建其他空目录

    创建一些常用的目录,执行如下命令

    mkdir  home tmp proc sys mnt
    
    进入mnt创建sd文件夹,以便挂载SD卡
    cd mnt/
    mkdir sd

    至此,一个简单的根文件系统已制作完毕,将_install 文件夹下的文件全部拷到NFS共享目录下,开发板即可挂载此文件系统。

    二、NFS的安装及配置


    1)安装相关软件

    Ubuntu系统默认是没有安装NFS服务的,安装命令如下:

    apt-get install  nfs-kernel-server


    2)建立共享目录

    #sudo mkdir /nfsboot
    #sudo chmod 777 /nfsboot


    3)修改配置文件

    NFS服务的配置文件路径:/etc/exports,刚安装完的配置文件只有一些说明。

    #sudo vi /etc/exports

    在里面加入

    /nfsboot *(rw,sync,no_root_squash)

    说明:

    /nfsboot是要共享的目录

    *代表允许所有的网络段访问,为安全起见,可指定网络号段,如202.38.214*注意:*与(之间不能有空格,否则开发板挂载之后将只有读权限而没有写权限。

    rw是可读写权限

    sync是资料同步写入内存和硬盘

    no_root_squashNFS客户端分享目录使用者的权限,如果客户端使用的是root用户,那么对于该共享目录而言,该客户端就具有root权限


    4)重启服务

    使用以下命令重启服务

    #sudo /etc/init.d/nfs-kernel-server restart

    5)测试服务器

    查看服务器目录和权限

    #showmount -e

    我得到的结果如下
    Export list for lzm:
    /nfsboot 202.38.214*

    三、开发板通过NFS挂载文件系统


    将第一步制作好的文件系统拷到/nfsboot目录下,注意修改共享目录nfsboot的权限。777

    启动开发板,进入uboot界面,设置boot参数,设置nfs boot参数,然后依次输入nfs服务器的IP(也就是PC的IP)、开发板的IP、子网掩码、NFS的共享文件夹。

    重启开发板,便可进入刚制作好的文件系统。

    至此工作全部完成。

    终于可以去上厕所啦,憋死我了。。。。。。

      

  • 相关阅读:
    OAuth2.0
    Base64编解码 代码
    Intent之Action
    android 之 WebView详解
    FCKeditor 在ASP.Net 中的使用说明
    css条件注释
    AspNetPager 服务器控件使用实例
    【转】分页控件ASPNETPAGET
    SQL server挂了之后
    应用主题后FCKeditor上传问题的解决及相应的改进
  • 原文地址:https://www.cnblogs.com/Jasonsblog/p/3778485.html
Copyright © 2020-2023  润新知