根文件系统制作

  昨天编译并下载好了内核,但是内核还是无法正常启动,原因就是没有挂载根文件系统。今天讲的就是如何去创建一个根文件系统并将它挂载到内核上。
  一、创建根文件系统
    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
    2、创建设备文件
      (1)在Linux中设备都以文件的形式存在和操作。
      (2)这些文件都在dev目录
      (3)在启动Linux系统的时候必须要使用两个设备文件console和null
        #cd rootfs/dev
        #mknod -m 666 console c 5 1
        #mknod -m 666 null c 1 3
       
    3、加入配置文件(一般都是借鉴已有的)
      #tar etc.tar.gz
      #mv etc/* ../rootfs/etc/ -rf
    4、添加内核模块
      进入内核文件目录中执行以下命令
      #make modules ARCH=arm CROSS_COMPILE=arm-linux-(编译内核模块)
      #make modules_install ARCH=arm INSTALL_MOD_PATH=…/rootfs(将散落的模块统一移至rootfs中的子文件夹中)
    5、编译安装busybox
      make
      make  install
      busybox主要存放的是一些实现linux命令的函数,比如cd,ls之类的。
      经过以上5步,一个简易的根文件系统就制作好了,接下来就该挂载到内核中了。
  二、将根文件系统挂载到内核中
    根据存储设备的硬件特性、系统需求,不同的文件系统类型有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为 RAM 和FLASH,常用的基于存储设备的文件系统类型包括:jffs2, yaffs2, ubifs, ramdisk等。
    1、initfamfs
      根文件系统一般用initfamfs,基于内存的文件系统掉电丢失,但是速度快。一般一个系统是多个文件系统混合使用。
      要使用initramfs就必须使用软链接
        ln  -s  ./bin/busybox  init
      在当前文件夹产生init的快捷方式对应于./bin/busybox
      配置内核要选上 initramfs选项(General里),且紧接着填写根文件系统所在位置。再重新编译内核。
      设置UBOOT环境变量(传给内核的启动参数)
        setenv bootargs noinitrd console=ttySAC0,115200
      但是这样,如果要添加文件则必须要重新编译内核使得文件系统得到更新,因为此时的文件系统是通过解压存在内存里面的。即这种方式的文件系统是包含在内核里的。
    2、nfs
      (1)内核配置
        取消initramfs
        进入File  System
        根文件系统onNFS选上
      (2)编译内核
      (3)设置UBOOT启动参数

        

  bootargs是启动参数,它的值意义分别为:控制台用串口0,波特率115200、init=/init(这个我也不造。。)、root=/dev /nfs,说明根文件系统采用dev目录下的nfs,也就是说使用网络文件系统、rw可读可写、nfsroot根文件系统地址为nfs服务器的/home /bumblebee/exercise/.../rootfs目录,其中ip为nfs服务器的ip,也就是我linux的ip、 ip=192.168.0.101开发板ip,192.168.0.103linux的ip,192.168.1.1网关ip(可不 改),255.255.255.0(掩码,不知道是啥东西,同不改),后面的都照抄不用改了。就是这么任性!这样nfs文件系统就挂载好了。

原文地址:https://www.cnblogs.com/51qianrushi/p/4294335.html