Android系統下CAN總線(xiàn)驅動(dòng)程序的設計與實(shí)現
2 CAN總線(xiàn)驅動(dòng)程序的設計
2.1 Android操作系統驅動(dòng)原理
Android雖然使用了Linux內核,但應用程序是用Java語(yǔ)言開(kāi)發(fā)的,所以應用程序在調用設備驅動(dòng)不能像Linux應用程序那樣使用系統調用,必須用Java虛擬機的JNI的本地(Native)方法。另一方面,Android要成為一個(gè)通用性強的平臺,必須加強它的可移植性,這也是在A(yíng)ndr oid架構添加一個(gè)(HAL)硬件抽象層的原因,目的是為設備的調用提供一個(gè)更高級的封裝。圖3所示為Android驅動(dòng)程序的技術(shù)結構。本文引用地址:http://dyxdggzs.com/article/148042.htm
HAL Stub以*.so庫的形式存在,在整個(gè)驅動(dòng)架構中,它是驅動(dòng)運行在用戶(hù)空間的一部分,它往上為Dalvik虛擬機提供硬件設備的抽象接口,往下通過(guò)系統調用與Linux內核中的驅動(dòng)程序交互數據,在這個(gè)過(guò)程中HAL可以對驅動(dòng)程序的數據進(jìn)行處理,即在Linux內核中的驅動(dòng)程序只需提供一個(gè)與硬件設備傳輸數據的功能,而具體的操作可以由HAL完成。Android下CAN總線(xiàn)驅動(dòng)程序的實(shí)現,不但要在Linux內核中添加CAN驅動(dòng)模塊,還必須在用戶(hù)空間和應用框架中添加對應的支持。
2.2 CAN驅動(dòng)程序實(shí)現流程
主控制器S5PV210通過(guò)其自身的SPI接口實(shí)現與MCP2515的連接,若要使平臺正常工作,軟件的實(shí)現是必需的。首先要確保S5PV210的SPI口可以正常收發(fā)數據,然后利用SPI口對MCP2515的寄存器進(jìn)行設置。CAN驅動(dòng)程序流程圖如圖4所示,第一步是實(shí)現S5PV210的SPI總線(xiàn)的加載和聲明;第二步是Linuxkernel中CAN驅動(dòng)的實(shí)現,包括MCP2515的初始化、MCP2515的讀寫(xiě)、CAN驅動(dòng)的加載。第三步是Android HAL層的調用。
3 CAN總線(xiàn)驅動(dòng)程序的實(shí)現
3.1 SPI總線(xiàn)加載和聲明
系統的CAN總線(xiàn)設備通過(guò)S5PV210的SPI總線(xiàn)連接,因此,需要設計SPI線(xiàn)驅動(dòng)完成數據接收與發(fā)送。關(guān)于SPI總線(xiàn)驅動(dòng)在Linux內核中已有良好的支持,加載并聲明SPI總線(xiàn)就可以直接使用。Linux內核使用包裝后的抽象設備驅動(dòng)spi_driver,間接與原始設備驅動(dòng)建立聯(lián)系,并最終通過(guò)調用driver_register來(lái)注冊原始設備驅動(dòng),即只需要在內核提供的spi_driver上修改調試,大幅提高了程序效率和可移植性。
這樣在結構體mop2515_driver里完成了對MCP2515驅動(dòng)函數probe,remove的賦值。然后就可以通過(guò)SPI對MCP2515的寄存器進(jìn)行設置來(lái)實(shí)現CAN總線(xiàn)驅動(dòng)程序。
評論