建立字元裝置驅動

2021-08-19 01:38:28 字數 2136 閱讀 9548

需要定義乙個字元裝置,裡面有字元裝置相關的方法

struct file_operations cdev_fops = ;

struct gyo_struct gyostruct;

申請裝置號

int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,const char *name)

###dev_t *dev:dev_t 型別的引數 eg:dev_t devno  傳參->&devno;

###unsigned baseminor:第乙個次裝置號,一般填0

###unsigned count:裝置數量,按需要填,乙個就寫 1

###const char *name:裝置名字,好像隨便取,我也不知道去哪找~ eg:"char devno"

ret = alloc_chrdev_region(&gyostruct.devno,0,1,"gyro devno");

if(ret < 0)

字元裝置 建立物件,然後初始化該物件

void cdev_init(struct cdev *cdev, const struct file_operations *fops)    /*初始化  屬性 方法*/

###struct cdev *cdev:需要乙個cdev型別的結構體,eg:struct cdev cdev_obj  傳參->&m_cdev;

### const struct file_operations *fops:需要乙個file_operations型別的結構體,裡面存有屬性和方法eg:struct file_operations cdev_fops 傳參->&cdev_fops

int cdev_add(struct cdev p, dev_t dev, unsigned coun

t)        /*將字元裝置物件新增到核心*/

cdev_init(&gyostruct.cdev_obj,&cdev_fops);    /*初始化*/

ret = cdev_add(&gyostruct.cdev_obj,gyostruct.devno,1);    /*將我們之前獲得裝置號和裝置號長度填充到cdev結構中*/

if(ret <0)

字元裝置 第三步, 建立檔案節點   在/sys/class/ 能找到class_create函式name的資料夾

#define class_create(owner, name)這是個巨集,動態建立裝置的邏輯類,並完成部分欄位的初始化,然後將其新增到核心中

###owner:這是啥呀,我也不知道,一般都填的this_module

###name:建立字元裝置的檔案節點,可以在

/sys/class/

找到gyostruct.cdev_cls = class_create(this_module,"gyos char");

if(!gyostruct.cdev_cls)

裝置節點的建立

struct device *device_create(struct class *class, struct device *parent,

dev_t devt, void *drvdata, const char *fmt, ...)

###struct class *class:要乙個struct class型別的引數 eg:struct class *cls 傳參->cls

###struct device *parent:爸爸指標嗎,這個引數我也不知道耶,填個null

###dev_t devt:看下面我用的然後對照下結構體思考一下吧,我懶得想了

###void *drvdata:填null

###const char *fmt:自動建立,%d會自己順序填,後面可以跟乙個引數,表示起始號碼,我填的0,所以會建立乙個gyr0起始的裝置節點,可以在/dev/裡找到gyr0的檔案

###...:從多少開始,就是前面的%d

gyostruct.cdev_device = 

device_create(gyostruct.cdev_cls,null,gyostruct.devno,null,"gyro%d",0);

if(!gyostruct.cdev_device)

return 0;

}

Linux裝置驅動之字元裝置 1 建立字元裝置

建立乙個字元裝置並在 dev目錄下建立節點的基本步驟 include include include include include include include include include include include include include include define hell...

裝置驅動例項 字元裝置驅動

在整個linux裝置驅動學習中,字元裝置驅動較為基礎。通過對它的學習,對裝置驅動進一步加深了解 cdev 結構體struct cdev 講下比較重要的成員變數 dev t dev 定義了32位的裝置號,其中12位是主裝置號,20位是從裝置號。獲取主裝置號 major dev t dev 獲取從裝置號...

字元裝置驅動

字元裝置驅動 概述 塊裝置 字元裝置以及網路裝置中塊裝置和網路裝置一般都會硬體配置完備,對於程式設計師而言,能夠更多操作的就是字元裝置。設定字元裝置的一般步驟 1.初始化硬體 2.定義fops file operations 3.申請cdev,掛載fops 3.加入cdev 函式cdev add 主...