分类:
2008-04-22 21:28:01
On Mon, 5 Feb 2001, Emmons, Christopher D wrote: > I am confused over the entire ramdisk concept for embedded systems. I think > several on this list wouldn't mind an explanation on why a large ramdisk > (>8192k, I assume) is "insane." > Example Scenario: I want to put a music player and a few large song files > on my assabet. These files take up 10 megs alone without any sort of > filesystem, etc. Now, being a novice, I see two options: (1) create a large > ramdisk of say, 16 megs {the option I thought was a good idea} or (2) create > several ramdisks, one with the kernel and basic OS, and another 1 or 2 for > the files {I have no idea how I would do this if it is even practical}. First, a ramdisk uses ram. If you have 8MB ramdisk, you loose 8MB of precious memory. If you have 16MB ramdisk, the half of your memory is locked down by your filesystem. This is utterly wasteful, especially since that same data is also available in flash memory already where you're probably copying this whole chunk of data from anyway. If one's goal was rather to really upload such a ramdisk over the serial port then my suggestion would be for any such person to invest his time into gardening instead. A ramdisk is pretty handy for testing and/or temporary/limited tasks, like having a minimum environment to easily upload more serious stuff into the flash by using a network link, or to mount the real filesystem via NFS, etc. But it is quite a bad idea to run embedded systems out of a ramdisk, especially when you have the same data in flash already! Instead, you should use the MTD drivers to access flash data directly. If your Assabet has only 4MB of flash, then replace them with bigger parts (they are socketed so that's easy to do). Look at drivers/mtd/sa1100-flash.c to see how you can partition your flash so to leave your boot firmware in a partition of its own. Then you may use any kind of filesystem in your flash partitions, even cramfs if compression is required. The MTD layer has a block interface driver that can present flash partitions just as if they were hard disk partitions. Get familiar with this, make it work for you, and see how much free ram you then have! The kernel is quite smart at moving what it really needs into ram, uncompressing it on the fly if needed, and dropping unused content from ram when ram is required by some other applications. This is simply not possible with a ramdisk. When you've reached that point, then you may consider another structural level, the best I found so far, which consist of using two flash partitions: the first one being a single flash sector long to hold your bootloader, and the second one spaning onto the entire remaining flash using JFFS (Journaling Flash File System). For partitions that contained compressed filesystems before, you just need to use the loopback block interface to access them while holding their images into the JFFS partition. Even the kernel zImage can be stored into that partition and be booted by the bootloader from there (John Dorsey made a patch for Compaq's bootldr to do just that). This is how you will get the most efficient and secure usage of your flash memory. If you still need more filesystem space then consider bigger flash or networked filesystems. Also note that for volatile storage purpose like /tmp you should consider using ramfs since the flash has a limited number of write cycles. Now PLEASE let's stop those jumbo ramdisk discussion since this is really not the way to do things, OK? NicolasHHARM2410标配有16M的FLASH和64M的SDRAM,所以可以支持很多的大应用。目前提供支持的有minigui和microwin,且均已经很好的支持并集成了触摸屏功能。需要修改内核的一个配置
cd kernel
make menuconfig
Block devices --->
< > Normal PC floppy disk support
< > XT hard disk support
<*> Loopback device support
< > Network block device support
<*> RAM disk support
(8192) Default RAM disk size
[*] Initial RAM disk (initrd) support
上面原来的值4096,改为8192即可支持大到8M的RAMDISK。如何使用ramdisk?
就是要把ramdisk.image.gz解压后mount -o loop 到一个目录上,这样就可以看到ramdisk里面的文件系统内容,这时再把你的新编译的busybox的可执行文件复制到这个目录的bin目录下面覆盖原来的,再umount这个目录,再gzip压缩,这样你所作的改动就被带到这个新生成的ramdisk.image.gz文件里面了,然后你烧写这个文件就可以看到新世界了。
简单命令序列:注意要自己调整目录路径
gunzip ramdisk.image.gz
mkdir tmnt
mount -o loop ramdisk.image tmnt
cp -f busybox tmnt/bin
umount tmnt
gzip ramdisk.image
关于RAMDISK的大小问题,有两个概念,一个是ramdisk在内存中解压后的容量,例如我们常说的8M、4M、6M的RAMDISK,它耗用的是板子SDRAM的空间;还有一个就是压缩后的ramdisk.image.gz文件的大小,它耗用的是板子的FLASH的空间。例如8M的RAMDISK,根据里面空间的占用率,里面填的文件、目录内容越多,压缩出来的ramdisk.image.gz的文件就越大,例如会达到3MB以上,但HHARM2410对压缩后文件大于3MB的ramdisk支持不是很好,所以建议不要将我们标配的8MB 的ramdisk里面加的内容太多,导致ramdisk.image.gz过大,一般的,可将一些大的应用程序移到其它的文件系统里面去,例如cramfs等,RAMDISK里面空余的空间可留给系统启动后用于保存一些采集的数据以及计算的一些临时文件等。