service_manager.c :
struct binder_state *bs;
bs = binder_open(128*1024);
a. binder_open
b. binder_become_context_manager
c. binder_loop(bs, svcmgr_handler);
void binder_loop(struct binder_state *bs, binder_handler func)
Binder.c
c.2 binder_parse
res = binder_parse(bs, 0, (uintptr_t) readbuf, bwr.read_consumed, func);
int binder_parse(struct binder_state *bs, struct binder_io *bio,
uintptr_t ptr, size_t size, binder_handler func)
{
// 解析
// 处理 : svcmgr_handler
binder_loop(bs, svcmgr_handler);
int svcmgr_handler(struct binder_state *bs,
struct binder_transaction_data *txn,
struct binder_io *msg,
struct binder_io *reply)
SVC_MGR_GET_SERVICE/SVC_MGR_CHECK_SERVICE : 获取服务
SVC_MGR_ADD_SERVICE : 注册服务
// 回复
bctest.c
注册服务的过程:
a. binder_open
bs = binder_open(128*1024);
uint32_t svcmgr_lookup(struct binder_state *bs, uint32_t target, const char *name)
{
if (binder_call(bs, &msg, &reply, target, SVC_MGR_ADD_SERVICE)) 注册服务的过程
b. binder_call(bs, &msg, &reply, 0, SVC_MGR_ADD_SERVICE)
int binder_call(struct binder_state *bs,
struct binder_io *msg, struct binder_io *reply,
uint32_t target, uint32_t code)
writebuf.cmd = BC_TRANSACTION;
writebuf.txn.target.handle = target;
writebuf.txn.code = code;
// 含有服务的名字
// 它会含有servicemanager回复的数据
// 0表示servicemanager
// code: 表示要调用servicemanager中的"addservice函数"
获取服务的过程:
a. binder_open
b. binder_call(bs, &msg, &reply, target, SVC_MGR_CHECK_SERVICE)
// 含有服务的名字
// 它会含有servicemanager回复的数据, 表示提供服务的进程
// 0表示servicemanager
// code: 表示要调用servicemanager中的"getservice函数"
binder.c (封装好的C函数)
binder_call分析
bctest.c
TestServer.c
testclient.c