diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-01-07 02:33:00 +0000 |
---|---|---|
committer | <ralf@linux-mips.org> | 1997-01-07 02:33:00 +0000 |
commit | beb116954b9b7f3bb56412b2494b562f02b864b1 (patch) | |
tree | 120e997879884e1b9d93b265221b939d2ef1ade1 /Documentation/ramdisk.txt | |
parent | 908d4681a1dc3792ecafbe64265783a86c4cccb6 (diff) |
Import of Linux/MIPS 2.1.14
Diffstat (limited to 'Documentation/ramdisk.txt')
-rw-r--r-- | Documentation/ramdisk.txt | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/Documentation/ramdisk.txt b/Documentation/ramdisk.txt new file mode 100644 index 000000000..5b48c3987 --- /dev/null +++ b/Documentation/ramdisk.txt @@ -0,0 +1,207 @@ + +Using the RAM disk block device with Linux +------------------------------------------ + +Contents: + + 1) Overview + 2) Kernel Command Line Parameters + 3) Using "rdev -r" With New Kernels + 4) An Example of Creating a Compressed ramdisk + + +1) Overview +----------- + +As of kernel v1.3.48, the ramdisk driver was substantially changed. + +The older versions would grab a chunk of memory off the top before +handing the remainder to the kernel at boot time. Thus a size parameter +had to be specified via "ramdisk=1440" or "rdev -r /dev/fd0 1440" so +that the driver knew how much memory to grab. + +Now the ramdisk dynamically grows as more space is required. It does +this by using RAM from the buffer cache. The driver marks the buffers +it is using with a new "BH_Protected" flag so that the kernel does +not try to reuse them later. This means that the old size parameter +is no longer used, new command line parameters exist, and the behavior +of the "rdev -r" or "ramsize" (usually a symbolic link to "rdev") +command has changed. + +Also, the new ramdisk supports up to 16 ramdisks out of the box, and can +be reconfigured in rd.c to support up to 255 ramdisks. To use multiple +ramdisk support with your system, run 'mknod /dev/ramX b 1 X' and chmod +(to change it's permissions) it to your liking. The default /dev/ram(disk) +uses minor #1, so start with ram2 and go from there. + +The old "ramdisk=<ram_size>" has been changed to "ramdisk_size=<ram_size>" +to make it clearer. The original "ramdisk=<ram_size>" has been kept around +for compatibility reasons, but it will probably be removed in 2.1.x. + +The new ramdisk also has the ability to load compressed ramdisk images, +allowing one to squeeze more programs onto an average installation or +rescue floppy disk. + +Notes: You may have "dev/ram" or "/dev/ramdisk" or both. They are +equivalent from the standpoint of this document. Also, the new ramdisk +is a config option. When running "make config", make sure you enable +ramdisk support for the kernel you intend to use the ramdisk with. + + +2) Kernel Command Line Parameters +--------------------------------- + + ramdisk_start=NNN + ================= + +To allow a kernel image to reside on a floppy disk along with a compressed +ramdisk image, the "ramdisk_start=<offset>" command was added. The kernel +can't be included into the compressed ramdisk filesystem image, because +it needs to be stored starting at block zero so that the BIOS can load the +bootsector and then the kernel can bootstrap itself to get going. + +Note: If you are using an uncompressed ramdisk image, then the kernel can +be a part of the filesystem image that is being loaded into the ramdisk, +and the floppy can be booted with LILO, or the two can be separate as +is done for the compressed images. + +If you are using a two-disk boot/root setup (kernel on #1, ramdisk image +on #2) then the ramdisk would start at block zero, and an offset of +zero would be used. Since this is the default value, you would not need +to actually use the command at all. + +If instead, you have a "zImage" of about 350k, and a "fs_image.gz" of +say about 1MB, and you want them both on the same disk, then you +would use an offset. If you stored the "fs_image.gz" onto the floppy +starting at an offset of 400kB, you would use "ramdisk_start=400". + + + load_ramdisk=N + ============== + +This parameter tells the kernel whether it is to try to load a +ramdisk image or not. Specifying "load_ramdisk=1" will tell the +kernel to load a floppy into the ramdisk. The default value is +zero, meaning that the kernel should not try to load a ramdisk. + + + prompt_ramdisk=N + ================ + +This parameter tells the kernel whether or not to give you a prompt +asking you to insert the floppy containing the ramdisk image. In +a single floppy configuration the ramdisk image is on the same floppy +as the kernel that just finished loading/booting and so a prompt +is not needed. In this case one can use "prompt_ramdisk=0". In a +two floppy configuration, you will need the chance to switch disks, +and thus "prompt_ramdisk=1" can be used. Since this is the default +value, it doesn't really need to be specified. + + ramdisk_size=N + ============== + +This parameter tells the ramdisk driver to set up ramdisks of Nk size. The +default is 4096 (4MB). + +3) Using "rdev -r" With New Kernels +----------------------------------- + +The usage of the word (two bytes) that "rdev -r" sets in the kernel image +has changed. The low 11 bits (0 -> 10) specify an offset (in 1k blocks) +of up to 2MB (2^11) of where to find the ramdisk (this used to be the +size). Bit 14 indicates that a ramdisk is to be loaded, and bit 15 +indicates whether a prompt/wait sequence is to be given before trying +to read the ramdisk. Since the ramdisk dynamically grows as data is +being written into it, a size field is no longer required. Bits 11 +to 13 are not presently used and may as well be zero. These numbers +are no magical secrets, as seen below: + +./arch/i386/kernel/setup.c:#define RAMDISK_IMAGE_START_MASK 0x07FF +./arch/i386/kernel/setup.c:#define RAMDISK_PROMPT_FLAG 0x8000 +./arch/i386/kernel/setup.c:#define RAMDISK_LOAD_FLAG 0x4000 + +Consider a typical two floppy disk setup, where you will have the +kernel on disk one, and have already put a ramdisk image onto disk #2. + +Hence you want to set bits 0 to 13 as zero, meaning that your ramdisk +starts at an offset of zero kB from the beginning of the floppy. +The command line equivalent is: "ramdisk_start=0" + +You want bit 14 as one, indicating that a ramdisk is to be loaded. +The command line equivalent is: "load_ramdisk=1" + +You want bit 15 as one, indicating that you want a prompt/keypress +sequence so that you have a chance to switch floppy disks. +The command line equivalent is: "prompt_ramdisk=1" + +Putting that together gives 2^15 + 2^14 + 0 = 49152 for an rdev word. +So to create disk one of the set, you would do: + + /usr/src/linux# cat arch/i386/boot/zImage > /dev/fd0 + /usr/src/linux# rdev /dev/fd0 /dev/fd0 + /usr/src/linux# rdev -r /dev/fd0 49152 + +If you make a boot disk that has LILO, then for the above, you would use: + append = "ramdisk_start=0 load_ramdisk=1 prompt_ramdisk=1" +Since the default start = 0 and the default prompt = 1, you could use: + append = "load_ramdisk=1" + + +4) An Example of Creating a Compressed ramdisk +---------------------------------------------- + +To create a ramdisk image, you will need a spare block device to +construct it on. This can be the ramdisk device itself, or an +unused disk partition (such as an unmounted swap partition). For this +example, we will use the ramdisk device, "/dev/ram". + +Note: This technique should not be done on a machine with less than 8MB +of RAM. If using a spare disk partition instead of /dev/ram, then this +restriction does not apply. + +a) Decide on the ramdisk size that you want. Say 2MB for this example. + Create it by writing to the ramdisk device. (This step is not presently + required, but may be in the future.) It is wise to zero out the + area (esp. for disks) so that maximal compression is achieved for + the unused blocks of the image that you are about to create. + + dd if=/dev/zero of=/dev/ram bs=1k count=2048 + +b) Make a filesystem on it. Say ext2fs for this example. + + mke2fs -vm0 /dev/ram 2048 + +c) Mount it, copy the files you want to it (eg: /etc/* /dev/* ...) + and unmount it again. + +d) Compress the contents of the ramdisk. The level of compression + will be approximately 50% of the space used by the files. Unused + space on the ramdisk will compress to almost nothing. + + dd if=/dev/ram bs=1k count=2048 | gzip -v9 > /tmp/ram_image.gz + +e) Put the kernel onto the floppy + + dd if=zImage of=/dev/fd0 bs=1k + +f) Put the ramdisk image onto the floppy, after the kernel. Use an offset + that is slightly larger than the kernel, so that you can put another + (possibly larger) kernel onto the same floppy later without overlapping + the ramdisk image. An offset of 400kB for kernels about 350kB in + size would be reasonable. Make sure offset+size of ram_image.gz is + not larger than the total space on your floppy (usually 1440kB). + + dd if=/tmp/ram_image.gz of=/dev/fd0 bs=1k seek=400 + +g) Use "rdev" to set the boot device, ramdisk offset, prompt flag, etc. + For prompt_ramdisk=1, load_ramdisk=1, ramdisk_start=400, one would + have 2^15 + 2^14 + 400 = 49552. + + rdev /dev/fd0 /dev/fd0 + rdev -r /dev/fd0 49552 + +That is it. You now have your boot/root compressed ramdisk floppy. Some +users may wish to combine steps (d) and (f) by using a pipe. + +-------------------------------------------------------------------------- + Paul Gortmaker 12/95 |