您的位置:首页 > 移动开发 > Android开发

【android】binder机制 binder协议

2013-02-03 10:14 309 查看
(关于_IOWR,_IOW,_IOR,_IO请参考linux命令码(_IO宏) )

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

#define BINDER_WRITE_READ   	_IOWR('b', 1, struct binder_write_read)	//读写命令
#define	BINDER_SET_IDLE_TIMEOUT	_IOW('b', 3, int64_t)			//未实现
#define	BINDER_SET_MAX_THREADS	_IOW('b', 5, size_t)			//设置最大线程数
#define	BINDER_SET_IDLE_PRIORITY_IOW('b', 6, int)			//未实现
#define	BINDER_SET_CONTEXT_MGR	_IOW('b', 7, int)			//设置binder上下文管理者
#define	BINDER_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_buffer
BC_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驱动后修正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息