核心中字元裝置結構體的定義
struct cdev
;
linux核心對檔案操作file_operations結構體的定義
struct file_operations ;
file_operations 成員大部分是檔案指標,裝置不支援的指標置為null。驅動程式的檔案操作編寫如下
struct file_operations ***_fops =;
字元裝置cdev結構體的初始化(靜態),可單獨寫在乙個函式***_setup_cdev()中,也可寫在模組載入函式***_init()中。
cdev_init(&cdev,&fops);
cdev.owner = this_module;
字元裝置驅動模組載入與解除安裝的模板
//裝置結構體
struct ***_dev***_dev;
//裝置驅動模組載入函式
static int __init ***_init(void)
else
//註冊裝置
ret = cdev_add(&***_dev.cdev,***_dev_no,1)//引數***_dev_no是裝置響應的第乙個裝置號,引數 1表示裝置相關聯的裝置號的數目
return 0;
}//裝置驅動解除安裝模組函式
static void __exit ***_exit(void)
module_init(***_init);
module_exit(***_exit);
......
register_chrdev_region(***_dev_no,1,dev_name)用於已知起始裝置裝置號的情況;alloc_chrdev_region(&***_dev_no,0,dev_name)用於未知起始裝置裝置號的情況動態分配,會將裝置號放入***_dev_no中。
linux核心中存在chrdev陣列來儲存所有字元裝置驅動程式資訊 ,包含255個元素,每乙個對應一主裝置號。
Linux網絡卡驅動程式分析
學習應該是乙個先把問題簡單化,再把問題複雜化的過程。一開始就著手處理複雜的問題,難免讓人有心驚膽顫,捉襟見肘的感覺。讀linux網絡卡驅動 也是一樣。那長長的原始碼夾雜著那些我們陌生的變數和符號,望而生畏便是理所當然的了。不要擔心,事情總有解決的辦法,先把一些我們管不著的 切割出去,留下必須的部分,...
linux 驅動程式 高階字元驅動程式
ioctl方法 驅動程式的原型實現 int ioctl struct inode inode,struct file filp,unsigned int cmd,unsigned long arg ioctl 命令選擇 位段結構 number direction ioc read ioc write...
Linux驅動程式中THIS MODULE 的定義
struct module 我們插入乙個核心模組,一般會使用工具insmod,該工具實際上呼叫了系統呼叫init module,在該系統呼叫函式中,首先呼叫load module,把使用者空間傳入的整個核心模組檔案建立成乙個核心模組,返回乙個struct module結構體。核心中便以這個結構體代表...