我看到许多 Android 内核都没有可加载模块支持,在这种情况下我如何编写和加载驱动程序?
例如,我有一个在 vanilla linux 内核下工作的驱动程序的代码库,我如何将它移植到 Android?
你不能——这就是商用电话不支持模块的确切原因。如果 OEM 禁用模块支持,您别无选择,只能先更换内核。如果您可以只提供一个驱动程序,您将可以立即不受限制地访问手机,而这是 OEM 想要避免的。
如果您谈论的是商用电话和现有的硬件,那么您大概是在谈论通过 USB(或蓝牙或 wifi 等)连接的东西。对于这些,您也许可以使用适当的用户空间 api。例如,在支持 usb 主机的手机/平板电脑上,有一个主机 api,它可以让您访问设备,有点像使用 libusb 的方式,尽管有一些限制。
您当然应该能够获得任何运行 linux 内核的设备的内核源代码;那在内核许可证中。不幸的是,许多供应商发布的速度很慢 - 源代码发布的明显问题是一堆基于芯片组的标签外平板电脑,其制造商显然不向设备制造商提供内核和工具链源,导致手工操作下许可证违规。
但是回到商业硬件,通常(在 Tivo 的传统中)拥有内核源代码并不意味着该设备将允许您安装编译结果,或者即使您设法闪存引导加载程序也愿意执行它它。幸运的是,一些手机制造商在为开发人员和高级用户提供解锁个人或测试设备引导加载程序的方法方面做得越来越好——谷歌自己销售的设备就是典型的例子。