字元裝置驅動初始化和銷毀部分

2021-08-22 05:00:11 字數 2461 閱讀 5718

每個字元裝置的驅動都要包含對這個字元裝置的初始化,而這個初始化其實是乙個非常固定的步驟,接著我們就來看看這個初始化怎麼寫。

static inline int register_chrdev(unsigned int major, const char *name,

const struct file_operations *fops)

引數1-----major 表裝置號(32位的值 由主+次裝置號構成)高12位主裝置號+低20位的次裝置號構成

引數2-----name 表示裝置名字

引數3-----file_operations表示檔案操作集,是應用層要對裝置進行的操作,常用的有:open,read,write

struct file_operations ;
接著看一下和register_chrdev成對使用的函式:unregister_chrdev

static inline void unregister_chrdev(unsigned int major, const char *name)
引數和register_chrdev基本相同,作用是銷毀乙個字元裝置,用於驅動解除安裝。

這裡介紹通過udev/mdev機制自動建立裝置節點,我們需要做的是

1 建立乙個類

struct class *class_create(owner, name)//建立乙個類
引數1:this_module

引數2:名字(字串),自定義

2 建立乙個裝置檔案

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

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

引數1:class結構體,class_create呼叫之後到返回值

引數2:表示父親,一般直接填null

引數3:裝置號型別 dev_t

引數4:私有資料,一般直接填null

引數5和6:表示可變引數,字串,表示裝置節點名字:(exp)led2、gpio ---->>/dev/led2 、gpio

3 在解除安裝驅動時需要登出這個類和裝置檔案,使用的結構函式是

void class_destroy(devcls);//銷毀類

void device_destroy(struct class *class, dev_t devt);//銷毀裝置檔案

舉乙個mpu6050驅動中對其初始化的部分作為例子

struct dev_desc

;struct dev_desc mpu6050_dev_desc=;

static int chr_dev_init(struct dev_desc *s_led_dev,const struct file_operations *fops)

else

printk("my_major =%d\n",s_led_dev->my_major);

s_led_dev->class = class_create(this_module,"mpu_class");//creat led_class

if( is_err(s_led_dev->class))

s_led_dev->dev = device_create(s_led_dev->class, null,\

mkdev(s_led_dev->my_major,0), null, s_led_dev->name);//creat led_dev--->>

if( is_err(s_led_dev->dev))

return 0;

err_2:

device_destroy(s_led_dev->class,mkdev(s_led_dev->my_major,0));

err_1:

class_destroy(s_led_dev->class);

err_0:

unregister_chrdev(s_led_dev->my_major,s_led_dev->name);

return ret;

return 0;

}

還有其對於的銷毀部分

void chr_dev_exit(struct dev_desc *s_led_dev)

DPDK裝置驅動的匹配和初始化

前言 dpdk使用了uio 使用者空間i o 的機制,跳過核心態的網絡卡驅動,轉而使用使用者態的收發包驅動,從驅動到記憶體和資料報,繼而到資料報的處理,這是乙個完整的收發包流程。這篇主要介紹裝置驅動的初始化,和收發包的處理。所選 以dpdk 17.02版本為依據。資料報的驅動初始化是在rte eal...

USB裝置驅動之裝置初始化 裝置列舉

usb裝置從接入hub到正常工作之前,都屬於裝置列舉階段。所謂裝置列舉,就是讓host控制器認識usb裝置,並為其準備資源,建立好主機與裝置間的資料傳遞機制。該階段的工作,是usb通訊協議規定的,所以屬於iso標準流程。裝置列舉階段也對應了usb裝置的五種狀態。裝置列舉階段分為如下8個步驟 獲取裝置...

USB裝置驅動之裝置初始化 裝置列舉

usb裝置從接入hub到正常工作之前,都屬於裝置列舉階段。所謂裝置列舉,就是讓host控制器認識usb裝置,並為其準備資源,建立好主機與裝置間的資料傳遞機制。該階段的工作,是usb通訊協議規定的,所以屬於iso標準流程。裝置列舉階段也對應了usb裝置的五種狀態。裝置列舉階段分為如下8個步驟 獲取裝置...