字元裝置函式在檔案 include/linux/fs.h 中
核心提供了三個函式來註冊一組字元裝置編號,這三個函式分別是
– register_chrdev_region()
– alloc_chrdev_region()
– register_chrdev()
register_chrdev_region()是提前知道裝置的主次裝置號,再去申請裝置
號。alloc_chrdev_region() 是動態分配主次裝置號。
register_chrdev()。是老版本的裝置號註冊方式,只分配主裝置號。從
裝置號在mknod的時候指定。
巨集定義mkdev的標頭檔案 include/linux/kdev_t.h
– 在kdev_t.h標頭檔案中有一系列裝置號處理的巨集命令,用於處理各種裝置號
相關的資料。
include/linux/cdev.h
– cdev型別是是字元裝置描述的結構
– 其中的裝置號必須用「dev_t」型別來描述,高12位為主裝置號,低20位為
次裝置號
• 編寫,編譯
測試原始碼:
#include /*包含初始化巨集定義的標頭檔案,**中的module_init和module_exit在此檔案中*/
#include /*包含初始化載入模組的標頭檔案,**中的module_license在此標頭檔案中*/
/*定義module_param module_param_array的標頭檔案*/
#include /*定義module_param module_param_array中perm的標頭檔案*/
#include /*三個字元裝置函式*/
#include /*mkdev轉換裝置號資料型別的巨集定義*/
#include /*定義字元裝置的結構體*/
#include #define device_name "sscdev"
#define device_minor_num 2
#define dev_major 0
#define dev_minor 0
module_license("dual bsd/gpl");
/*宣告是開源的,沒有核心版本限制*/
module_author("skyfall");
/*宣告作者*/
int numdev_major = dev_major;
int numdev_minor = dev_minor;
/*輸入主裝置號*/
module_param(numdev_major,int,s_irusr);
/*輸入次裝置號*/
module_param(numdev_minor,int,s_irusr);
static int scdev_init(void)
else
if(ret<0)
printk(kern_emerg "scdev_init!\n");
/*列印資訊,kern_emerg表示緊急資訊*/
return 0;
}static void scdev_exit(void)
module_init(scdev_init);
/*初始化函式*/
module_exit(scdev_exit);
/*解除安裝函式*/
makefile檔案參考相關博文。
• 載入執行
– 使用命令「cat /proc/devices」檢視已經被註冊的主裝置,裝置號xx沒有被註冊
– insmod request_cdev_num.ko numdev_major=xx numdev_minor=0
– 使用命令 cat /proc/devices 檢視,裝置號xx被註冊為sscdev
– rmmod request_cdev_num numdev_major=9 numdev_minor=0
執行至開發板上進行測試:
linux 靜態申請字元類裝置號
包括主裝置號和次裝置號 字元裝置函式在檔案 include linux fs.h 中 核心提供了三個函式來註冊一組字元裝置編號,這三個函式分別是 register chrdev region alloc chrdev region register chrdev register chrdev re...
動態申請字元類裝置號
字元裝置函式在檔案 include linux fs.h 中 alloc chrdev region 是動態分配主次裝置號 巨集定義major提取dev t資料中的主裝置號 編寫,編譯 測試原始碼 include 包含初始化巨集定義的標頭檔案,中的module init和module exit在此檔...
字元裝置驅動 靜態 動態申請裝置號
靜態裝置號申請 申請裝置號,from 要申請的裝置號,count 申請幾個裝置,name 裝置名字 int register chrdev region dev t from,unsigned count,const char name 登出裝置號,from 要登出的裝置號,count 登出幾個裝置...