// -*- 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
----
