android12-release
Binder系列1-Binder Driver
Binder系列2-ServiceManager
Binder系列3-framework层

都是Binder IPC,查看 Binder系列1-Binder Driver
binder_init() -> init_binder_device(device_name)注册misc设备节点
对应设备节点:/dev/binder、/dev/hwbinder、/dev/vndbinder
drivers/android/binder.c
kernel/configs/android-base.config
char *binder_devices_param = CONFIG_ANDROID_BINDER_DEVICES;
CONFIG_ANDROID_BINDER_DEVICES=binder,hwbinder,vndbinder

上边是kernel底层misc设备节点添加
frameworks/native/cmds/servicemanager/servicemanager.rc
system/hwservicemanager/hwservicemanager.rc
与/dev/binder是同一入口,通过rc文件参数区分
const char* driver = argc == 2 ? argv[1] : "/dev/binder";
/dev/vndbinder是两个参数service vndservicemanager /vendor/bin/vndservicemanager /dev/vndbinder
frameworks/native/cmds/servicemanager/vndservicemanager.rc
defaultServiceManager(),如mediaserver.rc启动通过binder/IServiceManager.h中defaultServiceManager()(frameworks/native/libs/binder/IServiceManager.cpp)frameworks/av/media/mediaserver/mediaserver.rc
frameworks/av/media/mediaserver/main_mediaserver.cpp
frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp
#include
#include
#include
#include
void MediaPlayerService::instantiate() {
defaultServiceManager()->addService(
String16("media.player"), new MediaPlayerService());
}
defaultServiceManager()(system/libhidl/transport/ServiceManagement.cpp)sp<IServiceManager1_0> defaultServiceManager() {
return defaultServiceManager1_2();
}
sp<IServiceManager1_1> defaultServiceManager1_1() {
return defaultServiceManager1_2();
}
sp<IServiceManager1_2> defaultServiceManager1_2() {
using android::hidl::manager::V1_2::BnHwServiceManager;
using android::hidl::manager::V1_2::BpHwServiceManager;
static std::mutex& gDefaultServiceManagerLock = *new std::mutex;
static sp<IServiceManager1_2>& gDefaultServiceManager = *new sp<IServiceManager1_2>;
{
std::lock_guard<std::mutex> _l(gDefaultServiceManagerLock);
if (gDefaultServiceManager != nullptr) {
return gDefaultServiceManager;
}
if (access("/dev/hwbinder", F_OK|R_OK|W_OK) != 0) {
// HwBinder not available on this device or not accessible to
// this process.
return nullptr;
}
waitForHwServiceManager();
while (gDefaultServiceManager == nullptr) {
gDefaultServiceManager =
fromBinder<IServiceManager1_2, BpHwServiceManager, BnHwServiceManager>(
ProcessState::self()->getContextObject(nullptr));
if (gDefaultServiceManager == nullptr) {
LOG(ERROR) << "Waited for hwservicemanager, but got nullptr.";
sleep(1);
}
}
}
return gDefaultServiceManager;
}
defaultServiceManager(),从上面2.3查看与/dev/binder共用一套libbinder,这里通过ProcessState::self()与ProcessState::initWithDriver("/dev/vndbinder")切换,默认kDefaultDriver = "/dev/binder";因此两者使用时,每次只能指定一个设备节点,不能同时使用。左图mediaserver.rc启动,右图CameraProvider进程启动(CameraProvider进程-Android12)
