2010-02-15 56 views
5

我想寫一個linux塊設備驅動程序。驅動程序不需要訪問硬件,因此它可以在用戶空間中。如何編寫一個用戶空間的linux塊設備驅動程序?

要開始,我試圖建立an example block device driver用這個Makefile:

obj-m = sbd.o 
KVERSION = $(shell pwd) 
PWD = $(shell pwd) 

all: 
    make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules 

然而,我得到這些錯誤,我不知道如何解決。這裏是stdout和stderr:

make -C /lib/modules/2.6.31-19-generic/build M=/home/andreas/sp/nivoa/src/driver/sbd modules 
make[1]: Entering directory `/usr/src/linux-headers-2.6.31-19-generic' 
    CC [M] /home/andreas/sp/nivoa/src/driver/sbd/sbd.o 
/home/andreas/sp/nivoa/src/driver/sbd/sbd.c:72: error: expected ‘)’ before ‘*’ token 
/home/andreas/sp/nivoa/src/driver/sbd/sbd.c:128: warning: initialization from incompatible pointer type 
/home/andreas/sp/nivoa/src/driver/sbd/sbd.c: In function ‘sbd_init’: 
/home/andreas/sp/nivoa/src/driver/sbd/sbd.c:143: error: ‘sbd_request’ undeclared (first use in this function) 
/home/andreas/sp/nivoa/src/driver/sbd/sbd.c:143: error: (Each undeclared identifier is reported only once 
/home/andreas/sp/nivoa/src/driver/sbd/sbd.c:143: error: for each function it appears in.) 
/home/andreas/sp/nivoa/src/driver/sbd/sbd.c:146: error: implicit declaration of function ‘blk_queue_hardsect_size’ 
make[2]: *** [/home/andreas/sp/nivoa/src/driver/sbd/sbd.o] Error 1 
make[1]: *** [_module_/home/andreas/sp/nivoa/src/driver/sbd] Error 2 
make[1]: Leaving directory `/usr/src/linux-headers-2.6.31-19-generic' 
make: *** [all] Error 2 

任何幫助,將不勝感激。

感謝, 安德烈亞斯

+0

'sbd.c:72:error:expected')'''''token' – mre

回答

10

沒有使用NBD驅動,談談迴環網絡守護進程在用戶空間,但是人們往往通過(AB)做它幹嘛塊驅動程序的「官方」的方式,也在正常的套接字上進行監聽並說出NBD協議。有關更多信息,請參閱NBD文檔。

您的示例適用於內核模式塊設備,該設備需要構建爲內核模塊。而內核的內核總是在變化,現在大概是不兼容的。

4

看起來總是在第一個錯誤:

在你的情況下,它看起來像包括文件,例如問題request_queue_t未定義。

由於這是不贊成使用的類型,因此您可能使用的是比代碼示例更新的linux/blkdev.h版本。

嘗試增加typedef struct request_queue request_queue_t;

6

根據MarkR的建議,甚至可以通過AF_UNIX套接字對來討論NBD協議,因此不需要額外的本地守護進程。實現這個協議的程序將需要設置套接字對並從小孩中分出。父母和孩子都關閉套接字對的一端。其中一個在套接字的末端開始接收請求,另一個將NBD驅動程序連接到套接字的末尾。

3

如前所述,使用NBD是很好的,也許更好的方法(例如,virtualbox-fuse使用)是製作一個可導出一個文件的FUSE文件系統,然後您可以通過losetup使用該文件。

相關問題