Merge branch 'for-linus-5.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / Documentation / filesystems / binderfs.rst
CommitLineData
35283f56
CB
1.. SPDX-License-Identifier: GPL-2.0
2
3The Android binderfs Filesystem
4===============================
5
6Android binderfs is a filesystem for the Android binder IPC mechanism. It
7allows to dynamically add and remove binder devices at runtime. Binder devices
8located in a new binderfs instance are independent of binder devices located in
9other binderfs instances. Mounting a new binderfs instance makes it possible
10to get a set of private binder devices.
11
12Mounting binderfs
13-----------------
14
15Android binderfs can be mounted with::
16
17 mkdir /dev/binderfs
18 mount -t binder binder /dev/binderfs
19
20at which point a new instance of binderfs will show up at ``/dev/binderfs``.
21In a fresh instance of binderfs no binder devices will be present. There will
22only be a ``binder-control`` device which serves as the request handler for
23binderfs. Mounting another binderfs instance at a different location will
24create a new and separate instance from all other binderfs mounts. This is
25identical to the behavior of e.g. ``devpts`` and ``tmpfs``. The Android
26binderfs filesystem can be mounted in user namespaces.
27
28Options
29-------
30max
31 binderfs instances can be mounted with a limit on the number of binder
32 devices that can be allocated. The ``max=<count>`` mount option serves as
33 a per-instance limit. If ``max=<count>`` is set then only ``<count>`` number
34 of binder devices can be allocated in this binderfs instance.
35
36Allocating binder Devices
37-------------------------
38
39.. _ioctl: http://man7.org/linux/man-pages/man2/ioctl.2.html
40
41To allocate a new binder device in a binderfs instance a request needs to be
42sent through the ``binder-control`` device node. A request is sent in the form
43of an `ioctl() <ioctl_>`_.
44
45What a program needs to do is to open the ``binder-control`` device node and
46send a ``BINDER_CTL_ADD`` request to the kernel. Users of binderfs need to
47tell the kernel which name the new binder device should get. By default a name
48can only contain up to ``BINDERFS_MAX_NAME`` chars including the terminating
49zero byte.
50
51Once the request is made via an `ioctl() <ioctl_>`_ passing a ``struct
52binder_device`` with the name to the kernel it will allocate a new binder
53device and return the major and minor number of the new device in the struct
54(This is necessary because binderfs allocates a major device number
55dynamically.). After the `ioctl() <ioctl_>`_ returns there will be a new
56binder device located under /dev/binderfs with the chosen name.
57
58Deleting binder Devices
59-----------------------
60
61.. _unlink: http://man7.org/linux/man-pages/man2/unlink.2.html
62.. _rm: http://man7.org/linux/man-pages/man1/rm.1.html
63
64Binderfs binder devices can be deleted via `unlink() <unlink_>`_. This means
65that the `rm() <rm_>`_ tool can be used to delete them. Note that the
66``binder-control`` device cannot be deleted since this would make the binderfs
67instance unuseable. The ``binder-control`` device will be deleted when the
68binderfs instance is unmounted and all references to it have been dropped.