混雜裝置驅動主要用於一些功能簡單的器件,將之整合到一起,major為10,minor一般為動態分配,其實實際的還是字元裝置驅動。
比常規字元裝置驅動更好的地方就是在於它簡化了編寫過程,將一些步驟整合到了一起,使**更加簡潔,可讀性更高,也便於維護和移植。
以下**為超聲波感測器的驅動**
1.超聲波srf05感測器,在這裡只用了vcc、trig、echo、gnd四個腳
a.vcc 接5v電源
b.trig接主機板輸出端,主要是傳送啟動訊號
c.echo接輸入端,主要檢測這個腳傳回來的值進行距離計算
d.gnd接地
使用注意:如果帶電操作,一定要保證先接地,否則極易損壞器件
2.時序圖
a.觸發訊號為至少維持20us的高電平訊號,需要控制trig引腳來做啟動
b.模組會發出8個40khz的脈衝訊號,並檢測回波
c.如果有回波,就輸出迴響訊號,迴響訊號會通過echo引腳檢測,檢測到後做相應的處理
d.計算的公式為
3.以下為驅動**,linux驅動**需要從下向上看
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define device_name "ultra_drv"
#define gpioc_cfg_ultra_trig (pad_gpio_b + 28) //trig引腳
#define gpioc_cfg_ultra_echo (pad_gpio_b + 29) //echo引腳
static int echo_data_in(void)
static int ultra_read_data(void)
distance = ((time_cnt * 3) / 2); //當echo拉低的時候,**測距完成,開始計算
}return (distance);
}int ultra_drv_open(struct inode *inode, struct file *filp)
ssize_t ultra_drv_read(struct file *filp, char __user *user_buf, size_t size, loff_t *offset)
static struct file_operations ultra_drv_fops = ;
static struct miscdevice ultra_drv_miscdev = ;
static int __init ultra_drv_init(void)
ret = misc_register(&ultra_drv_miscdev); //註冊混雜裝置
if(ret < 0)
printk("<4>" "ultra drv init\n");
return 0;
}static void __exit ultra_drv_exit(void)
module_init(ultra_drv_init);
module_exit(ultra_drv_exit);
module_author("ayl0521@sina.com"); //如有問題,可郵件**
module_description("ultrasonic drv");
module_license("gpl");
嵌入式linux字元裝置驅動
arm linux 驅動 抵岸科技 1.我們需要先呼叫register chrdev region 或 alloc chrdev region 來向系統申請裝置號 int register chrdev region dev t first,unsigned int count,char name ...
嵌入式linux字元裝置驅動
1.我們需要先呼叫register chrdev region 或 alloc chrdev region 來向系統申請裝置號 int register chrdev region dev t first,unsigned int count,char name 函式通過已知的裝置號first來註冊...
嵌入式Linux裝置驅動開發 1
使用者程序是通過裝置檔案來與實際的硬體打交道。每個裝置檔案都有其檔案屬性 c b 如表示是字元裝置還是塊裝置。另外每個檔案都有兩個裝置號,第乙個是主裝置號,用於標識驅動程式 第二個是從裝置號,用於標識使用同一裝置驅動的不同的硬體裝置。裝置檔案的主裝置號必須與裝置驅動程式在登記時申請的主裝置號一致,否...