每個字元裝置的驅動都要包含對這個字元裝置的初始化,而這個初始化其實是乙個非常固定的步驟,接著我們就來看看這個初始化怎麼寫。
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個步驟 獲取裝置...