android binder(三)binder.c函数分析

一、binder_call

int binder_call(struct binder_state *bs,
                 struct binder_io *msg, struct binder_io *reply,
                 uint32_t target, uint32_t code);
实现远程调用RPC,既然是远程函数调用,那么就有如下要素:
  • 向谁发送数据:target

  • 调用哪个函数:code

  • 提供什么参数:msg

  • 返回值:reply

如何使用?

 

  • 构造参数:存放在buf中,用binder_io结构体描述
        struct binder_io
        {
            char *data;            /* pointer to read/write from */
            binder_size_t *offs;   /* array of offsets */
            size_t data_avail;     /* bytes available in data buffer */
            size_t offs_avail;     /* entries available in offsets array */
            char *data0;           /* start of data buffer */
            binder_size_t *offs0;  /* start of offsets buffer */
            uint32_t flags;
            uint32_t unused;
        };

  • 数据格式转换,将binder_io数据转换成驱动程序要求的binder_write_read数据
  • 调用ioctl发送数据--ioctl(bs->fd, BINDER_WRITE_READ, &bwr);
struct binder_write_read {
 binder_size_t write_size;
 binder_size_t write_consumed;
 binder_uintptr_t write_buffer;
/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
 binder_size_t read_size;
 binder_size_t read_consumed;
 binder_uintptr_t read_buffer;
};

  • 调用ioctl接收数据--ioctl(bs->fd, BINDER_WRITE_READ, &bwr);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值