Как мне реализовать драйвер драйвера файловой системы в Linux? [закрыто]

Ваш Xorg.log показывает, что у вас есть карту NVidia, однако вы все равно получите драйвер , устанавливающий режим (который является последним резервным средством).И nouveau , и nv регистрируются дважды, что тоже нечетно. Возможно, ваше оборудование слишком новое, чтобы поддерживать его в модернах. В любом случае, с этой конфигурацией вы не сможете использовать аппаратное ускорение (проверьте glxinfo ).

Также кажется, что имена моделей по умолчанию теперь включают только вертикальное и горизонтальное разрешение (см. xf86SetModeDefaultName в xf86Modes.c ). IIRC они также включали частоту обновления. Я не знаю, какова была причина исключения частоты из имени строки режима, но это означает, что вы знаете, что не можете контролировать из xorg.conf , какую строку модели использовать, когда есть несколько моделей с одинаковым разрешением. но разная частота обновления.

Единственное, что я могу придумать в этом случае, - это включить модельную строку в xorg.conf , поэтому вам нужно что-то вроде

Section "Monitor"
    ...
    ModeLine "2560x1080@200.0" 598.40 2560 2608 2640 2720 1080 1083 1093 1100 +hsync +vsync
    Option "PreferredMode" "2560x1080@200.0"
    ...
EndSection

Проверить в Xorg.log , что это правильно принимает и выбирает эту модельную линию; любые проблемы обнаружатся там.

14
25.03.2019, 01:07
4 ответа

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

Вы можете ознакомиться с похожими драйверами файловой системы и узнать, как они работают здесь .

Эти драйверы, вероятно, используют внутренние функции ядра для доступа к устройствам хранения в виде блоков байтов, но вы также можете использовать блочные устройства, представленные драйверами в папках блочных устройств и символьных устройств .

1
27.01.2020, 19:50

Да, драйвер ядра может управлять файловой -системой.

Лучшее решение для макета, прототипа файловой -системы — использовать FUSE. А после можно подумать о преобразовании его в драйвер ядра.

Википедия =>https://en.wikipedia.org/wiki/Filesystem_in_Userspace

Источник =>https://github.com/libfuse/libfuse

учебник =>https://developer.ibm.com/articles/l-fuse/

5
27.01.2020, 19:50

Вы можете использовать fuse, чтобы создать пользовательскую -файловую -систему или написать модуль ядра. С предохранителем это сделать проще, так как у вас есть выбор языков и не произойдет сбой ядра (и, следовательно, всей системы ).

Модули ядра могут быть быстрее, но первое правило оптимизации :Не делайте этого, пока не протестируете работающий код. Второй похож на него. :Не делайте этого, пока у вас не будет доказательств, что он слишком медленный. И третье :Не сохраняйте его, если у вас нет доказательств того, что он делает его быстрее/меньше.

И да, в ядре уже есть драйверы для оборудования, вы не -их реализуете.

1
27.01.2020, 19:50

Да, файловые системы в Linux могут быть реализованы как модули ядра. Но есть также интерфейс FUSE (Filesystem in USErspace ), который позволяет обычному пользовательскому процессу -пространства выступать в качестве драйвера файловой системы. Если вы создаете прототип новой файловой системы, ее реализация сначала с использованием интерфейса FUSE может упростить тестирование и разработку. Как только вы проработаете внутреннюю часть файловой системы в форме FUSE, вы можете приступить к реализации оптимизированной по производительности -версии модуля ядра.

Вот некоторая основная информация о реализации файловой системы в пространстве ядра. Он довольно старый (1996 года выпуска! ), но это, по крайней мере, должно дать вам общее представление о том, что вам нужно будет делать.

Если вы решите пойти по маршруту FUSE, вот libfuse, эталонная реализация пользовательской стороны интерфейса FUSE.

Драйвер файловой системы как модуль ядра

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

Когда монтируется файловая система, и либо тип файловой системы указан в соответствии с вашим драйвером, либо выполняется автоматическое определение типа файловой системы -, виртуальная файловая система ядра (VFS для краткости )слой вызывает эта функция. По сути, он говорит: «Вот указатель на представление на уровне ядра -стандартного блочного устройства Linux. Взгляните на него, посмотрите, сможете ли вы с ним справиться, а затем скажите мне, что вы можете с ним сделать».

В этот момент ваш драйвер должен прочитать все, что ему нужно, чтобы убедиться, что это правильный драйвер для файловой системы, а затем вернуть структуру, которая включает указатели на дополнительные функции, которые ваш драйвер может выполнять с этой конкретной файловой системой. Или, если драйвер файловой системы не распознает данные на диске, предполагается, что он вернет соответствующий результат ошибки, а затем VFS либо сообщит об ошибке в пространство пользователя, либо -, если выполняется автоматическое определение типа файловой системы --попросит попробовать другой драйвер файловой системы.

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

Уровень VFS ожидает, что драйвер файловой системы сделает ряд стандартных функций доступными для уровня VFS; некоторые из них являются обязательными для того, чтобы уровень VFS мог делать что-либо значимое с файловой системой,другие являются необязательными, и вы можете просто вернуть NULL вместо указателя на такую ​​необязательную функцию.

26
27.01.2020, 19:50

Теги

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