Хотя операционные системы на базе ядра Linux шагнули уже далеко вперед в плане пользовательского удобства и автоматической настройки, что называется, из коробки, но все же некоторые вопросы еще приходится решать по старинке - в ручную изменяя конфигурационные файлы и исследуя журналы работы системы (в обычной речи ITшников - логи). |
Ниже рассматривается пошаговая инструкция настройки подключения NXT блока через USB.
Итак, первое что нужно сделать после подключения USB кабеля к блоку и компьютеру/ноутбуку, - это убедиться что система увидела блок. Для этого нужно посмотреть в файл /var/log/messages (или запустить команду dmesg) и убедиться, что существуют строчки подобные этим:
от рута:
Jun 9 00:35:00 mybox kernel: [ 245.767163] usb 2-2: new full speed USB device number 3 using ohci_hcd Jun 9 00:35:00 mybox kernel: [ 246.216417] usb 2-2: New USB device found, idVendor=0694, idProduct=0002 Jun 9 00:35:00 mybox kernel: [ 246.216428] usb 2-2: New USB device strings: Mfr=0, Product=0, SerialNumber=1 Jun 9 00:35:00 mybox kernel: [ 246.216436] usb 2-2: SerialNumber: 0016530D7AB9Здесь следует обратить на такие параметры устройства, как idVendor и idProduct, а также на номер устройства (device number). Именно idVendor равное "0694" и idProduct равное "0002" определяют, что мы имеем дело с NXT блоком.
Но если теперь попытаться от имени текущего пользователя (который, конечно же не суперпользовател - root, иначе это потенциальная дыра в безопасности системы) загрузить программу на блок
nbc -d -S=usb struct.nxcТо программа скомпилируется, но не загрузиться. Хотя если же запускать ровно такую же команду от суперпользователя root, то загрузка произойдет успешно.
Это объясняется тем, что файл, ответственный за доступ к этому устройству доступен на запись только пользователю root.
# ls -l /dev/bus/usb/002/ total 0 crw-rw-r--. 1 root root 189, 128 Jun 8 21:15 001 crw-rw-r--. 1 root root 189, 129 Jun 8 21:15 002 crw-rw-r--. 1 root root 189, 130 Jun 9 00:38 003Т.е. когда непривилегированный пользователь пытается работать с этим файлом, то ему, естественно, возвращается ошибка доступа к этому файлу.
Для того, чтобы исправить такое поведение, а именно автоматическое создание файла устройства, но только теперь с нужным правами доступа нужно создать специальный конфигурационный файл для подсистемы динамического управления устройствами. Все файлы этой подсистемы, предназначенные для редактирования, лежат в данной директории:
# ls -l /etc/udev/rules.d/ total 16 -rw-r--r--. 1 root root 134 Jun 8 10:34 60-vboxadd.rules -rw-r--r--. 1 root root 535 Jun 8 06:23 70-persistent-cd.rules -rw-r--r--. 1 root root 771 Jun 10 2011 90-alsa-tools-firmware.rules -rw-r--r--. 1 root root 53 Oct 27 2011 91-drm-modeset.rulesСюда же нужно положить новый файл для автоматической конфигурации файлов доступа к NXT блоку (изменять содержимое директории сможет только root - суперпользователь).
# cat > /etc/udev/rules.d/80-nxt.rules SUBSYSTEM=="usb_device", ACTION=="add", SYSFS{idVendor}=="0694", SYSFS{idProduct}=="0002", SYMLINK+="nxt-%k", MODE="0666"Если после этого в логах появляется такая вот ошибка
Jun 9 00:51:55 fedora-vbox udevd[342]: SYSFS{}= will be removed in a future udev version, please use ATTR{}= to match the event device, or ATTRS{}= to match a parent device, in /etc/udev/rules.d/80-nxt.rules:1Это значит, что здесь запущена более новая версия подсистемы и по этому нужно использовать немного другой конфигурационный файл.
SUBSYSTEM=="usb", ACTION=="add", ATTRS{idVendor}=="0694", ATTRS{idProduct}=="0002", SYMLINK+="nxt-%k", MODE="0666"После этого можно отсоединить USB кабель (или выключить блок)
Jun 9 00:58:05 mybox kernel: [ 1631.153201] usb 2-2: USB disconnect, device number 3А затем снова подсоединить или включить блок. После, в логах появятся ровно такие же сообщения как и приведенные в самом начале заметки, только номер устройства (device number)будет отличаться.
Теперь, если взглянуть на директорию с файлами доступа к USB устройствам, то видно, что новый созданный файл обладает именно теми свойствами, которые были указаны в конфигурационном файле:
# ls -l /dev/bus/usb/002/ total 0 crw-rw-r--. 1 root root 189, 128 Jun 8 21:15 001 crw-rw-r--. 1 root root 189, 129 Jun 8 21:15 002 crw-rw-rw- 1 root root 189, 131 Jun 9 01:31 004К тому же, для более простого доступа к NXT блоку, создалась специальная символьная ссылка.
# ls -l /dev/nxt* lrwxrwxrwx. 1 root root 15 Jun 9 01:28 /dev/nxt-2-2 -> bus/usb/002/004Если получившиеся результаты такие же, как это показано выше, то это на означает, что работать с NXT блоком, можно будет любому непривилегированному пользователю. И теперь эта команда и скомпилирует программу, на языке NXC, и загрузит ее на блок.
nbc -d -S=usb struct.nxc
Комментариев нет:
Отправить комментарий