Подключил датчик к TWI шине, подключил осциллоскоп, чтобы контроллировать че там происходит, идут ли данные.
Скомпиллил и загрузил модули в такой вот последовательности:
sudo insmod ~/driver/hwmon.ko
sudo insmod ~/driver/lm75.ko
lsmod
В результате ожидал, что каждые 1.5сек будут идти данные по шине с температурой, но этого не происходит. Никаких логов не выводится (во всяком случае проверял все что есть по /var/log и dmesg
Такое вот тоже не работает:
sudo modprobe lm75.o force_lm75_compat=0,0x49
возвращает ошибку, что модуля такого нет (наверное потому что я его компилю и закидываю отдельно, а не делаю пересборку ядра).
Вообщем то думал, что вот он мол - готовый драйвер как раз под мою микрушку, раз и только считывай с известного места готовые значения и все. А тут вот какая засада. Опять же, я в этом деле человек новый (в драйверах, линухе и прочем). Кто может, просветите пожалуйста. А то уже начинаю думать начинать писать свой драйвер. Благо, первый уже написал.
для начала озвучьте платформу и имя АРМа..
далее состегиваете железо, включаете и запускаете утилиту i2cdetect -y 0
где последняя цифра "0" - это номер шины i2c
смотрите: видится ли ваш чип на шине
далее в конфиг ядра..
lm75 - вроде настолько стандартно ходовой датчик, что просто не может не работать..
и гляньте в доку - может он на 5в..
По поводу команды: sudo i2cdetect -y 0
возвращает ошибку: i2cdetect: command not found
Я тоже уверен что должен работать, бо датчик ходовой. Увы, проверить такими ходовыми тулзами как lm-sensors не получается возможным, бо онные не работают на моей платформе.
Чтобы не подумали, что lm-sensors я не установил. Установил, вот что выдает онный на стандартные запросы:
sensors
No sensors found!
Make sure you loaded all the kernel drivers you need.
Try sensors-detect to find out which these are.
sudo sensors-detect
/sys/bus/pci/devices: No such file or directory at /usr/sbin/sensors-detect line 2547
Я проинсталлил вот это
sudo apt-get install i2c-tools
Теперь у меня есть i2cdetect но все равно ошибка:
sudo i2cdetect -y 0
Error: Could not open file `/dev/i2c-0' or `/dev/i2c/0': No such file or directory
После этого я сделал вот это:
sudo mknod /dev/i2c-0 c 89 0
И теперь у меня уже немножко другая ошибка:
sudo i2cdetect -y 0
Error: Could not open file `/dev/i2c-0': No such device
хм.. давайте "танцевать от печки"
сначала разберемся с i2c bus
что выводит:
и
эти утилиты чуть более специализированные, впрочем, когда все правильно - они датчик опознают и покажут..
i2c-tools более универсальны и просто работают с абстрактной i2c шиной, показывая всё, что откликнется..
[quote]хм.. давайте "танцевать от печки"
сначала разберемся с i2c bus
что выводит:
и
[/quote]
ls ls /dev/i2c*
ls: cannot access ls: No such file or directory
/dev/i2c-0
dmesg | grep i2c
i2c /dev entries driver
Я уже нарыл, что тут советуют скомпилить пропатченный (несколько патчей) атмеловский драйвер от Атмела. Говорят что он глючный (особенно на близких к максимальным скоростям, но мне не проблема понизить скорость, все равно раз в секунду опрашивать только собираюсь или даже еще реже). Вот этот зверь: http://lxr.linux.no/#linux+v2.6.33.5/drivers/i2c/busses/i2c-at91.c
Вообщем вот говорят, что только с ним возможно поднять аппаратный TWI на атмеле (моем камне), в стандартной сборке его нет, наверное из-за глюкавости и патчей. Вообщем курю, че не так :). Может хехе найти либу программной реализации TWI (какую нить либу, когда то использовал под кодевижн - она там стандартно была, и на маленьких аврках работала отлично, а вот с аппаратным TWI у атмела была какая то гонка, я тогда даже на асме (без всяких осей) не мог заставить его работать без глюков, кое когда проскакивал гон в значениях. А вот софтверно реализованный работал на убой.
И щас вот слышу, что опять какие то мутки с TWI шиной, чего не так то. Я вообще не особо люблю пользоваться этой шиной, но сейчас как бы по другому незя. Спрыгнуть на любимый SPI незя. Вот и курю тут млин над простой задачей неоправданно долго. Все усугубляет то, что я на Вы с Линухом и его драйверами.
хех! похоже у вас шинка лежит, должно быть примерно вот так:
тогда идем по шагам:
1. в menuconfig -> drivers->i2c
разрешить работу i2c
bus-support->gpio-based bitband..
2. далее ищите файл платы(борды) примерно в arch/arm/mach-at91/board-sam9g20*
их там несколько, интересует такой у которого сосед с расширением ".о", вас интересует он же но ".с"
смотрите в п/п инита борды наличие похожих строк
и выше структуру типа
если нет, то допишите, поправив под себя
3. пересборка ядра, проследите что откомпилировались файлы драйвера шины, вашего устройства и файл платы
4. грузите ядро, в логе должно промелькнуть вышеприведенное и появиться шинка i2c-0, на которую можно натравить i2cdetect
если что-то непонятно или какой-то этап не прошел, спрашивайте, желательно с кусочком лога +/-5 строк
зы1 9g20 ~= 9g45 (я так думаю) по корке i2c
зы2 i2c дивная шина, хотя многие ее ругают, а мне нравиться..
Был в отпуске, так что вот только сегодня продолжил, вернувшись к своим железякам.
Сборка ядра с ошибками:
arch/arm/mach-at91/board-electrum-100.c:277:41: error: too many arguments to function ‘at91_add_device_i2c’
Вы привели три параметра, а нужно два, подозреваю, что первой ноль лишний, но лучше спрошу :), бо как то второй параметр тоже немножко стремно, не указатель на структуру. Щас попробую поиграться, удалив первый и дав адрес на второй.