Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1885694
  • 博文数量: 496
  • 博客积分: 12043
  • 博客等级: 上将
  • 技术积分: 4778
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-27 14:26
文章分类

全部博文(496)

文章存档

2014年(8)

2013年(4)

2012年(181)

2011年(303)

2010年(3)

分类: 嵌入式

2012-06-21 10:00:42

前面提到的文件系统都是基于Flash存储器的,而本文介绍的这些文件系统都是利用RAM来作为他们的存储空间。它们共同的优点都是读写的速度非常快(因为是在内存中读写),而缺点也很明显,就是当系统复位之后会丢失所有数据。
 
     二、基于RAM的文件系统
 
     1、Ramdisk文件系统
     Ramdisk是将一部分固定大小的内存当做分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。
     A、特点
     a. 将一些经常访问但不会修改的文件通过ramdisk放入内存,可明显提高系统的性能;
     b. 和CRAMFS、JFFS2相比,压缩率不高,占用资源多;
     c. 存取速度快;
     d. 只读文件系统,掉电数据丢失。
     B、创建方法
     a. 内核起来之后创建和挂载方式

  1. 查看系统可用的ramdisk
  2. $ls -al /dev/ram*
  3. 内核将ramdisk作为一个设备文件来管理,未格式化之前还不占用内存空间
  4. $mke2fs /dev/ram0
  5. 这个命令就格式化了一个ramdisk,出现以下提示:
  6. mke2fs 1.41.12 (17-May-2010)
  7. Filesystem label=
  8. OS type: Linux
  9. Block size=1024 (log=0)
  10. Fragment size=1024 (log=0)
  11. Stride=0 blocks, Stripe width=0 blocks
  12. 16384 inodes, 65536 blocks
  13. 3276 blocks (5.00%) reserved for the super user
  14. First data block=1
  15. Maximum filesystem blocks=67108864
  16. 8 block groups
  17. 8192 blocks per group, 8192 fragments per group
  18. 2048 inodes per group
  19. Superblock backups stored on blocks:
  20.         8193, 24577, 40961, 57345

  21. Writing inode tables: done
  22. Writing superblocks and filesystem accounting information: done

  23. This filesystem will be automatically checked every 36 mounts or
  24. 180 days, whichever comes first. Use tune2fs -c or -i to override.
      加载ramdisk
      $mkdir /mnt/ramdisk
      $mount /dev/ram0 /mnt/ramdisk
      可以查看创建的ramdisk的大小
      # df -k /dev/ram0             
      Filesystem           1K-blocks      Used Available Use% Mounted on
      /dev/ram0                63461      1289     58896   3% /mnt/ramdisk
      卸载
      $umount /mnt/ramdisk
     b. 如何创建ramdisk镜像文件
     提供一个脚本用于将准备好的rootfs文件夹创建为ramdisk.img,可在ubuntu上运行,原来还是利用ubuntu的mke2fs命令格式 化一块ram,在mount到/mnt下面,再将rootfs拷贝到其中,在拷贝出来便成为了ramdisk.img镜像文件。
     make_ramdisk.sh

  1. #!/bin/bash

  2. # Housekeeping...clean before img
  3. rm -f /tmp/ramdisk.img

  4. # Ramdisk Constants
  5. # 80M = 80 * 1024 * 1024
  6. RDSIZE=8192
  7. BLKSIZE=1024

  8. # Create an empty ramdisk image
  9. dd if=/dev/zero of=/tmp/ramdisk.img bs=$BLKSIZE count=$RDSIZE

  10. # Make it an ext2 mountable file system
  11. /sbin/mke2fs -F -m 0 -b $BLKSIZE /tmp/ramdisk.img $RDSIZE

  12. # Mount it so that we can populate
  13. mkdir -p /mnt/ramdisk
  14. mount /tmp/ramdisk.img /mnt/ramdisk -t ext2 -o loop

  15. # Populate the filesystem (subdirectories)
  16. cp -ar ./rootfs/* /mnt/ramdisk/

  17. mkdir -p /mnt/ramdisk/sys
  18. mkdir -p /mnt/ramdisk/proc
  19. mkdir -p /mnt/ramdisk/var
  20. mkdir -p /mnt/ramdisk/tmp
  21. mkdir -p /mnt/ramdisk/mnt
  22. mkdir -p /mnt/ramdisk/dev

  23. # Finish up...
  24. umount /mnt/ramdisk
  25. cp /tmp/ramdisk.img ./
  26. rm -fr /mnt/ramdisk
     这时便生成了ramdisk.img,可以在你的ubuntu上挂载试验一下

  1. $mount ramdisk.img /mnt/ -o loop
  2. $ls /mnt
  3. bin etc init lost+found modules proc sys usr dev home lib mnt sbin tmp var
     如果实现将其烧写到nand的某个分区中,然后uboot启动的时候,需要一些参数配置,并且需要在读取内核之后紧接着将其也读到内存的相应位置,再启动linux:

  1. define CONFIG_BOOTARGS "root=/dev/ram0 rw console=ttyS0,115200 mem=64mb initrd=0x41000000,0x800000 init=/linuxrc"
  2. define CONFIG_BOOTCOMMAND "mtdparts default; nand read 0x41000000 0xe00000 0x800000; nand read 0x40008000 0x400000 0x300000; bootm 0x40008000;"
     当然,在嵌入式中,对于ramdisk的支持需要一些配置,列出:

  1. 1、General setup --->
  2.     [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
  3. 2、File systems --->
  4.     <*> Second extended fs support
  5. 3、Device Drivers --->
  6.     [*] Block devices --->
  7.        --- Block devices
  8.        <*> Loopback device support
  9.        <*> Cryptoloop Support
  10.        <*> RAM block device support
  11.        (16) Default number of RAM disks
  12.        (8192) Default RAM disk size (kbytes)
  13.   说明:1、这里配置的是支持initramfs(只是下面要介绍到的一个重要的文件系统)和ramdisk的支持
           2、ramdisk是基于EXT2的,所以需要支持EXT2,当然,也有EXT3类型的ramdisk
           3、这里可以指定ramdisk的最大空间
阅读(1443) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~