Linux字元裝置驅動程式編寫基本流程

2021-05-26 11:45:53 字數 1747 閱讀 9405

驅動程式編寫基本流程:

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

#define __no_version__

#include #include

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)

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

4.編譯

$ gcc -o2 -dmodule -d__kernel__ -c test.o test.c

得到檔案test.o就是乙個裝置驅動程式。

如果裝置驅動程式有多個檔案,把每個檔案按上面的命令列編譯,然後

ld -r file1.o file2.o -o modulename

驅動程式已經編譯好了,現在把它安裝到系統中去。

$ insmod -f test.o

安裝成功在/proc/devices檔案中就可以看到裝置test,並可以看到主裝置號。要解除安裝執行:

$ rmmod test

5.建立裝置節點

mknod /dev/test c major minor

c是指字元裝置,major是主裝置號,minor是從裝置號,一般可以設定為0

以上就是linux驅動編寫的基本過程了

linux裝置驅動程式 字元裝置驅動程式

先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...

Linux裝置驅動程式 字元裝置驅動程式

1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...

Linux 字元裝置驅動程式的編寫框架

一 linux device driver 的概念 系統呼叫是作業系統核心和應用程式之間的介面,裝置驅動程式是作業系統核心和機器硬體之間的介面。裝置驅動程式為應用程式遮蔽了硬體的細節,這樣在應用程 序看來,硬體裝置只是乙個裝置檔案,應用程式可以象操作普通檔案一樣對硬體裝置進行操作。裝置驅動程式是核心...