Должен ли я использовать блочное устройство над устройством для чтения и записи в память? - PullRequest
0 голосов
/ 02 июля 2018

Я только начал работать в новой компании, и я новичок во встроенном мире. Они дали мне задание, я выполнил это, и оно работает, но я не знаю, правильно ли я это сделал. Я опишу задачу и то, что я сделал.

Меня попросили спрятать небольшой кусочек DDR от ОС Linux, затем какая-то функция HW может записать что-то в этот маленький кусочек памяти, который я сохранил. После этого мне нужно будет прочитать этот маленький кусочек памяти в файл.

Чтобы скрыть часть DDR от Linux, я просто изменил аргумент памяти Linux, чтобы он соответствовал реальному объему памяти (необходимый мне размер + небольшой размер для безопасности). У меня есть идея и идея для драйвера, который я опишу через секунду от этого поста . После этого Linux видит меньше памяти, чем HW, а верхняя часть DDR скрыта от ядра, и я могу без проблем использовать ее для хранения.

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

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

1 Ответ

0 голосов
/ 02 июля 2018

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

символьное устройство принимает простые команды чтения и записи и не получает никакой помощи от ядра. Это подходит для чтения или записи с устройств (и с всего, что напоминает устройство, как если это фактический поток, который читается последовательно или поддерживает поиск и может читать одни и те же данные снова и снова).

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

...