OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rc203soc/] [sw/] [uClinux/] [Documentation/] [filesystems/] [romfs.txt] - Blame information for rev 1777

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1625 jcastillo
 
2
ROMFS - ROM FILE SYSTEM
3
 
4
This is a quite dumb, read only filesystem, mainly for initial ram
5
disks of installation disks.  It has grown up by the need of having
6
modules linked at boot time.  Using this filesystem, you get a very
7
similar feature, and even the possibility of a small kernel, with a
8
file system which doesn't take up useful memory from the router
9
functions in the basement of your office.
10
 
11
For comparison, both the older minix and xiafs (the latter is now
12
defunct) filesystems, compiled as module need more than 20000 bytes,
13
while romfs is less than a page, about 4000 bytes (assuming i586
14
code).  Under the same conditions, the msdos filesystem would need
15
about 30K (and does not support device nodes or symlinks), while the
16
nfs module with nfsroot is about 57K.  Furthermore, as a bit unfair
17
comparison, an actual rescue disk used up 3202 blocks with ext2, while
18
with romfs, it needed 3079 blocks.
19
 
20
To create such a file system, you'll need a user program named
21
genromfs.  It is available via anonymous ftp on sunsite.unc.edu and
22
its mirrors, in the /pub/Linux/system/recovery/ directory.
23
 
24
As the name suggests, romfs could be also used (space-efficiently) on
25
various read-only medias, like (E)EPROM disks if someone will have the
26
motivation.. :)
27
 
28
However, the main purpose of romfs is to have a very small kernel,
29
which has only this filesystem linked in, and then can load any module
30
later, with the current module utilities.  It can also be used to run
31
some program to decide if you need SCSI devices, and even IDE or
32
floppy drives can be loaded later if you use the "initrd" -- initial
33
ram disk -- feature of the kernel.  This would not be really news
34
flash, but with romfs, you can even spare off your ext2 or minix or
35
maybe even affs filesystem until you really know that you need it.
36
 
37
For example, a distribution boot disk can contain only the cd disk
38
drivers (and possibly the SCSI drivers), and the ISO filesystem
39
module.  The kernel can be small enough, since it doesn't have other
40
filesystems, like the quite large ext2fs module, which can then be
41
loaded off the CD at a later stage of the installation.  Another use
42
would be for a recovery disk, when you are reinstalling a workstation
43
from the network, and you will have all the tools/modules available
44
from a nearby server, so you don't want to carry two disks for this
45
purpose, just because it won't fit into ext2.
46
 
47
romfs operates on block devices as you can expect, and the underlying
48
structure is very simple.  Every accessible structure begins on 16
49
byte boundaries for fast access.  The minimum space a file will take
50
is 32 bytes (this is an empty file, with a less than 16 character
51
name).  The maximum overhead for any non-empty file is the header, and
52
the 16 byte padding for the name and the contents, also 16+14+15 = 45
53
bytes.  This is quite rare however, since most file names are longer
54
than 3 bytes, and shorter than 15 bytes.
55
 
56
The layout of the filesystem is the following:
57
 
58
offset      content
59
 
60
        +---+---+---+---+
61
 
62
        +---+---+---+---+       The ASCII representation of those bytes
63
  4     | 1 | f | s | - |  /    (i.e. "-rom1fs-")
64
        +---+---+---+---+
65
  8     |   full size   |       The number of accessible bytes in this fs.
66
        +---+---+---+---+
67
 12     |    checksum   |       The checksum of the FIRST 512 BYTES.
68
        +---+---+---+---+
69
 16     | volume name   |       The zero terminated name of the volume,
70
        :               :       padded to 16 byte boundary.
71
        +---+---+---+---+
72
 xx     |     file      |
73
        :    headers    :
74
 
75
Every multi byte value (32 bit words, I'll use the longwords term from
76
now on) must be in big endian order.
77
 
78
The first eight bytes identify the filesystem, even for the casual
79
inspector.  After that, in the 3rd longword, it contains the number of
80
bytes accessible from the start of this filesystem.  The 4th longword
81
is the checksum of the first 512 bytes (or the number of bytes
82
accessible, whichever is smallest).  The applied algorithm is the same
83
as in the AFFS filesystem, namely a simple sum of the longwords
84
(assuming bigendian quantities again).  For details, please consult
85
the source.  This algorithm was chosen because although it's not quite
86
reliable, it does not require any tables, and it is very simple.
87
 
