Linux字元裝置驅動

2021-09-22 08:36:57 字數 1846 閱讀 2175

靜態申請裝置號

標頭檔案

/*定義module_param module_param_array的標頭檔案*/

#include /*定義module_param module_param_array中perm的標頭檔案*/

#include /*mkdev轉換裝置號資料型別的巨集定義*/

#include

申請函式

/*輸入主裝置號*/

module_param(numdev_major,int,s_irusr);

/*輸入次裝置號*/

module_param(numdev_minor,int,s_irusr);

dev_t num_dev;

num_dev = mkdev(numdev_major,numdev_minor); //主次裝置號

register_chrdev_region(num_dev,device_minor_num,device_name); //序列化裝置號,從裝置個數,裝置名

2 . 動態申請裝置號

標頭檔案

/*分配記憶體空間函式標頭檔案*/

#include

申請函式

alloc_chrdev_region(&num_dev,numdev_minor,device_minor_num,device_name); //獲得序列化裝置號,次裝置號,裝置個數,裝置名

numdev_major = major(num_dev);

標頭檔案

/*包含函式device_create 結構體class等標頭檔案*/

#include

建立函式

static struct class *myclass;

myclass = class_create(this_module,device_name);

標頭檔案

/*裝置節點檔案操作結構體*/

#include /*定義字元裝置的結構體*/

#include

註冊函式

struct file_operations my_fops = ;

struct cdev cdev;

int devno = mkdev(numdev_major,numdev_minor+index);

/*資料初始化*/

cdev_init(&cdev,&my_fops);

cdev.owner = this_module;

cdev.ops = &my_fops;

/*註冊到系統*/

cdev_add(&cdev,devno,1); //字元裝置檔案結構體,裝置號,裝置範圍大小

/*引數:所屬裝置類,裝置的父裝置,裝置號,裝置資料,裝置名*/

device_create(myclass,null,mkdev(numdev_major,numdev_minor+i),null,device_name"%d",i);

cdev_del(&cdev); //刪除裝置

device_destroy(myclass,mkdev(numdev_major,numdev_minor+i)); //刪除裝置節點

class_destroy(myclass);

kfree(my_devices);

unregister_chrdev_region(mkdev(numdev_major,numdev_minor),device_minor_num); //釋放裝置號

驅動 linux裝置驅動 字元裝置驅動開發

preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...

Linux裝置驅動之《字元裝置驅動》

linux裝置中最大的特點就是裝置操作猶如檔案操作一般,在應用層看來,硬體裝置只是乙個裝置檔案。應用程式可以像操作檔案一樣對硬體裝置進行操作,如open close read write 等。下面是乙個字元裝置驅動程式的簡單實現test.c 模組分析 1.初始化裝置驅動的結構體 struct fil...

Linux裝置驅動之字元裝置驅動

一 linux裝置的分類 linux系統將裝置分成三種基本型別,每個模組通常實現為其中某一類 字元模組 塊模組或網路模組。這三種型別有 字元裝置 字元裝置是個能夠像位元組流 類似檔案 一樣被訪問的裝置,由字元裝置驅動程式來實現這種特性。字元裝置可以通過檔案系統節點來訪問,比如 dev tty1等。這...