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:
mode
are the usual permissions settings (only numerical values
are allowed)
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 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 - - - - -
Alternatively, if you want to change owner/permission of a directory recursively, you can write (to set UID to foo, GID to bar and access rights to rwxr-x--- for the directory /usr/share/myapp and all files and directories below it):
/usr/share/myapp r 750 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