Odd Results Using -d and -D Together with mkfs.jffs2
Grant Erickson
gerickson at nuovations.com
Wed Jun 4 13:11:39 EDT 2008
I've run into what I can only imagine is user error regarding mkfs.jffs2
when creating a root file system image for a target system.
At present, I run mkfs.jffs2 with super-user credentials and point it at a
temporary root file system tree (created with a tool that does
gather/scatter of build tree results) and end up with the precisely desired
image with all the right permissions, files, etc.:
% sudo mkfs.jffs2 -v --big-endian --no-cleanmarkers --pad 512 \
--pagesize 512 --eraseblock 16384 -d /tmp/tmp.gtKxQ31829 -o root.img
at about 11 MiB in size.
However, clearly, I'd like to be able to run a build without requiring
super-user credentials. So, I added an option to my gather/scatter tool to
generate a device table so that it can skip setting permissions and creating
device nodes and let mkfs.jffs2 do that:
% mkfs.jffs2 -v --big-endian --no-cleanmarkers --pad 512 \
--pagesize 512 --eraseblock 16384 -d /tmp/tmp.EdxjV32751 \
-D devices.txt -o root.img
However, I end up with two problems, the first of which seems counter to
what I had expected based on my interpretation of the manual reference page:
1) I end up with an image that is 2x larger (22 MiB) than was
created in the super-user credentialed case without the device table.
Based on the output with '-v' enabled, mkfs.jffs2 seems to create
every regular file and directory twice, once with the permissions
(the current build user) from the source file from '-d' and again
with the permissions specified (privileged users) in '-D'. For
example:
...
/usr
d 0775 0 1000:1000 bin
d 0775 0 1000:1000 lib
d 0775 0 1000:1000 libexec
d 0775 0 1000:1000 sbin
d 0775 0 1000:1000 share
d 0775 0 0:4 bin
d 0775 0 0:4 lib
d 0775 0 0:4 libexec
d 0775 0 0:4 sbin
d 0775 0 0:4 share
...
2) It does not seem to be able to set the permissions of any directories
at the top of the file tree:
mkfs.jffs2: skipping device_table entry '/bin': no parent directory!
mkfs.jffs2: skipping device_table entry '/dev': no parent directory!
mkfs.jffs2: skipping device_table entry '/etc': no parent directory!
mkfs.jffs2: skipping device_table entry '/lib': no parent directory!
mkfs.jffs2: skipping device_table entry '/sys': no parent directory!
mkfs.jffs2: skipping device_table entry '/tmp': no parent directory!
mkfs.jffs2: skipping device_table entry '/usr': no parent directory!
mkfs.jffs2: skipping device_table entry '/var': no parent directory!
...
Given the two example bits of output above, my device table looks like:
/bin d 0775 0 4 0 0 - - -
/dev d 0775 0 4 0 0 - - -
/etc d 0775 0 4 0 0 - - -
/lib d 0775 0 4 0 0 - - -
/sys d 0775 0 4 0 0 - - -
/tmp d 0775 0 4 0 0 - - -
/usr d 0775 0 4 0 0 - - -
/usr/bin d 0775 0 4 0 0 - - -
/usr/lib d 0775 0 4 0 0 - - -
/usr/libexec d 0775 0 4 0 0 - - -
/usr/sbin d 0775 0 4 0 0 - - -
/usr/share d 0775 0 4 0 0 - - -
/var d 0775 0 4 0 0 - - -
Any insight on what user error I am tripping over here?
Regards,
Grant Erickson
More information about the linux-mtd
mailing list