88
The following bytes are now part of the file system; each file header
89
must begin on a 16 byte boundary.
90
 
91
offset      content
92
 
93
        +---+---+---+---+
94
 
95
        +---+---+---+---+         (zero if no more files)
96
  4     |   spec.info   |       Info for directories/hard links/devices
97
        +---+---+---+---+
98
  8     |     size      |       The size of this file in bytes
99
        +---+---+---+---+
100
 12     |   checksum    |       Covering the meta data, including the file
101
        +---+---+---+---+         name, and padding
102
 16     | file name     |       The zero terminated name of the file,
103
        :               :       padded to 16 byte boundary
104
        +---+---+---+---+
105
 xx     | file data     |
106
        :               :
107
 
108
Since the file headers begin always at a 16 byte boundary, the lowest
109
4 bits would be always zero in the next filehdr pointer.  These four
110
bits are used for the mode information.  Bits 0..2 specify the type of
111
the file; while bit 4 shows if the file is executable or not.  The
112
permissions are assumed to be world readable, if this bit is not set,
113
and world executable if it is; except the character and block devices,
114
they are never accessible for other than owner.  The owner of every
115
file is user and group 0, this should never be a problem for the
116
intended use.  The mapping of the 8 possible values to file types is
117
the following:
118
 
119
          mapping               spec.info means
120
 
121
 1      directory       first file's header
122
 2      regular file    unused, must be zero [MBZ]
123
 3      symbolic link   unused, MBZ (file data is the link content)
124
 4      block device    16/16 bits major/minor number
125
 5      char device                 - " -
126
 6      socket          unused, MBZ
127
 7      fifo            unused, MBZ
128
 
129
Note that hard links are specifically marked in this filesystem, but
130
they will behave as you can expect (i.e. share the inode number).
131
Note also that it is your responsibility to not create hard link
132
loops, and creating all the . and .. links for directories.  This is
133
normally done correctly by the genromfs program.  Please refrain from
134
using the executable bits for special purposes on the socket and fifo
135
special files, they may have other uses in the future.  Additionally,
136
please remember that only regular files, and symlinks are supposed to
137
have a nonzero size field; they contain the number of bytes available
138
directly after the (padded) file name.
139
 
140
Another thing to note is that romfs works on file headers and data
141
aligned to 16 byte boundaries, but most hardware devices and the block
142
device drivers are unable to cope with smaller than block-sized data.
143
To overcome this limitation, the whole size of the file system must be
144
padded to an 1024 byte boundary.
145
 
146
If you have any problems or suggestions concerning this file system,
147
please contact me.  However, think twice before wanting me to add
148
features and code, because the primary and most important advantage of
149
this file system is the small code.  On the other hand, don't be
150
alarmed, I'm not getting that much romfs related mail.  Now I can
151
understand why Avery wrote poems in the arcnet docs to get some more
152
feedback. :)
153
 
154
romfs has also a mailing list, and to date, it hasn't received any
155
traffic, so you are welcome to join it to discuss your ideas. :)
156
 
157
It's run by ezmlm, so you can subscribe to it by sending a message
158
to romfs-subscribe@shadow.banki.hu, the content is irrelevant.
159
 
160
Pending issues:
161
 
162
- Permissions and owner information are pretty essential features of a
163
Un*x like system, but romfs does not provide the full possibilities.
164
I have never found this limiting, but others might.
165
 
166
- The file system is read only, so it can be very small, but in case
167
one would want to write _anything_ to a file system, he still needs
168
a writable file system, thus negating the size advantages.  Possible
169
solutions: implement write access as a compile-time option, or a new,
170
similarly small writable filesystem for ram disks.
171
 
172
- Since the files are only required to have alignment on a 16 byte
173
boundary, it is currently possibly suboptimal to read or execute files
174
from the filesystem.  It might be resolved by reordering file data to
175
have most of it (i.e. except the start and the end) laying at "natural"
176
boundaries, thus it would be possible to directly map a big portion of
177
the file contents to the mm subsystem.
178
 
179
- Compression might be an useful feature, but memory is quite a
180
limiting factor in my eyes.
181
 
182
- Where it is used?
183
 
184
- Does it work on other architectures than intel and motorola?
185
 
186
 
187
Have fun,
188
Janos Farkas 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.