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....