Android 2.3.7移植USB Accessory驱动初探
需积分: 12 75 浏览量
更新于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移植的宝贵经验和参考。
2013-12-23 上传
315 浏览量
2024-01-28 上传
2023-05-30 上传
2023-03-28 上传
2023-05-09 上传
2023-08-31 上传
2023-06-07 上传
小炸毛周黑鸭
- 粉丝: 23
- 资源: 2万+
最新资源
- 解决Eclipse配置与导入Java工程常见问题
- 真空发生器:工作原理与抽吸性能分析
- 爱立信RBS6201开站流程详解
- 电脑开机声音解析:故障诊断指南
- JAVA实现贪吃蛇游戏
- 模糊神经网络实现与自学习能力探索
- PID型模糊神经网络控制器设计与学习算法
- 模糊神经网络在自适应PID控制器中的应用
- C++实现的学生成绩管理系统设计
- 802.1D STP 实现与优化:二层交换机中的生成树协议
- 解决Windows无法完成SD卡格式化的九种方法
- 软件测试方法:Beta与Alpha测试详解
- 软件测试周期详解:从需求分析到维护测试
- CMMI模型详解:软件企业能力提升的关键
- 移动Web开发框架选择:jQueryMobile、jQTouch、SenchaTouch对比
- Java程序设计试题与复习指南