проблемы с разрешением устройства персонажа - PullRequest
0 голосов
/ 19 сентября 2011

Я хочу иметь возможность писать напрямую на символьное устройство. Вот что я делаю:

cd /dev
mknod moo c 0 0
echo hello >> moo

Я получаю

bash: moo: Permission denied

Я пытался использовать chmod, чтобы предоставить владельцу доступ на запись, например так:

chmod 777 moo

Затем, когда я попытался написать ему, мне сообщили, что устройство или адрес не существует. ls сообщает мне иначе.

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

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

Я также (изначально) попытался поговорить с ним через Python, и это вызвало у меня те же проблемы.

EDIT:

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

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Вы уверены, что 0 0 основных / второстепенных идентификаторов устройства?

Как объяснено здесь ,

  • старший номер (первые 0 в вашей команде) - это идентификатор драйвера, который вы хотите использовать для вашего устройства.
  • вспомогательный номер (второй 0 в вашей команде) - это идентификатор устройства, управляемого драйвером, на который ссылается основной код.

То, что я назвал драйвером, является драйвером, видимым ядром.

В вашем примере вы пытаетесь создать устройство без какого-либо драйвера ... оно не будет работать (как вы уже видели;)).

Зачем вам устройство персонажа? В соответствии с вашими потребностями (один писатель, несколько читателей) вы можете использовать именованный канал с mkfifo или даже стандартными файлами;)

2 голосов
/ 19 сентября 2011

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

Старшие и младшие числа связывают запись узла с конкретным драйвером.И нет, файлы /dev/* не похожи ни на какие другие.Они особенные, потому что ядра перенаправляют операции ввода / вывода / управления в определенные подпрограммы драйвера.

...