裝置驅動程式學習筆記(1)

2021-06-18 06:09:37 字數 1061 閱讀 9086

1. 主從裝置號是用乙個32位的整數(dev_t)來表示,這個整數的高12位表示主裝置號,後面20位表示從裝置號,核心定義了一些巨集來轉換:

#define minorbits20

#define major(dev)((unsigned int) ((dev) >> minorbits))

#define minor(dev)((unsigned int) ((dev) & minormask))

#define mkdev(ma,mi)(((ma) << minorbits) | (mi))

2. 註冊,管理裝置

用kobj_map來管理和跟蹤各個裝置:

// drivers/base/map.c

struct kobj_map *probes[255];

struct mutex *lock;

};管理為驅動程式分配的裝置號範圍:

static struct char_device_struct *chrdevs[chrdev_major_hash_size];

3. 註冊過程

字元裝置的註冊:

1)呼叫register_chrdev_region或alloc_chrdev_region來分配裝置號的範圍

2)呼叫如下兩個函式進行註冊

void cdev_init(struct cdev *cdev, const struct file_operations *fops)

int cdev_add(struct cdev *p, dev_t dev, unsigned count)

塊裝置直接呼叫乙個函式即可以註冊:

int register_blkdev(unsigned int major, const char *name);

4. 字元裝置的操作

struct cdev ;

字元裝置的開啟:

在第一次開啟乙個裝置檔案時,用fs_devices.c裡面的通用函式chrdev_open開啟,並根據裝置號查詢得到cdev例項,同時關聯inode和cdev例項,最後呼叫驅動程式提供的file_operations裡的open函式做一些初始化的工作。

Linux裝置驅動程式學習筆記1

系統linux2.6.32.2 arm linux gcc 4.3.2 hello world模組 include include static int hello init void static void hello exit void module init hello init module...

筆記 裝置驅動程式

驅動程式一般指的是裝置驅動程式 device driver 是一種可以使 計算機和裝置通訊的特殊程式。相當於 硬體的介面,作業系統只有通過這個介面,才能控制 硬體裝置的工作,假如某裝置的驅動程式未能正確安裝,便不能正常工作。因此,驅動程式被比作 硬體的靈魂 硬體的主宰 和 硬體和系統之間的橋梁 等。...

裝置驅動(1) 驅動程式簡介

裝置驅動是幹什麼用的?linux裝置驅動程式使得特定的硬體響應乙個定義良好的內部程式設計介面 系統呼叫open read write close 這些介面完全隱藏了裝置的工作細節。使得使用者通過呼叫標準的系統呼叫來完成對於硬體的操作。字元裝置是一種按位元組順序訪問的裝置,因此字元裝置通常至少要實現o...