当前位置: 首页 > news >正文

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);
http://www.lqws.cn/news/74863.html

相关文章:

  • DeepSeek模型高级应用:提示工程与Few-shot学习实战指南
  • [HTML5]快速掌握canvas
  • EXSI通过笔记本wifi上外网配置
  • Elasticsearch 读写流程深度解析
  • Python应用range函数初解pro
  • JSP、HTML和Tomcat
  • 从0开始学vue:vue3和vue2的关系
  • 通信革新与网络安全探索与创新:开启未来之门
  • 设计模式——迭代器设计模式(行为型)
  • 38、响应处理-【源码分析】-HTTPMessageConverter原理
  • JAVA学习-练习试用Java实现“使用JavaFX绘制散点图 :可视化数据集”
  • JAVA核心知识点--元注解详解
  • 网络攻防技术四:网络侦察技术
  • 制作个人Github学术主页
  • 智慧零工平台前端开发实战:从uni-app到跨平台应用
  • uniapp路由跳转toolbar页面
  • React 18新特性介绍
  • 【保姆级教程】PDF批量转图文笔记
  • springboot 集成webFilter登录认证信息过滤 DEMO原型介绍
  • TomatoSCI数据分析实战:探索社交媒体成瘾
  • CppCon 2014 学习:(Costless)Software Abstractions for Parallel Architectures
  • MCP协议学习
  • GODOT引擎学习日志
  • ShenNiusModularity项目源码学习(33:ShenNius.Admin.Mvc项目分析-18)
  • CppCon 2014 学习:Hardening Your Code
  • 地震资料裂缝定量识别——学习计划
  • 开发的几种格式,TCP的十个重要机制
  • Warp安装后启动报错
  • 趋势因子均值策略思路
  • 使用 OpenCV (C/C++) 通过二值化增强车牌识别