Linux 混雜裝置 外部中斷和輸入子系統

2021-08-26 08:55:58 字數 2513 閱讀 5603

混雜裝置也是一種字元裝置,主裝置號固定為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)

code:事件**,可在input.h中查詢相關值

value:事件值,如果是按鍵型別,按下為1,鬆開為0

事件同步,告知input core,驅動已發出一次完整的報告。

input_sync((struct input_dev *dev)

5、登出輸入裝置

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 混雜裝置對應的次裝置號,切記主裝置號...