作業系統 再識 字元裝置驅動編寫步驟

2021-06-14 14:40:26 字數 1767 閱讀 6499

1.

標準字元裝置驅動 a.

註冊裝置號如

if(key_major)

/*靜態註冊*/

err = register_chrdev_region(devno, 1, device_name);

else

b.記憶體申請給

cdev

(當cdev

定義為指標時

)然後呼叫以下函式進行裝置初始化並新增該裝置

void cdev_init(

struct cdev *cdev,

const

struct file_operations *fops)

int cdev_add(

struct cdev *p, dev_t dev,

unsigned

count)

c.如需在/dev

下自動建立裝置,需呼叫如下函式

struct class *key_class = class_create(this_module,

name

);struct device *device_create(

struct class *class,

struct device *parent,dev_t devt, void*drvdata, const char *fmt,

...)

*classs

就是class_create

返回的key_class

;parent

如沒有就設為null;devt裝置號;drvdata 如無就為null,後面的就是裝置名稱。也可呼叫mknod 手動建立裝置節點。

自此裝置已經成功新增,一下的工作就時完成file_operations中相應函式就好了。

2.混雜模式裝置驅動

只需在模組初始化和退出時呼叫以下函式即可完成裝置的註冊,裝置節點建立等一系列工作,此模式下的主裝置號為10

int misc_register(

struct miscdevice * misc)

int misc_deregister(

struct miscdevice *misc)

struct miscdevice ;

剩下的工作就是完成

file_operations

中的相應函式功能。

3.plat_form

平台下的驅動

利用platform

機制開發裝置驅動的流程

:定義platform_device--

註冊platform_device--

定義platform_driver--

註冊platform_device

。對於系統已經註冊過的裝置就只需實現後兩步就可以了,但是在註冊的裝置名字

和註冊的驅動名字一定要相同,否則不會註冊成功。當

platform

匯流排匹配到匯流排上註冊的裝置和驅動後,就會呼叫

platform_driver

上的probe

函式(此時匯流排的

probe

函式為null

)。在probe

中可以獲取裝置的記憶體資源和中斷資源。所有這些操作完成後

就是完成其一些

file_operations

的操作,

然後將其定義為字元裝置或混在裝置等,在

/dev

建立其對應的裝置檔案

。(為什麼這麼做還沒有搞懂)應用程式就可以通過

open

對其操作了。

作業系統5 裝置的驅動

裝置的驅動 以前驅動是建立到核心裡。即插即用 plugand play 改變了這一做法。現在裝置的驅動提供一些介面給系統呼叫,或者給使用者程式呼叫。通常作業系統的生產商回提供這些驅動,但在一些小裝置經常是第三方提供。驅動一般是載入成作業系統的模組。當驅動載入時 模組分配到記憶體裡 資源檢查 新增中斷...

作業系統 再識 Linux 驅動模型

1 底層機制 linux 的裝置驅動模型的底層機制主要包括 kobject,kobj type,kset 等幾個結構。這幾個 結構的定義在include linux kobject.h 中。1.1 kobject 代表裝置驅動模型中乙個基本物件,類似於mfc 中最頂層的基類cobject。每個kob...

作業系統 再識 Linux從檔案到字元裝置

在 dev下面有很多裝置,其中也有大家廣為使用的字元裝置,呢裡面的檔案是如何與字元裝置掛鉤的呢 平時我們使用的open函式是如何動態載入字元裝置的操作集的呢 下面就讓我們慢慢剖析 以核心2.6.26為參考 一.首先是檔案系統 需要動態解析檔案路徑名 像 dev ts0 在檔案系統裡分為3個部分 1....