# 主线内核把 C 版 Binder 删了，自己编内核跑安卓容器得先把 Rust 打开吗？

**URL:** <https://www.shiqidu.com/t/topic/1876>\
**Category:** 开发调优\
**Tags:** Android, Linux, Rust\
**Created:** [2026 年11 月 1 日 04:17 UTC](https://www.shiqidu.com/t/topic/1876 "2026-11-01T04:17:51Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

作者： ![shiqidu\_editor](https://www.shiqidu.com/user_avatar/www.shiqidu.com/shiqidu_editor/32/528_2.png) [@shiqidu\_editor](https://www.shiqidu.com/u/shiqidu_editor)\
发布日期： [2026 年11 月 1 日 04:17 UTC](https://www.shiqidu.com/t/topic/1876/1 "2026-11-01T04:17:51Z")

</div>

drivers/android 目录在这一轮合并窗口里瘦了一大圈：binder.c、binder\_alloc.c、binderfs.c 这几个 C 文件整份删掉，留下的是 binder/ 子目录里的 Rust 实现。Carlos Llamas 9 月中旬发的补丁就叫「[binder: rm -f binder.c](https://github.com/torvalds/linux/commit/fd2bc059ed466bdd95347a4f7891d150d94e7de2)」。这次一共改了 20 个文件，新增 9 行，删掉 11470 行。

10 月 25 日，Linus 合并了 Greg KH 的 char-misc-7.4-rc1 拉取请求（[合并提交](https://github.com/torvalds/linux/commit/330517c63aa9b48227b6ab45f01003effac77ae4)），说明里列的第一条亮点是删掉 C 版 binder，原话是「the rust version is stable and will be used going forward in a few billion devices」。写这帖时 torvalds/linux 上最新的 tag 还是 v7.3，7.4-rc1 还没打出来，不过这批改动已经在主线里了。

## Kconfig 最后长什么样

补丁邮件里的版本是给 ANDROID\_BINDER\_IPC 加了一行 `depends on RUST`，同时删掉了原来的 ANDROID\_BINDER\_IPC\_RUST。没过几天，Greg 又补了一个提交「[binder: Fix up Kconfig dependancy due to removal of .c code](https://github.com/torvalds/linux/commit/315860c4f912990c75ef228775ea8871fc5bcc9a)」。理由是原来开着 Rust 版的配置升级后会编不出 binder，所以选项名改回了带 \_RUST 后缀的版本，Greg 说这个发布周期先保持这样。提交说明还提了一句：以后要是想去掉这个后缀，改名时会重新提示大家选一次。主线里现在的 drivers/android/Kconfig 是：

```auto
config ANDROID_BINDER_IPC_RUST
	bool "Android Binder IPC Driver"
	depends on MMU
	depends on NET
	depends on RUST
	default n

```

所以 Binder 确实依赖 Rust，只是选项名是 ANDROID\_BINDER\_IPC\_RUST，不是很多转述里写的 ANDROID\_BINDER\_IPC。几个连带变化：

- ANDROID\_BINDERFS 这个选项没了，Rust 版的 binderfs（rust\_binderfs.c）直接编进 binder.o，跟着 ANDROID\_BINDER\_IPC\_RUST 走。
- ANDROID\_BINDER\_DEVICES 还在，默认值仍是 “binder,hwbinder,vndbinder”，依赖改成了 ANDROID\_BINDER\_IPC\_RUST。
- 原来的 ANDROID\_BINDER\_ALLOC\_KUNIT\_TEST 跟着 C 代码一起删了。

## 谁会被坑到

安卓容器离不开 Binder。按内核的 binderfs 文档，每挂一个 binderfs 实例就有一套独立的 binder 设备。新实例里起初只有 binder-control，用来按需申请设备，多个安卓实例靠这个各用各的。内核里没了 Binder，容器那一层再怎么配也起不来。

以前用 C 版的人，配置里写的是 CONFIG\_ANDROID\_BINDER\_IPC=y 加 CONFIG\_ANDROID\_BINDERFS=y。这两个符号在新内核里都不存在了，新选项又是 default n。旧 .config 直接沿用的话，编出来的内核大概率没有 Binder，要到起安卓容器时才发现。原来就开着 Rust 版的配置，选项名没变，受影响小一些，前提是 Rust 支持本身还开着。

手上的源码树是哪个状态，翻一下 drivers/android/Kconfig 就知道：还能看到 ANDROID\_BINDERFS 和带 !ANDROID\_BINDER\_IPC 条件的 Rust 选项，说明是删 C 代码之前的树。只剩一个依赖 RUST 的 ANDROID\_BINDER\_IPC\_RUST，说明是合并之后的。跟着主线追 rc 的人，升级前把自己的配置片段对一遍，比编完开机再排查省事。

各家的内核开不开 Rust、什么时候跟进 7.4，这里没法替发行版说。用发行版内核的人暂时不用动手，等新内核包出来，照上面的办法查一下配置里有没有 CONFIG\_ANDROID\_BINDER\_IPC\_RUST 就行。

## 检查和准备

想看当前内核的配置，开了 IKCONFIG\_PROC 的话可以 `zgrep BINDER /proc/config.gz`，出现 CONFIG\_ANDROID\_BINDER\_IPC\_RUST=y 就是 Rust 版。binderfs 能不能用，看 /proc/filesystems 里有没有 binder，或者照内核文档挂一下：

```auto
mkdir /dev/binderfs
mount -t binder binder /dev/binderfs

```

挂上后里面应该只有一个 binder-control。挂载报错、文件系统列表里也找不到 binder，多半是内核没编进去，回头查配置。

要自己编的话，内核文档《[Quick Start](https://docs.kernel.org/rust/quick-start.html)》讲了怎么装工具链。比如 Debian 13 是 `apt install rustc rust-src bindgen rustfmt rust-clippy`，Fedora 是 `dnf install rust rust-src bindgen-cli rustfmt clippy`。装完在源码目录跑 `make LLVM=1 rustavailable`，Kconfig 为什么认不出 Rust，这条命令会给出原因。工具链齐了，General setup 里才会出现 Rust support（CONFIG\_RUST）。文档推荐整套 LLVM 来编，GCC 只在部分配置下能用，而且还在实验阶段。

还有一类坑来自配置本身。init/Kconfig 里 RUST 有一串限制条件，比如不能开 RANDSTRUCT 和 GCC\_PLUGIN\_RANDSTRUCT，开了 MODVERSIONS 就得同时有 GENDWARFKSYMS。加固过的配置文件，可能得先在这里松一松，Rust support 才点得出来。另外 RUST 还依赖 HAVE\_RUST，架构本身不支持的话，工具链装得再全也没用。

内核自带的 binderfs 自测配置也跟着改了，tools/testing/selftests/filesystems/binderfs/config 现在写的是 CONFIG\_ANDROID\_BINDER\_IPC\_RUST=y，自己维护配置片段的，可以拿它当参照。

有在桌面 Linux 上跑安卓容器的吗？你们用的发行版内核，Rust 开了没有？
