根文件系统镜像的制作与使用

   根文件系统镜像 = 准备的文件 + 存储时的索引信息整合到一个文件中去   
   linux系统支持多种类型的文件系统:fat ext4 yaffs jffs ubifs ...

  1 基于掉电不丢失设备的文件系统镜像

      1.1 jffs2文件系统
           专门针对norflash芯片开发的文件系统
      1.2 yaffs2文件系统
           专门针对nandflash芯片开发的文件系统
      1.3 cramfs
            它是由linus开发的
              是一种只读的压缩文件系统

            其特点:
               1)镜像文件压缩存储
               2)其管理的分区只能执行读操作 不能执行写和删除操作
            实验步骤:操作索引的代码  数据+索引=镜像文件
               1)配置内核 让内核支持cramfs  (将fs/cramfs代码编译到uImage)
                  cd /home/tarena/porting/kernel/
                  make menuconfig
                      File systems  --->
                          [*] Miscellaneous filesystems  ---> 
                              <*>   Compressed ROM file system support (cramfs)
                  make uImage
                  让开发板使用新内核
                      cp arch/arm/boot/uImage /tftpboot/
                      setenv bootcmd ping 192.168.1.6\;ping 192.168.1.6\;tftp 48000000 uImage \;bootm 48000000
              2) 将根文件系统数据和索引制作成镜像文件       
                 cd /home/tarena/porting/busybox-1.23.2/
                 sudo mkfs.cramfs _install/ rootfs.cramfs
              3)验证镜像的有效性
                 cp rootfs.cramfs /tftpboot/
                 
                 tftp 48000000 rootfs.cramfs
                 mmc write 48000000 20800 0x1200
                 
                 setenv bootargs root=/dev/mmcblk0p2 rootfstype=cramfs ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0 
                               init=/linuxrc console=ttySAC0 maxcpus=1 lcd=wy070ml tp=gslx680
                 saveenv
              4) 验证cramfs的特点
                 压缩存储的镜像
                     du -h _install
                     du -h rootfs.cramf
                 只读的文件系统:其管理的分区只能执行读操作
                                 不能执行写和删除操作
                                 touch 1.txt
                                 rm led_drv.ko


      1.4 ext4
            嵌入式中使用比较多的文件系统类型, 常见手机中

            如何使用U盘
               1)分区
               2)格式化
               3) 挂载U盘
                  mount -t vfat /dev/sda1 /mnt
               4)使用U盘
                  touch /mnt/2.txt
               5)卸载U盘
                  umount /mnt

            实验步骤:
                       使用ubuntu18.04系统同学,sudo cp 将提供 mke2fs.conf  /etc/      再完成后续步骤 

               1)配置内核 支持ext4类型镜像 
                  cd /home/tarena/porting/kernel
                  make menuconfig
                      File systems  --->
                         <*> The Extended 4 (ext4) filesystem
                  make uImage
               2) 制作镜像
                  cd /home/tarena/porting/busybox-1.23.2
                  a)创建一个8MB的全0文件
                    dd if=/dev/zero of=rootfs.ext4 bs=1024 count=8192
                       du -h rootfs.ext4
                       hexdump rootfs.ext4
                       
                       if=/dev/zero, input file 源数据
                                     /dev/zero虚拟设备,读取时读到的就是0
                       of=rootfs.ext4, output file 目标文件
                       bs=1024, 每次从zero读取1024字节数据
                       count=8192, 循环读写从次数
                  b) 格式化8M分区
                     mkfs.ext4 rootfs.ext4
                  c) 创建挂载点目录
                      mkdir mnt
                  d) 挂载该8M分区
                     sudo mount -t ext4 rootfs.ext4  mnt
                  e) 向该分区写入准备好的文件
                     sudo cp _install/* mnt/ -a
                  f) 卸载分区设备
                     sudo umount mnt/
             3)验证镜像的有效性
                cp rootfs.ext4  /tftpboot/
                板子上执行
                    tftp 48000000 rootfs.ext4
                    mmc write 48000000 20800 4000
                    setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0 init=/linuxrc console=ttySAC0 maxcpus=1 lcd=wy070ml tp=gslx680
                    saveenv
              4)重启开发板
                     touch 1.txt

             如何将mmcblk0p3分区使用起来?
                在开发板上执行:
                   1) ls /dev/mmcblk0p*
                   2) 格式化分区
                       mkfs.vfat /dev/mmcblk0p3 
                   3) 挂载分区                 
                       mount -t vfat /dev/mmcblk0p3 /mnt
                   4) 查看分区使用情况
                       df
                   5) 向分区中写入数据
                       touch /mnt/1.xta
                       echo dafdasfd >/mnt/1.xta 
                   6) 可以将挂载命令写入rcS 实现开机自动挂载
                       vi /etc/init.d/rcS

  2 基于内存文件系统镜像
     ramdisk ,将内存的一部分当磁盘使用
              系统启动时将磁盘中的根文件系统加载到内存中去
              后续过程使用内存中的根文件系统
              可以加快根文件系统的访问效率
              但是消耗更多的内存空间

    实验步骤:
        1)配置内核支持 ramdisk
           make menuconfig
                Device Drivers  --->
                    [*] Block devices  --->
                         <*>   RAM block device support
                         (8192)  Default RAM disk size (kbytes)
            make uImage
            让开发板使用新内核
              cp arch/arm/boot/uImage /tftpboot
        2)制作ramdisk镜像文件
             cd /home/tarena/porting/busybox-1.23.2
              a)创建一个8MB的全0文件
                dd if=/dev/zero of=rootfs.ramdisk bs=1024 count=8192
                   du -h rootfs.ramdisk
                   hexdump rootfs.ramdisk
                   
                   if=/dev/zero, input file 源数据
                                 /dev/zero虚拟设备,读取时读到的就是0
                   of=rootfs.ramdisk, output file 目标文件
                   bs=1024, 每次从zero读取1024字节数据
                   count=8192, 循环读写从次数
              b) 格式化8M分区
                 mkfs.ext2 rootfs.ramdisk
              c) 创建挂载点目录
                  mkdir mnt
              d) 挂载该8M分区
                 sudo mount -t ext2 rootfs.ramdisk  mnt
              e) 向该分区写入准备好的文件
                 sudo cp _install/* mnt/ -a
              f) 卸载分区设备
                 sudo umount mnt/  
     3)验证镜像的有效性
        cp rootfs.ramdisk /tftpboot/
        
        tftp 48000000 rootfs.ramdisk
          
        mmc write 48000000 20800 4000
                                                            加载内核                加载根文件系统                        启动内核
        setenv bootcmd ping 192.168.1.6\;ping 192.168.1.6\; tftp 48000000 uImage \;mmc read 0x49000000 20800 0x4000 \; bootm 48000000
        setenv bootargs root=/dev/ram rw initrd=0x49000000,8M ip=192.168.1.6:192.168.1.8:192.168.1.1:255.255.255.0 init=/linuxrc console=ttySAC0 maxcpus=1 lcd=wy070ml tp=gslx680
        saveenv
          4) 特性验证
            touch 1.txt //在内存中中创建的     
            重启后消失    

  
  3网络文件系统 

        3.1 nfs方式可以挂载
            1)根文件系统
               setenv bootargs root=/dev/nfs nfsroot=serverip:路径 ...
            2) 挂应用文件系统

                 在ubuntu系统中执行
                  sudo vi /etc/exports
                     /home/tarena/porting/  *(rw,sync,no_root_squash)
                  sudo /etc/init.d/nfs-kernel-server restart
                  sudo exportfs
                 在telnet终端或者串口终端中执行
                    cd /
                    mkdir   work
                       mount -o nolock -t nfs 192.168.1.8:/home/tarena/porting work
                            -o nolcok: 不使用文件锁

你可能感兴趣的:(Linux移植)