Как записать пространству пользователя драйвер блочного устройства Linux?

Я хотел бы записать драйвер блочного устройства Linux. Драйвер не должен был бы получать доступ к аппаратным средствам, таким образом, это может быть в пространстве пользователя.

Для запуска я попытался создать драйвер блочного устройства в качестве примера с этим Make-файлом:

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

Любая справка на этом значительно ценилась бы.

Спасибо, Andreas

6
задан andreasw 15 February 2010 в 14:52
поделиться

2 ответа

Не существует "официального" способа создания блочных драйверов в пользовательском пространстве, однако люди часто делают это, (ab) используя драйвер NBD для связи по петлевой сети с демоном, который прослушивает обычный сокет и сообщает Протокол NBD. Дополнительную информацию см. В документации NBD.

Ваш пример относится к блочному устройству режима ядра, которое должно быть построено как модуль ядра. И поскольку внутреннее устройство ядра постоянно меняется, оно, по-видимому, теперь несовместимо.

10
ответ дан 8 December 2019 в 04:52
поделиться

Всегда смотрит на первую ошибку:

В вашем случае это похоже на проблему с включаемыми файлами, например request_queue_t не определен.

Поскольку это устаревший тип, вы, вероятно, используете более новую версию linux / blkdev.h, чем в примере кода.

Попробуйте добавить typedef struct request_queue request_queue_t;

4
ответ дан 8 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: