混雜裝置也是一種字元裝置,主裝置號固定為10。相對於普通字元裝置驅動,它不需要自己去生成裝置檔案。
1、宣告使用的標頭檔案
#include
2、定義乙個混雜裝置:
static struct miscdevice miscdevice = ;
3、註冊混雜裝置:
misc_register(&miscdevice) //成功返回0
4、登出混雜裝置:
misc_deregister(&miscdevice);
在驅動中使用外部中斷
1、宣告標頭檔案
#include
#include
2、申明中斷處理程式
static irqreturn_t handler(int irq,void *dev_id)
中斷處理程式不能使用者空間傳送或接收資料,以及使用引起阻塞或排程的函式。
在中斷處理函式中分配記憶體要使用gfp_atomic標誌,避免中斷處理函式進入睡眠。
3、註冊中斷
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,const char *name, void *dev) //成功返回返回0
irq:中斷號
handler:中斷處理程式
flags:與中斷相關的標誌
irqf_trigger_rising:上公升沿觸發
irqf_trigger_falling:下降沿觸發
irqf_trigger_high:高電平觸發
irqf_trigger_low:低電平觸發
irqf_sample_random:為系統隨機發生器提供支援
irqf_shared:中斷可在裝置間共享
irqf_disabled:是否快速中斷
name:中斷名稱
dev:主要用於共享中斷,可通過該引數向中斷處理程式傳遞裝置號或其它引數
4、登出中斷:
free_irq(unsigned int irq, irq_handler_t handler)
5、其它:
disable_irq(unsigned int irq)
enable_irq(unsigned int irq)
輸入子系統
input子系統:
1、標頭檔案:
#include
#include
2、申明
static struct input_dev *input_dev
3、初始化
input_dev = input_allocate_device();
input_dev->name = "名稱";
input_dev->id.bustype = bus_host; //匯流排型別
bus_pci
bus_isapnp
bus_usb
bus_hil
bus_bluetooth
bus_virtual
bus_isa
bus_i8042
bus_xtkbd
bus_rs232
bus_gameport
bus_parport
bus_amiga
bus_adb
bus_i2c
bus_host
bus_gsc
bus_atari
input_dev->id.vendor = **商**;
input_dev->id.version = 版本;
set_bit(ev_key,input_dev->evbit); //支援按鍵事件型別
ev_key :按鍵
ev_rel :相對座標
ev_abs:絕對座標
ev_snd:聲音
ev_ff:力反饋
... ...
set_bit(key_a,input_button->keybit); //設定支援按鍵a
4、註冊輸入裝置
input_register_device(struct input_dev *dev);
5、報告輸入事件
input_report_key(struct input_dev *dev, unsigned int code, int value)5、登出輸入裝置code:事件**,可在input.h中查詢相關值
value:事件值,如果是按鍵型別,按下為1,鬆開為0
事件同步,告知input core,驅動已發出一次完整的報告。
input_sync((struct input_dev *dev)
input_unregister_device(struct input_dev *dev);釋放裝置記憶體
input_free_device(struct input_dev *dev);
linux 混雜裝置miscdevice
miscdevice混雜裝置 miscdevice混雜裝置是字元裝置的一種,它們共享乙個主裝置號 10 但次裝置號不同,所有混雜裝置形成乙個鍊錶,對裝置發給你問時核心根據次裝置號查詢到相應的miscdevice裝置。這樣做的好處,節約主裝置號,將某些裝置用鍊錶的形式鏈結在一起,最後通過查詢次裝置區分...
linux混雜裝置驅動
在linux系統中,存在一類字元裝置,它們擁有相同的主裝置號 10 但次裝置號不同,我 們稱這類裝置為混雜裝置 miscdevice 所有的 混雜裝置形成乙個鍊錶,對裝置訪問時核心根據 次裝置號查詢到相應的混雜裝置。linux中使用struct miscdevice來描述乙個混雜裝置。struct ...
Linux核心混雜裝置驅動
1.1混雜裝置驅動特點 本質上還是一類字元裝置,在驅動軟體上,混雜裝置的主裝置號已經由核心指定主裝置號為10 各個混雜裝置個體通過次裝置號來區分 1.2linux核心描述混雜裝置的資料結構 struct miscdevice 作用 描述混雜裝置 成員 minor 混雜裝置對應的次裝置號,切記主裝置號...