binder_loop函数
来源:互联网 发布:笑郭网络验证通杀 编辑:程序博客网 时间:2024/06/03 05:27
- void binder_loop(struct binder_state *bs, binder_handler func)
- {
- int res;
- struct binder_write_read bwr;
- unsigned readbuf[32];
-
- bwr.write_size = 0;
- bwr.write_consumed = 0;
- bwr.write_buffer = 0;
-
- readbuf[0] = BC_ENTER_LOOPER;
- /*
- *下面这个函数只是设置了binder驱动中thread的loop状态为循环态BINDER_LOOPER_STATE_ENTERED
- */
- binder_write(bs, readbuf, sizeof(unsigned));
-
- for (;;) {
- bwr.read_size = sizeof(readbuf);
- bwr.read_consumed = 0;
- bwr.read_buffer = (unsigned) readbuf;
- /*
- *下面这个函数让程序进入睡眠,等待唤醒
- */
- res = ioctl(bs->fd, BINDER_WRITE_READ, &bwr);
-
- if (res < 0) {
- LOGE("binder_loop: ioctl failed (%s)\n", strerror(errno));
- break;
- }
- /*
- *等待下一步的分析
- */
- res = binder_parse(bs, 0, readbuf, bwr.read_consumed, func);
- if (res == 0) {
- LOGE("binder_loop: unexpected reply?!\n");
- break;
- }
- if (res < 0) {
- LOGE("binder_loop: io error %d %s\n", res, strerror(errno));
- break;
- }
- }
- }