【android】binder机制 binder协议

来源:互联网 发布:重复照片整理软件 编辑:程序博客网 时间:2024/05/16 08:37

(关于_IOWR,_IOW,_IOR,_IO请参考linux命令码(_IO宏) )

一.设备文件/dev/binder ioctl命令

#define BINDER_WRITE_READ   _IOWR('b', 1, struct binder_write_read)//读写命令#defineBINDER_SET_IDLE_TIMEOUT_IOW('b', 3, int64_t)//未实现#defineBINDER_SET_MAX_THREADS_IOW('b', 5, size_t)//设置最大线程数#defineBINDER_SET_IDLE_PRIORITY_IOW('b', 6, int)//未实现#defineBINDER_SET_CONTEXT_MGR_IOW('b', 7, int)//设置binder上下文管理者#defineBINDER_THREAD_EXIT_IOW('b', 8, int)//删除线程信息#define BINDER_VERSION_IOWR('b', 9, struct binder_version)//返回版本


二.binder_thread_write的命令

enum BinderDriverCommandProtocol {//binder命令协议BC_TRANSACTION = _IOW('c', 0, struct binder_transaction_data),//写入请求命令BC_REPLY = _IOW('c', 1, struct binder_transaction_data),//写入回复命令BC_ACQUIRE_RESULT = _IOW('c', 2, int),//未实现BC_FREE_BUFFER = _IOW('c', 3, int),//释放binder_bufferBC_INCREFS = _IOW('c', 4, int),//增加(弱指针)binder_ref计数BC_ACQUIRE = _IOW('c', 5, int),//增加(强指针)binder_ref计数BC_RELEASE = _IOW('c', 6, int),//减少(强指针)binder_ref计数BC_DECREFS = _IOW('c', 7, int),//减少(弱指针)binder_reg计数BC_INCREFS_DONE = _IOW('c', 8, struct binder_ptr_cookie),//BR_INCREFS处理完毕BC_ACQUIRE_DONE = _IOW('c', 9, struct binder_ptr_cookie),//BR_ACQUIRE处理完毕BC_ATTEMPT_ACQUIRE = _IOW('c', 10, struct binder_pri_desc),//未实现BC_REGISTER_LOOPER = _IO('c', 11),//线程已建立BC_ENTER_LOOPER = _IO('c', 12),//线程进入循环BC_EXIT_LOOPER = _IO('c', 13),//线程退出循环BC_REQUEST_DEATH_NOTIFICATION = _IOW('c', 14, struct binder_ptr_cookie),//请求接收binder实体死亡通知BC_CLEAR_DEATH_NOTIFICATION = _IOW('c', 15, struct binder_ptr_cookie),//清除binder实体死亡通知BC_DEAD_BINDER_DONE = _IOW('c', 16, void *),//通知驱动binder实体死亡通知已收到};

 

三.binder_thread_read的命令

enum BinderDriverReturnProtocol {//binder返回协议BR_ERROR = _IOR('r', 0, int),//发生错误BR_OK = _IO('r', 1),//操作完成BR_TRANSACTION = _IOR('r', 2, struct binder_transaction_data),//读到的是请求命令BR_REPLY = _IOR('r', 3, struct binder_transaction_data),//读到的是回复命令BR_ACQUIRE_RESULT = _IOR('r', 4, int),//未实现BR_DEAD_REPLY = _IO('r', 5),//线程或进程死亡BR_TRANSACTION_COMPLETE = _IO('r', 6),//数据传输完成BR_INCREFS = _IOR('r', 7, struct binder_ptr_cookie),//增加(弱指针)binder_ref计数BR_ACQUIRE = _IOR('r', 8, struct binder_ptr_cookie),//增加(强指针)binder_ref计数BR_RELEASE = _IOR('r', 9, struct binder_ptr_cookie),//减少(强指针)binder_ref计数BR_DECREFS = _IOR('r', 10, struct binder_ptr_cookie),//减少(弱指针)binder_ref计数BR_ATTEMPT_ACQUIRE = _IOR('r', 11, struct binder_pri_ptr_cookie),//未实现BR_NOOP = _IO('r', 12),//操作完成BR_SPAWN_LOOPER = _IO('r', 13),//申请更多线程BR_FINISHED = _IO('r', 14),//未实现BR_DEAD_BINDER = _IOR('r', 15, void *),//发送binder实体死亡通知BR_CLEAR_DEATH_NOTIFICATION_DONE = _IOR('r', 16, void *),//清除binder实体死亡通知完成BR_FAILED_REPLY = _IO('r', 17),//回复失败};


 可能存在错误理解,在分析完binder驱动后修正

原创粉丝点击