標籤:
首先建立led驅動的裝置檔案,可以使用cdev_init,register_chrdev_region,cdev_add等建立主裝置號的裝置檔案。步驟如下:
1使用cdev_init初始化cdev
2指定裝置號
3使用cdev_add函數將字元裝置添加到核心中的字元裝置組中
4使用class_creat宏建立struct class
5使用device_creat函數建立裝置檔案
然後卸載led驅動的裝置檔案
{Device_destroy(leds_class,dev_number);
If(leds_class)
Class_destroy(leds_class);
Unregister_chrdev_region(dev_number,DEVICE_NUMBER);
Return;}
Static void leds_exit(void)
{
Leds_destroy_device();
Printk(DEVICE_NAME”\text!\n”);
}
Module_exit(leds_exit);
然後設定寄存器與初始化led驅動,arm處理器有多個寄存器,通過設定不同寄存器的值,設定led引腳狀態、開啟或禁止上拉電路以及控制led的亮和滅。一下幾點需要知道
Led有兩個引腳,GPB0和GPB1
控制led需要通過三個寄存器完成
每一個寄存器可以使用4個位元組
使用GPMCON寄存器的低16位將led的兩個連接埠屬性設為output。
使用GPMDAT寄存器的低4位控制4個led的亮滅。
使用GPMPUD寄存器的低八位分別開啟四個led的上拉電路
然後就是比較重要的控制led,要想完成這一過程,led驅動就必須接受相應的資料。如果通過字串控制,需要使用file_operations.write。如果通過I/O命令控制led,需要使用file_operations.ioctl函數。編寫時需要瞭解幾點:
4個led的狀態用一個長度為4的char數組儲存
如果寫入的字串長度小於4,直接寫入,如果大於4,唯寫前4個
如果寫入的字串小於4,相當於後面的都是0
向GPNMDAT寄存器寫入資料之前最好先讀取GPMDAT當前值
最後進行測試led驅動,方法有一下幾種:
編寫控制命令的通用程式:led驅動有兩種與裝置檔案互動的方式:直接寫入字串資料和I/O控制命令。
使用NDK測試led驅動
使用java測試led驅動
http://www.cnblogs.com/caoyutao/
Android深度探索--HAL與驅動開發----第七章讀書筆記