Android 2.3.7移植USB Accessory驱动初探
需积分: 12 5 浏览量
更新于2024-08-13
收藏 58KB PPT 举报
"本文主要介绍了如何进行Android USB Accessory的移植工作,特别是在Android 2.3.7版本上的实践过程。作者首先从Android 4.0的代码开始研究,因为该版本的USB Accessory功能已经相对成熟。然而,实际目标平台是基于Android 2.3.7的ATB1005电路板,因此需要对内核进行相应的修改和移植。"
在Android USB Accessory移植的过程中,作者遇到了以下关键步骤和问题:
1. **代码研究**:作者开始从Android 4.0的源码中学习USB Accessory的功能实现,尽管此版本的代码较为完善,但由于实际使用的是Android 2.3.7,因此4.0的代码只能作为参考。
2. **内核驱动缺失**:在ATB1005的内核代码中未找到USB Accessory的驱动。考虑到可能是版本差异,作者查阅了Android 4.0(内核3.0.8)的代码,发现官方已支持USB Accessory。
3. **移植内核驱动**:作者得到了一个名为`f_accessory.c`的内核驱动文件,将其放入`drivers/usb/gadget`目录下,并相应地修改了`Kconfig`和`Makefile`,完成初步的移植。
4. **编译问题**:在编译过程中遇到头文件`linux/f_accessory.h`缺失以及结构体元素名称变化的问题(如`hidden`变为`disabled`)。通过修改解决了这些问题,使编译得以通过。
5. **功能实现**:在修复编译问题后,虽然能通过编译,但功能并未正常实现。为了解决这个问题,作者修改了`arch/arm/mach-xxx/board-device.c`,添加了关于USB Accessory的描述,使得功能看似可以实现。
6. **调试与问题**:在替换内核并重启后,系统并未按照预期弹出对话框或应用。作者通过分析framework代码和检查uevent日志,发现没有正确的uevent被触发。对比Android 4.0和OK6410的内核,发现可能的原因是设备注册时机和uevent触发条件的不同。
7. **问题分析与解决**:作者注意到在Android 4.0中,只有在与USB Accessory设备成功通信后才会注册设备并发送uevent。而在当前移植的内核中,可能缺少了这个关键步骤。因此,需要进一步分析`android_enable_function`函数,寻找触发change事件的方法。
整个移植过程展示了Android USB Accessory在不同版本间的兼容性挑战,以及在实际硬件平台上的适配问题。作者通过逐步分析、比对代码和调试,力求在Android 2.3.7上实现USB Accessory功能。这为其他开发者提供了关于Android系统USB Accessory移植的宝贵经验和参考。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-05-13 上传
2023-08-31 上传
2021-06-06 上传
2021-09-30 上传
2013-12-23 上传
小炸毛周黑鸭
- 粉丝: 25
- 资源: 2万+
最新资源
- SVR:简单向量回归-Udemy
- AquariumHoodLEDController
- Code,java论坛源码,java消息队列订单
- TRIDIEGS:求对称三对角矩阵的特征向量的特征值。-matlab开发
- get_html_source_gui:获取网页源代码GUI代码与重组程序
- json-builder:json-parser的序列化副本
- 参考资料-附件1-9-补充协议-新增.zip
- 共享计时器:一种Web应用程序,您可以在其中创建并与其他人共享计时器。 建立在React Hooks和Firebase之上
- spotify_battle
- maistra-test-tool:在OpenShift上运行maistra任务的测试工具
- mobi_silicon
- CrawlArticle:基于文字密度的新闻正文提取模块,兼容python2和python3,替换新闻网址或网页开源即可返回标题,发布时间和正文内容
- uu,java源码学习,springboot的源码是java
- regexp_parser:Ruby的正则表达式解析器库
- Get15
- Mary Poppins Search-crx插件