В нашей системе мы используем mmap()
в файле /dev/mem
для доступа к устройству, подключенному к памяти. Однако для использования этого файла необходимо запустить приложение в режиме суперпользователя (sudo
) для записи на физическое устройство. Мы ищем способ избавиться от этого ограничения.Как дублировать файл устройства Linux?
Предположительно, можно изменить права доступа к файлу устройства. Однако это не рекомендуемое решение.
Одно из предложений, которое у нас было, заключается в том, что вместо того, чтобы писать новый драйвер устройства полного режима для оборудования, мы можем дублировать устройство /dev/mem
, меняя его разрешение на запись и использовать mmap()
на новом устройстве.
Чтение нескольких страниц руководства, я нашел команду mknod
. Поэтому я использовал его для создания специального файла, emem
, с аналогичными атрибутами в файле /dev/mem
(особенно, в Малой и Малой версиях устройства). Используя новый файл в моей программе, мне все еще нужен duso
. Итак, я изменил свои атрибуты на полные права доступа к r/w, но это не изменило необходимости в sudo
.
Далее я попытался изменить разрешения dev/mem
на 0777, но это тоже не помогло.
Это приводит к следующим вопросам:
ли необходимость
sudo
привилегий происходит от использованияmmap()
или от конкретных устройств, это карты?Если первое, как устранить это?
Если последнее, как я могу дублировать функциональность
/dev/mem
с полными разрешениями?
Правильный способ сделать это - либо сделать драйвер ядра, который разрешает доступ ** только ** к конкретным ресурсам, либо запустить демон пользователя в качестве пользователя, который прокси-серверы фильтруют с тем же ограничением. –
@ChrisStratton - спасибо. В долгосрочной перспективе писать правильный драйвер - это мое намерение. Прямо сейчас, из-за нехватки времени (и опыта программирования в режиме ядра), я ищу удобное обходное решение. – ysap
Дублирование узла устройства бессмысленно, так как оно будет иметь все те же проблемы и последствия, что и изменение разрешений существующего узла. –