#android #android-binder
#Android #android-binder
Вопрос:
Когда я прочитал исходные коды Android binder.c, который находится по адресу.
/frameworks/native/cmds/servicemanager/binder.c
.
Я в замешательстве по поводу того, где найти реализацию открытого вызова в приведенных ниже кодах, есть ли у кого-нибудь какие-либо идеи, чтобы помочь?
struct binder_state *binder_open(const char* driver, size_t mapsize)
{
struct binder_state *bs;
struct binder_version vers;
bs = malloc(sizeof(*bs));
if (!bs) {
errno = ENOMEM;
return NULL;
}
bs->fd = open(driver, O_RDWR | O_CLOEXEC);
if (bs->fd < 0) {
fprintf(stderr,"binder: cannot open %s (%s)n",
driver, strerror(errno));
goto fail_open;
}
if ((ioctl(bs->fd, BINDER_VERSION, amp;vers) == -1) ||
(vers.protocol_version != BINDER_CURRENT_PROTOCOL_VERSION)) {
fprintf(stderr,
"binder: kernel driver version (%d) differs from user space version (%d)n",
vers.protocol_version, BINDER_CURRENT_PROTOCOL_VERSION);
goto fail_open;
}
bs->mapsize = mapsize;
bs->mapped = mmap(NULL, mapsize, PROT_READ, MAP_PRIVATE, bs->fd, 0);
if (bs->mapped == MAP_FAILED) {
fprintf(stderr,"binder: cannot map device (%s)n",
strerror(errno));
goto fail_map;
}
return bs;
fail_map:
close(bs->fd);
fail_open:
free(bs);
return NULL;
}```
Ответ №1:
Реализация open
происходит в ядре Linux, в частности в подсистеме Android IPC.
Следующая структура содержит указатели на функции для узла связующего устройства (ссылка):
const struct file_operations binder_fops = {
.owner = THIS_MODULE,
.poll = binder_poll,
.unlocked_ioctl = binder_ioctl,
.compat_ioctl = compat_ptr_ioctl,
.mmap = binder_mmap,
.open = binder_open,
.flush = binder_flush,
.release = binder_release,
};
Для open
операции структура содержит указатель на binder_open
(ссылку)
В init_binder_device
этом случае binder_fops
структура присваивается узлу устройства (ссылка).
Комментарии:
1. Я полагаю, вы правы. но Android основан на ядре Linux, теоретически, эти коды должны быть в AOSP, но, похоже, это не соответствует вашему ответу. Кстати, есть ли какая-нибудь статья, в которой объясняется, что такое binder и как он работает полностью?