4个版本

0.2.3 2024年3月26日
0.2.2 2024年3月16日
0.2.0 2024年2月24日
0.1.2 2024年2月15日
0.1.0 2024年1月27日

#203 in Unix APIs

Download history 1/week @ 2024-05-30 8/week @ 2024-07-04 43/week @ 2024-07-25 9/week @ 2024-08-01

52 下载量/月
用于 2 crates

Apache-2.0

375KB
9K SLoC

rsbinder

rsbinder 提供了纯Rust实现的crate,使Binder IPC在Android和Linux上都可用。

Rust

Binder IPC:Linux上可用,潜力巨大

尽管Android的Binder IPC机制早在2015年就被合并到Linux内核中,但其在大规模Linux生态系统中的采用仍然有限。该项目旨在通过提供专门针对Linux环境使用Binder IPC的库和工具来解决这一问题。

采用率低的一个关键原因是缺乏针对Linux世界优化的现成工具和库。该项目通过利用Rust在高效线程利用方面的优势来应对这一挑战,这对于最大程度提高Linux上Binder IPC性能至关重要。

然而,该项目专注于纯Rust实现。如果您对基于C++的Linux Binder IPC感兴趣,请考虑查看binder-linux项目。

尽管该项目专注于在Linux环境中支持Binder IPC,但它也提供了与Android Binder IPC的兼容性。与Android Binder的兼容性目标

当前开发状态

rsbinder 仍处于早期开发阶段,尚不适合产品开发。

概述

rsbinder 提供以下功能

构建和测试的先决条件

启用Linux的binder

  • Linux内核必须支持binderfs。请检查以下内核配置。
CONFIG_ASHMEM=y
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_BINDERFS=y
  • Arch Linux - 安装linux-zen内核。Zen内核已包含BinderFS。
$ pacman -S linux-zen

构建rsbinder

构建所有rsbinder crate。

$ cargo build

运行rsbinder工具

  • 运行 rsb_device 命令以创建binder设备文件。
$ sudo target/debug/rsb_device binder
  • 运行 rsb_hub。它是一个binder服务管理器。
$ cargo run --bin rsb_hub

测试Linux的binder

  • 运行 hello_service
$ cargo run --bin hello_service
  • 运行 hello_client
$ cargo run --bin hello_client

交叉编译到Android设备

与Android Binder的兼容性目标

相互通信

由于两者的底层架构存在根本差异,rsbinder和Android Binder之间的完整API兼容性不可用。然而,这两个API具有高度相似性,最小化了熟悉其中任一系统的开发者的学习曲线。

API差异

由于底层架构的基本差异,rsbinder和Android Binder之间不存在完整的API兼容性。尽管如此,这两个API具有高度相似性,最大程度地降低了熟悉任一系统的开发者的学习曲线。

待办事项

  • 实现Binder crate。
  • 实现AIDL编译器。
  • 实现ParcelFileDescriptor。
  • 将Android test_service和test_client移植并通过测试用例。
  • 支持Tokio异步。
  • (进行中) 为Linux实现服务管理器(rsb_hub
  • (进行中) 删除所有todo!()和unimplemented!()宏。
  • (进行中) 在Android上与Binder进行兼容性测试。
  • 增强AIDL代码生成器的错误检测。
  • 支持类似selinux和AppArmor的强制访问控制。
  • 支持AIDL版本和哈希。

许可证

rsbinder采用Apache许可证版本2.0

注意

rsbinder中的许多源代码已通过引用或参考Android的binder实现进行开发。

依赖项

~4–12MB
~126K SLoC