靜態申請裝置號
標頭檔案
/*定義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等。這...