[C.C++] c语言中2u,Binder系统的C程序使用示例

111 0
Honkers 昨天 17:25 来自手机 | 显示全部楼层 |阅读模式

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行