標籤:
LED將為我閃爍:控制發光二極體
一.編寫LED驅動
建立LED驅動的裝置檔案
1.使用cdev_init函數初始化cdev
cdev結構體
struct cdev{
struct kobject kobj;
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};
2.指定裝置號
直接在代碼中指定:使用MKDEV宏將主次裝置號組合成裝置號,使用MAJOR和MINOR宏從裝置號中擷取主次裝置號
動態分配:alloc_chrdev_region函數
3.使用cdev_add函數將字元裝置添加到核心中的字元裝置數組中
指定裝置檔案指標,裝置號和裝置檔案數量。調用cdev_add函數
4.使用class_creat宏建立struct class
5.使用device_creat函數建立裝置檔案
卸載LED驅動的裝置檔案
依次調用device_destroy,class_destroy和unregister_chrdev_region方法
設定寄存器與初始化LED驅動
須知:LED有兩個引腳GPB0和GPB1;
控制LED需要通過3個寄存器來完成;
每一個寄存器可以使用4個位元組;
使用GPMCON寄存器的低16位將LED的兩個連接埠的屬性設為Output;
使用GPMDAT寄存器的低4位控制LED的亮滅;
使用GPMPUD寄存器的低8位分別開啟LED燈的上拉電路。
控制LED
通過字串控制LED:使用命令列方式或通過write函數
通過I/O命令控制LED:通過ioctl函數發出
LED驅動的模組參數
注意:通過module_param_array宏的第三個參數指定數組長度時要使用指標類型的資料;
如果linux驅動含有多個模組參數,參數要用單引號或雙引號括起來;
指定數群組類型的參數值時,逗號前後不能有空格
Android深度探索(卷1)HAL與驅動開發閱讀心得7