738fb6dfa4
The section of the manual describing the makedev syntax is not up-to-date with the current features, and does not properly describe existing ones. - extend the list of types with the requirements on the existence of the target file or directory; for 'c', 'b', and 'p', the existence requirement is inherited from mknod(2): ERRORS ... ENOENT A directory component in pathname does not exist or is a dangling symbolic link. for the other types, the existence requirements are extracted from the source of makedev.c; - format the types flags, so they are rendered in monospace; - extend the 'mode' description, as it can be set to -1 for 'f', 'd', or 'r', so that only the uid and gid are set. This is most useful for 'r', where setting the same mode recursively for all the sub-directories and files alike does not really make sense; indeed in this case, the modes are usually set correctly when the package (or rootfs overlay) installs the files, and only the uid and gid are interesting to set; - extend and update the examples to show-case the -1 mode use-case. Signed-off-by: Yann E. MORIN <yann.morin@orange.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
109 lines
3.7 KiB
Plaintext
109 lines
3.7 KiB
Plaintext
// -*- mode:doc; -*-
|
|
// vim: set syntax=asciidoc:
|
|
|
|
[[makedev-syntax]]
|
|
== Makedev syntax documentation
|
|
|
|
The makedev syntax is used in several places in Buildroot to
|
|
define changes to be made for permissions, or which device files to
|
|
create and how to create them, in order to avoid calls to mknod.
|
|
|
|
This syntax is derived from the makedev utility, and more complete
|
|
documentation can be found in the +package/makedevs/README+ file.
|
|
|
|
It takes the form of a space separated list of fields, one file per
|
|
line; the fields are:
|
|
|
|
|===========================================================
|
|
|name |type |mode |uid |gid |major |minor |start |inc |count
|
|
|===========================================================
|
|
|
|
There are a few non-trivial blocks:
|
|
|
|
- +name+ is the path to the file you want to create/modify
|
|
- +type+ is the type of the file, being one of:
|
|
* `f`: a regular file, which must already exist
|
|
* `F`: a regular file, which is ignored and not created if missing
|
|
* `d`: a directory, which is created, as well as its parents, if missing
|
|
* `r`: a directory recursively, which must already exist
|
|
* `c`: a character device file, which parent directory must exist
|
|
* `b`: a block device file, which parent directory must exist
|
|
* `p`: a named pipe, which parent directory must exist
|
|
- +mode+ are the usual permissions settings (only numerical values
|
|
are allowed);
|
|
for type `d`, the mode of existing parents is not changed, but the mode
|
|
of created parents is set;
|
|
for types `f`, `F`, and `r`, +mode+ can also be set to +-1+ to not
|
|
change the mode (and only change uid and gid)
|
|
- +uid+ and +gid+ are the UID and GID to set on this file; can be
|
|
either numerical values or actual names
|
|
- +major+ and +minor+ are here for device files, set to +-+ for other
|
|
files
|
|
- +start+, +inc+ and +count+ are for when you want to create a batch
|
|
of files, and can be reduced to a loop, beginning at +start+,
|
|
incrementing its counter by +inc+ until it reaches +count+
|
|
|
|
Let's say you want to change the ownership and permissions of a given
|
|
file; using this syntax, you will need to write:
|
|
|
|
----
|
|
/usr/bin/foo f 755 0 0 - - - - -
|
|
/usr/bin/bar f 755 root root - - - - -
|
|
/data/buz f 644 buz-user buz-group - - - - -
|
|
/data/baz f -1 baz-user baz-group - - - - -
|
|
----
|
|
|
|
Alternatively, if you want to change owner of a directory recursively,
|
|
you can write (to set UID to `foo` and GID to `bar` for the directory
|
|
`/usr/share/myapp` and all files and directories below it):
|
|
|
|
----
|
|
/usr/share/myapp r -1 foo bar - - - - -
|
|
----
|
|
|
|
On the other hand, if you want to create the device file +/dev/hda+
|
|
and the corresponding 15 files for the partitions, you will need for
|
|
+/dev/hda+:
|
|
|
|
----
|
|
/dev/hda b 640 root root 3 0 0 0 -
|
|
----
|
|
|
|
and then for device files corresponding to the partitions of
|
|
+/dev/hda+, +/dev/hdaX+, +X+ ranging from 1 to 15:
|
|
|
|
----
|
|
/dev/hda b 640 root root 3 1 1 1 15
|
|
----
|
|
|
|
Extended attributes are supported if
|
|
+BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES+ is enabled.
|
|
This is done by adding a line starting with +|xattr+ after
|
|
the line describing the file. Right now, only capability
|
|
is supported as extended attribute.
|
|
|
|
|=====================
|
|
| \|xattr | capability
|
|
|=====================
|
|
|
|
- +|xattr+ is a "flag" that indicate an extended attribute
|
|
- +capability+ is a capability to add to the previous file
|
|
|
|
If you want to add the capability cap_sys_admin to the binary foo,
|
|
you will write :
|
|
|
|
----
|
|
/usr/bin/foo f 755 root root - - - - -
|
|
|xattr cap_sys_admin+eip
|
|
----
|
|
|
|
You can add several capabilities to a file by using several +|xattr+ lines.
|
|
If you want to add the capability cap_sys_admin and cap_net_admin to the
|
|
binary foo, you will write :
|
|
|
|
----
|
|
/usr/bin/foo f 755 root root - - - - -
|
|
|xattr cap_sys_admin+eip
|
|
|xattr cap_net_admin+eip
|
|
----
|