Linux學習二, 中斷編程和字符設備驅動

Linux內核提供了一組接口用於操作機器上的中斷狀態,提供了申請與釋放系統中觀、使能和評比中斷的功能,都是與體系結構相關,可以在<asm/system.h>和《asm/irq.h》



二、字符設備驅動結構

編寫一個使用的字符設備驅動之前,需要了解字符設備設計的一些模式以及相應的數據結構。例如,主、次設備號。

1、設備號;主設備號表示設備的烈性,與一個確定的驅動對應,次設備號由內核使用。內核用dev_t 《linux/types.h》來保存設備編號;我們可以使用兩個宏來獲得設備的主、次設別編號:MAJOR(dev_t  dev_id)     MINOR(dev_t dev_id);   將主次設備號轉換爲dev_t類型可以使用下面的宏: MKDEV(int major, int minor);

2、分配設備號; 建立字符設備前,首先需要申請設備號,分別爲靜態申請和動態申請兩種方法, 都包含在頭文件中,

int register_chrdev_region(dev_t  first, unsigned int count,  char *name); firsr 爲設備編號起始範圍,count是所請求的連續設備編號的個數,

int alloc_chrdev_region(dev_t *dev, unsigned  firstminor, int count, char *name); dev_t 用於保存申請成功後第一個動態分配的設備號,fristminor是請求使用的第一個次設備號,其餘參數一樣;

釋放:void unregister_chrdev_region(dev_t from, unsigned count);


3、設備號分配模型

static int mem_major =251;  //一般定義爲全局變量

int  result;

   dev_t devno=MKDEV(men_major, 0);

          if(mem_major)

                        result= register_chrdev_region(devno,1, “mymem”);

   else{        result = alloc_chrdev_region(&devno, 0, 1, "mymem");               mem_major=MAJOR(devno);  }

  if(result<0)   return  result;

字符設備驅動中涉及file_operation數據結構,file結構,  inode結構着3個重要的數據結構;


字符設備註冊的詳細步驟; 設備號,  分配設備號, 定義並初始化file_operation結構體;

file_operations 結構體用於連接設備號和驅動程序的操作。該結構體內部包含一組函數指針,這些函數用來實現系統調用;通常需要註冊如下函數

struct module *owner :用來指向擁有該結構體的模塊

ssize_t read(struct file *filp, char __user *buf, size_t mount, loff_t *f_ops);用來讀取設備數據,filp爲文件屬性結構體指針,buf爲用戶態函數使用的字符內存緩衝,count爲要讀取的數據數;f_ops爲文件指針的偏移量;ssize_t write(struct file *filp. const char __user *buf,size _t count, loff_t *f_ops)用來向設備輸入數據;

int open(struct inode *inode, struct file *):用來打開一個設備;

int release(struct inode *inode , struct file *)  關閉設備;


內核內部使用stuct cdev結構來表示字符設備,





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章