2013-07-17 11 views
0

Я работаю для того, чтобы ИПБ на моем beaglebone черный (распределение Ангстрем), используя инструкции here.Beaglebone Linux: вопросы, добавляющим строку в файл

Я в точке, где мне нужно, чтобы добавить BB-SPI1-01 до /sys/devices/bone_capemgr.*/slots, чтобы включить драйверы.

выдачи команды echo BB-SPI1-01 > /sys/devices/bone_capemgr.*/slots или echo BB-SPI1-01 >> /sys/devices/bone_capemgr.*/slots, однако, дает ошибку echo: Write error: file exists

Попытка изменить в соответствии с нано также не удается. Я могу открыть файл и отредактировать его, но когда я сохраню это дает мне Error writing slots: no such file or directory

Я установить права доступа на файл в 777.

Кто-нибудь знает, почему я не могу редактировать файл? если это невозможно, есть ли обходной путь?

ответ

0

Возможно, это связано с тем, что вы пытаетесь получить доступ к более чем одному файлу за один раз с echo BB-SPI1-01 > /sys/devices/bone_capemgr.*/slots?

Попробуйте выбрать один путь к файлу slots и посмотреть, если это работает

+0

Фактически существует только одна возможная замена для дикой карты в пути (8), поэтому несколько путей не являются проблемой, но я все равно пробовал. Нет кубиков. –

1

Для тех, кому любопытно, в то время как я не нашел точный ответ, я нашел больше информации.

Интерфейс SPI1 на черном beaglebone не может быть включен, если интерфейс hdmi не отключен, что я еще не сделал. Вместо этого я использую интерфейс SPI0. Интересно, что эта же команда работает, если используется BB-SPI0-01 вместо BB-SPI1-01. Поэтому ошибка, о которой идет речь, вероятно, не вытекает из базовой команды, а скорее из системы в ответ на команду (которая не может выделить ресурсы, запрошенные из-за конфликтов с hdmi).

Хотя я не тестировал SPI1 при выключенном hdmi, я могу только предположить, что мои ошибки исчезнут.

2

Я тоже сражался с этой дилеммой, пытаясь отобразить материал ILI9340C для отображения Beaglebone Black. Способ /dev/devices/bone_capemgr.* заключается в том, что все, что вы эхо отзываете в его каталоге slots, идет и ищет наложение этого дерева устройств для нового устройства - новое в Linux Kernel 3.0 и выше. Для тех, кто этого не знает (мне это приходило навсегда, чтобы найти это). Деревья устройств - это в основном драйвер, который говорит Linux, как работать с устройством, но вместо того, чтобы содержать какой-либо код, они просто представляют собой файл конфигурации, говорит Linux, что поставить туда, где можно поговорить с устройством, и что ожидать взамен. При этом BB-SPIx-01 является скомпилированным файлом дерева устройств, в формате /lib/firmware/, который указывает на устройство SPI, и сообщает spidev, что с ним делать.

BB-SPI1-01 подключается к порту HDMI уже для какой-то аудио-вещи (я думаю), и поэтому, если вы полностью отключите HDMI, SPI1 всегда привязан к HDMI-кадру. Это объясняет, почему запись BB-SPI1-01 в /sys/devices/bone_capemgr.*/slots не удалась. Это специальный файл, и когда вы пишете на него, процесс ядра читает ваш ввод и пытается попытаться создать файл «устройства» в другом месте, и поскольку BB-SPI1-01 уже включен, этот файл уже существует, и поэтому процесс ядра, который обрабатывает эти вещи, возвращает ошибку и передает ее через любой процесс, инициированный им, в этом случае вы, пользователь, набрав echo BB-SPI1-01 > /sys/devices/bone_capemgr.*/slots.

С яркой стороны, SPI0 не использовался. Поэтому, чтобы использовать его, все, что вам нужно сделать, это включить его в userland.Для этого (и вы уже поняли это, но для всех остальных) введите echo BB-SPI0-01 > /sys/devices/bone_capemgr.*/slots в командной строке, а затем просто убедитесь, что spidev запущен, введите modprobe spidev как root. Теперь, чтобы проверить, введите ls /dev | grep spi и посмотрите, что происходит. /dev/spidevX.Y - это ваш автобус SPI, для меня это будет /dev/spidev1.0.

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

Если у вас есть какие-либо вопросы, пожалуйста, не стесняйтесь спрашивать!

+1

У FYI dmsg есть некоторые сообщения об ошибках, например, в моем случае это было: [1213.370642] bone-capemgr bone_capemgr.8: слот # 8: конфликт beagleback-01 P8.45 (# 5: BB-BONELT-HDMI) [1213.380306] bone-capemgr bone_capemgr.8: слот # 8: Ошибка проверки , и это вызвало «ошибку записи: файл существует» – Mixaz

0

Основываясь на ответе PyroAVR, вот конкретное решение. Вам нужно отключить HDMI, что это легко сделать, отредактировав следующий файл: /boot/uEnv.txt

Вы можете раскомментировать строку, которая вызывает HDMI, чтобы отключить, выполнив следующую команду как корень:

sed -i.bck '/cape_disable=capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN$/ s/^#//' /boot/uEnv.txt 
0

как Mixaz упоминается в комментарии, real ошибки находятся в dmesg выход; «нет такого файла или каталога» - это красная селедка, и даже strace не дает никаких указаний относительно реальной проблемы. в моем случае я нашел:

[26858.517893] bone_capemgr bone_capemgr: slot #5: override 
[26858.517937] bone_capemgr bone_capemgr: Using override eeprom data at slot 5 
[26858.517986] bone_capemgr bone_capemgr: slot #5: 'Override Board Name,00A0,Override Manuf,jc_gpio_test' 
[26924.230357] bone_capemgr bone_capemgr: part_number 'jc_gpio_test', version 'N/A' 

от этого я понял, что это не нравится «0000» как номер версии, изменен на «00A0» и перекомпиляции, то это сработало.

вот Makefile, который я написал, чтобы помочь автоматизировать процесс, в случае, если это поможет.

%.install: %-00A0.dtbo 
    cp -f $< /lib/firmware 
    echo $* > /sys/devices/platform/bone_capemgr/slots 
%-00A0.dtbo: %.dts 
    dtc -O dtb -o [email protected] -b 0 [email protected] $< 

использовать его как: make jc_gpio_test.install, предполагающей ваше имя файла .dts является jc_gpio_test.dts.


Оказалось, моя догадка, вероятно, была неправильной. изменение, которое, скорее всего, было исправлено, добавило часть -00A0 в файл dtbo. По умолчанию для слот-загрузчика требуется «dash-versionnumber».