Android驱动移植初识
目的
因为毕设要到公司去做公司给的题目是:基于Android平台的电梯广告机。Android平台和嵌入式系统的通信是通过CAN总线进行的。具体的硬件是MarsBoard-imx6q火星开发板、Phillip22寸显示器、usb转CAN收发器。虽说是电子专业但是以前是主做MCU和汇编的。对于Android做嵌入式还是没接触过。随着项目的进行,我会写一系列博客来记录曾经遇到的困惑,解决问题的方法,对问题的认识等。用这种方式来记录曾经走过的路。
Android嵌入式基本认识
Android开放但不开源的原因
刚开始的两周,除去专门培训word规范培训和AD6绘制PCB培训剩下的任务就是去Google和Baidu去了解项目的具体要求能力。经过一番搜索原来才知道:做Android驱动基本上和做Linux驱动差不多(其实还要复杂)。Android的内核就是Linux内核,由于为了避开绝对开源Google给Android添加了硬件抽象层(HAL--Hardware Abstarct Level ),就是为了封装硬件具体的逻辑操作。因为Linux内核遵循GPL协议要求必须开源,如果Android完全开源那么硬件山寨就无法想象了,这对硬件厂商是毁灭性的冲击。
Android框架
要做的具体任务
- 工业中常用的通讯协议主要有RS485 以太网 CAN等,由于公司CAN总线做的还不错,所以Android电梯广告机的通信协议采用CAN总线。所以需要一直CAN总线,对于Linux驱动底层在drivers/net/can/底下有好几种CAN总线协议,我们选择的是freescale的Flexcan。关于Android系统编译、开发环境搭建等过程在本人的另篇博文中有所介绍。
- 编译Android内核的过程中执行make menuconfig的时候要去设置好Flexcan驱动(如何设置,此处省略吧)。剩下的任务就是如何去编写硬件抽象层,通过硬件抽象层来访问内核的Flexcan设备。
- 有了硬件抽象层,接下来就是要编写JAVA本地接口,Java本地接口JNI用来联通硬件抽象层和Framework层。关于JNI本人会专门写几篇博文来巩固自己的基础,此处不再赘述。个人理解就是将本地C/C++代码向java进行转换。
- 写完了JNI之后,我们还需要编写AndroidFramework Service,编写服务程序来联通APP调用和JNI。
- 最后还要写一个APP,来进行调用Service--调用JNI--调用HAL---调用CAN驱动。。呵呵好麻烦呀。。Android为了获取数据硬是添上了3层(相比于Linux),可是我们不得不佩服Android的UI接口。用户体验确实很好,而且Android的跨平台也很好。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。