Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ae2f5e7 authored by Steven Moreland's avatar Steven Moreland
Browse files

libbinder: auto-choose between binder/vndbinder.

Right now, a huge amount of client code has to manually
specify initWithDriver("/dev/vndbinder"). This is kind
of silly because every vendor process is not allowed to
talk to /dev/binder, and system processes are not allowed
to talk to /dev/vndbinder. On legacy devices,
__ANDROID_VNDK__ will not be set, so they will continue
to talk to /dev/binder.

Bug: 62956284
Test: boot Pixel 2, check for errors
Change-Id: Ic0d9da6d9b451aa8b1e62f24487d19478bff3d97
parent 7e3e5b68
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -43,6 +43,12 @@
#define BINDER_VM_SIZE ((1 * 1024 * 1024) - sysconf(_SC_PAGE_SIZE) * 2)
#define DEFAULT_MAX_BINDER_THREADS 15

#ifdef __ANDROID_VNDK__
const char* kDefaultDriver = "/dev/vndbinder";
#else
const char* kDefaultDriver = "/dev/binder";
#endif

// -------------------------------------------------------------------------

namespace android {
@@ -71,7 +77,7 @@ sp<ProcessState> ProcessState::self()
    if (gProcess != nullptr) {
        return gProcess;
    }
    gProcess = new ProcessState("/dev/binder");
    gProcess = new ProcessState(kDefaultDriver);
    return gProcess;
}

+4 −1
Original line number Diff line number Diff line
@@ -36,9 +36,12 @@ class ProcessState : public virtual RefBase
public:
    static  sp<ProcessState>    self();
    static  sp<ProcessState>    selfOrNull();

    /* initWithDriver() can be used to configure libbinder to use
     * a different binder driver dev node. It must be called *before*
     * any call to ProcessState::self(). /dev/binder remains the default.
     * any call to ProcessState::self(). The default is /dev/vndbinder
     * for processes built with the VNDK and /dev/binder for those
     * which are not.
     */
    static  sp<ProcessState>    initWithDriver(const char *driver);