Linux字元裝置驅動編寫流程

來源:互聯網
上載者:User

驅動程式編寫基本流程:

1.首先是一些版本資訊,沒什麼用,但是不能少

#define __NO_VERSION__

#include <linux/modules.h>

#include <linux/version.h>

char kernel_version[] = UTS_RELEASE;

2.為了把系統調用和驅動程式關聯起來,需要一個非常關鍵的資料結構:struct file_operations。file_operations結構的每一個成員的名字都對應著一個系統調用。使用者進程利用系統調用在對裝置檔案進行諸如read/write操作時,系統調用通過裝置檔案的主裝置號找到相應的裝置驅動程式,然後讀取這個資料結構相應的函數指標,接著把控制權交給該函數。這是linux的裝置驅動程式工作的基本原理。編寫裝置驅動程式的主要工作就是編寫子函數,並填充file_operations的各個域

3.簡單驅動程式的編寫(test.c):

a.包含一些基本的標頭檔。

b.編寫一些功能函數,比如read(),write()等。這些函數被調用時系統進入核心態。

c.定義struct file_operations結構的對象,填充結構體。結構體中功能的順序不能改變,若一些功能沒有實現就用NULL填充,已經實現的功能如read()、write()分別添加到對應的位置。這步實現的是函數的註冊。到這裡驅動程式的主體可以說是寫好了。現在需要把驅動程式嵌入核心。

d.註冊裝置驅動程式,使用register_chrdev註冊字元型裝置。函數原型為:

int register_chrdev(0, "test_name", &test_file_operations)

函數返回主裝置號,若註冊成功傳回值大於0。

第一個參數:主裝置號。第二個參數:註冊的裝置名稱。第三個參數:結構體名(裝置相關操作方式,驅動程式實際執行操作的函數的指標)。

這個函數由int init_module(void)函數調用,這個函數在系統啟動時註冊到核心時調用。

e.在用rmmod卸載模組時,cleanup_module函數被調用,它釋放字元裝置test在系統字元裝置表中佔有的表項。

void cleanup_module(void)

{

unregister_chrdev(test_major, "test");

}

到這裡test.c基本就編寫完成了。一個簡單的字元裝置可以說寫好了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.