新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Android系统下CAN总线驱动程序的设计与实现

Android系统下CAN总线驱动程序的设计与实现

作者:时间:2013-04-25来源:网络收藏

2
2.1 操作驱动原理
虽然使用了Linux内核,但应用程序是用Java语言开发的,所以应用程序在调用设备驱动不能像Linux应用程序那样使用调用,必须用Java虚拟机的JNI的本地(Native)方法。另一方面,要成为一个通用性强的平台,必须加强它的可移植性,这也是在Andr oid架构添加一个(HAL)硬件抽象层的原因,目的是为设备的调用提供一个更高级的封装。图3所示为Android的技术结构。

本文引用地址:http://www.eepw.com.cn/article/148042.htm

c.JPG


HAL Stub以*.so库的形式存在,在整个驱动架构中,它是驱动运行在用户空间的一部分,它往上为Dalvik虚拟机提供硬件设备的抽象接口,往下通过调用与Linux内核中的交互数据,在这个过程中HAL可以对驱动程序的数据进行处理,即在Linux内核中的驱动程序只需提供一个与硬件设备传输数据的功能,而具体的操作可以由HAL完成。Android下驱动程序的,不但要在Linux内核中添加驱动模块,还必须在用户空间和应用框架中添加对应的支持。
2.2 CAN驱动程序流程
主控制器S5PV210通过其自身的SPI接口与MCP2515的连接,若要使平台正常工作,软件的实现是必需的。首先要确保S5PV210的SPI口可以正常收发数据,然后利用SPI口对MCP2515的寄存器进行设置。CAN驱动程序流程图如图4所示,第一步是实现S5PV210的SPI的加载和声明;第二步是Linuxkernel中CAN驱动的实现,包括MCP2515的初始化、MCP2515的读写、CAN驱动的加载。第三步是Android HAL层的调用。

d.JPG



3 CAN总线驱动程序的实现
3.1 SPI总线加载和声明
系统的CAN总线设备通过S5PV210的SPI总线连接,因此,需要SPI线驱动完成数据接收与发送。关于SPI总线驱动在Linux内核中已有良好的支持,加载并声明SPI总线就可以直接使用。Linux内核使用包装后的抽象设备驱动spi_driver,间接与原始设备驱动建立联系,并最终通过调用driver_register来注册原始设备驱动,即只需要在内核提供的spi_driver上修改调试,大幅提高了程序效率和可移植性。
这样在结构体mop2515_driver里完成了对MCP2515驱动函数probe,remove的赋值。然后就可以通过SPI对MCP2515的寄存器进行设置来实现CAN总线驱动程序。

尘埃粒子计数器相关文章:尘埃粒子计数器原理


评论


相关推荐

技术专区

关闭