android - 是否可以为 Android 手机开发和运行设备驱动程序?

标签 android c linux-device-driver galaxy

我有一部 Galaxy S3,它是一款安卓手机。我想为它开发一个 USB 设备驱动程序。 所以我制作了一个使用 Galaxy S3 Linux 内核编译的简单驱动程序。但是我不能在没有 root 权限的情况下执行 'insmod' 命令。

是否可以为Android手机开发设备驱动程序?

此外,驱动源代码是典型的字符设备驱动示例,具有open()、close()、read()、write()函数。

错误信息是:

  1. insmod:权限被拒绝
    (没有root权限)

  2. insmod: 模块格式无效
    (通过'rooting'获得root权限。我认为内核因为'rooting'而被更改。并且设备驱动程序使用三星发布的原始Galaxy S3 Linux内核编译。)

最佳答案

是的,可以为任何 Android 手机开发设备驱动程序,只要您拥有:
- 访问特定手机的 Linux 内核源代码。
- 可以访问设备上的 root shell。

需要访问内核源代码,以便可以针对该特定内核构建内核模块。需要根 shell 来插入内核模块。

关于 Android 手机上的 USB 主机支持,某些手机在内核中内置了 USB 主机支持,并将支持 USB 主机模式。但是需要有 proper USB-cables连接外围设备。

还要克服错误,

insmod: invalid module format

您可能想尝试使用 --force-vermagic 标志,如下所示:

insmod --force-vermagic <module.ko>

正如您猜对的那样,这实际上是由于设备上运行的内核与构建模块所针对的内核之间的版本号不匹配而导致的错误。 更多详情 here .

关于android - 是否可以为 Android 手机开发和运行设备驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11624491/

相关文章:

linux-kernel - Linux 设备驱动程序 - 线程化 IRQ 处理程序

android - 如何避免总是从 Google Drive 加载缓存的应用数据

android - 在 sql 数据库和 json 响应之间比较数据的有效方法

c - 在 Linux 上确定陈旧的 Samba 安装的最快方法

c - const char* 值将存储在哪里。什么是堆栈崩溃和堆崩溃?

linux - 如何构建使用自定义库的外部 linux 模块

linux - Linux设备驱动程序中 "pointer to device"的含义

android - Android Studio 生成 JavaDoc 时出错

android - APK app-debug-unaligned.apk 打包过程中文件重复

c - 如何避免在控制台上打印来自 syslog 的广播消息