Binder 客户端与驱动端通信流程分析——以 acquireWakeLock() 函数为例
发布时间
阅读量:
阅读量
在前一篇文章《Binder客户端和驱动端通信流程实例分析----以acquireWakeLock()函数为例(一)》中,我们详细阐述了亮屏锁WakeLock类的acquire()函数如何将来自应用程序上层的Binder请求逐步传递至framework native层的IPCThreadState类的transact()函数。
IPCThreadState类的transact()函数主要完成以下操作:
1. 调用IPCThreadState::writeTransactionData()函数,将包含Binder请求信息的parcel内容进行拆分与重新组织,并将其封装到一个binder_transaction_data结构体变量中。随后,将命令码cmd以及该结构体数据写入mOut变量。在后续处理过程中,mOut变量会被整合进一个binder_write_read结构体变量中,并通过ioctl()接口传递给Binder驱动;
2. 调用IPCThreadState::waitForResponse()函数,进入一个与Binder驱动进行交互的while循环。该循环的主要代码如下(由于篇幅限制,此处进行了简化处理):
while (1) {
if ((err=talkWithDriver()) < NO_ERROR) break;
全部评论 (0)
还没有任何评论哟~
