llinux 驅動 字元驅動

2021-08-09 11:56:53 字數 1556 閱讀 2538

一、基本概念

主裝置號與次裝置號: 可以理解為主裝置號對應乙個驅動程式,次裝置號對應乙個裝置。

二、重要的資料結構

struct file_operations : 檔案操作 可參考:

struct file : 檔案 可參考:

struct inode : 內部節點 可參考:

三、分配及釋放裝置號

int register_chrdev_region(dev_t first, unsigned

int count, char *name);

int alloc_chrdev_region(dev_t *dev, unsigned

int firstminor, unsigned

int count, char *name);

register_chrdev_region: 明確主裝置號時使用

alloc_chrdev_region:主裝置號未明確時使用

count : 決定了可以使用的裝置數量,即在 在呼叫cdev_add 後,mknod /dev/* c ma

jor minor /dev/* 下面有效的裝置數量。 如 name=」scull」, count=4, minor =0, 則對應的 通過mknod /dev/* c $major [0-3] /dev/* 建立的裝置節點 /dev/scull[0-3]裝置節點一一對應。

傾向於 使用alloc_chrdev_region 動態分配主裝置號

字元裝置註冊模型

static

void scull_setup_cdev(struct scull_dev *dev, int

index)

早期也用進行裝置註冊

int register_chrdev(unsigned

int major, const

char *name, struct file_operations *fops);

int unregister_chrdev(unsigned

int major, const

char *name);

container_of(pointer, container_type, container_field);

eg:struct scull_dev *dev; /* device information */

dev = container_of(inode->i_cdev, struct scull_dev, cdev);

filp->private_data = dev; /* for other methods */

int scull_open(struct inode *inode, struct file *filp)

return

0; /* success */

}

此inode 是記憶體中的inode, 需要時才建立

llinux驅動基礎知識

開篇語 1.linux體系結構 分為使用者空間和核心空間 主要講核心結構 1 system call inte ce sci層 為使用者空間提供了一套標準的系統呼叫函式來訪問linux核心 2 procees management pm 程序管理是建立程序 fork exec 停止程序 kill e...

linux 字元驅動驅動

由於沒有經過完整測試 中可能會有不足之出,如有發現還請斧正 這是乙個學文件,所有 僅供學習使用,請勿在生產環境中使用 字元驅動是linux驅動學習的第一站,該 完成了乙個最簡單的字元驅動以及乙個最小化打測試 應用測試 僅做了open的測試 int main int argc,char argv pr...

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

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