4个版本
0.2.3 | 2024年3月26日 |
---|---|
0.2.2 | 2024年3月16日 |
0.2.0 | 2024年2月24日 |
0.1.2 |
|
0.1.0 |
|
#203 in Unix APIs
52 下载量/月
用于 2 crates
375KB
9K SLoC
rsbinder
rsbinder 提供了纯Rust实现的crate,使Binder IPC在Android和Linux上都可用。
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 提供以下功能
- crate rsbinder:一个用于实现binder服务/客户端功能的库crate。
- crate rsbinder-aidl:一个从aidl生成rsbinder Rust代码的工具。
- crate rsbinder-tools:为Linux提供CLI工具。
- crate rsbinder-tests:提供类似于Binder ServiceManager的功能。
- crate example-hello:使用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
- Ubuntu Linux - https://github.com/anbox/anbox/blob/master/docs/install.md
构建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