|
Как работать с GPIO под Linux? |
|
|
|
Jul 16 2016, 03:15
|
Группа: Участник
Сообщений: 8
Регистрация: 16-07-16
Пользователь №: 92 575

|
Здравствуйте! Заранее предупреждаю, что это первый раз когда я имею дело с микрокомпьютерами, раньше работал только с AVR и для меня тема программирования из под Linux темный лес, так что прошу сильно не бить, если я написал не туда или задаю очевидные/глупые/неправильно сформулированные вопросы. Имеется плата http://wiki.embeddedarm.com/wiki/TS-5300, хочу использовать ее как Arduino (т.е. иметь возможность подавать и снимать питание с определенных ножек), почитав в интернете конкретно про такой тип микрокомпьютеров я примерно предположил что под мои цели на данной плате могут подойти выходы DIO1 и DIO2. Как вообще к ним обратиться из под Linux и задать им какое-то состояние? Нашел в интернете какие-то примеры обращения через файл /sys/dio, но в версии Linux которая стоит на этом микрокомпьютере не то что такого файла нету, папка sys вообще не существует. Что мне делать что бы выполнить хотя бы такую задачу и вообще возможно ли это?
|
|
|
|
|
Jul 16 2016, 07:14
|
Гуру
     
Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143

|
Цитата(GeneralProger @ Jul 16 2016, 06:15)  Здравствуйте! Заранее предупреждаю, что это первый раз когда я имею дело с микрокомпьютерами, раньше работал только с AVR и для меня тема программирования из под Linux темный лес, так что прошу сильно не бить, если я написал не туда или задаю очевидные/глупые/неправильно сформулированные вопросы. Имеется плата http://wiki.embeddedarm.com/wiki/TS-5300, хочу использовать ее как Arduino (т.е. иметь возможность подавать и снимать питание с определенных ножек), почитав в интернете конкретно про такой тип микрокомпьютеров я примерно предположил что под мои цели на данной плате могут подойти выходы DIO1 и DIO2. Как вообще к ним обратиться из под Linux и задать им какое-то состояние? Нашел в интернете какие-то примеры обращения через файл /sys/dio, но в версии Linux которая стоит на этом микрокомпьютере не то что такого файла нету, папка sys вообще не существует. Что мне делать что бы выполнить хотя бы такую задачу и вообще возможно ли это? Первое - читайте документацию на ваш компьютер. Это не АРМ, а стандартный х86 процессор. Второе - Линукс с "пол-оборота" не осваивается, это достаточно сложная система, по сравнению с АВР программированием. Третье - Не вижу смысла в данной задаче вообще его использовать, у вас РС-совместимая машина, берете любой компилятор, на вроде Watcom C, под MS-DOS и пишите свою прогу. Если нужно много памяти, используйте dos-4gw. Ну и напоследок - если уж все-таки хотите влезть в линукс - сначала почитайте о нем по-подробнее...
Сообщение отредактировал mantech - Jul 16 2016, 07:14
|
|
|
|
|
Jul 16 2016, 10:19
|
Группа: Участник
Сообщений: 8
Регистрация: 16-07-16
Пользователь №: 92 575

|
Цитата(mantech @ Jul 16 2016, 08:14)  Первое - читайте документацию на ваш компьютер. Это не АРМ, а стандартный х86 процессор. Второе - Линукс с "пол-оборота" не осваивается, это достаточно сложная система, по сравнению с АВР программированием. Третье - Не вижу смысла в данной задаче вообще его использовать, у вас РС-совместимая машина, берете любой компилятор, на вроде Watcom C, под MS-DOS и пишите свою прогу. Если нужно много памяти, используйте dos-4gw. Ну и напоследок - если уж все-таки хотите влезть в линукс - сначала почитайте о нем по-подробнее... Может я конечно чего-то не понимаю, но я почитал wiki по ссылке которая ведет на этот компьютер, а документации по разработке на них не увидел. А относительно MS-DOS тема для меня еще менее ясная чем linux, туда мне лезть еще более страшней. Я пытался найти какую-то информацию, но даже не знаю как мне составить поисковый вопрос, пытался запрашивать gpio linux example и подобного рода, но что-то все совсем не то, может подскажете как мне правильно сформулировать запрос поисковику для решения моей задачи? Цитата(1113 @ Jul 16 2016, 09:40)  какая версия ядра? По команде uname -mrs выводит: Linux 2.4.31 i486
Сообщение отредактировал GeneralProger - Jul 16 2016, 10:20
|
|
|
|
|
Jul 16 2016, 11:50
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(mantech @ Jul 16 2016, 10:14)  Третье - Не вижу смысла в данной задаче вообще его использовать, у вас РС-совместимая машина, берете любой компилятор, на вроде Watcom C, под MS-DOS и пишите свою прогу. Если нужно много памяти, используйте dos-4gw. MS-DOS категорически не рекомендую, нет смысла новичку осваивать программирование под архаичные платформы. Linux не так сложен, тем более для задачи дерганья GPIO. А вместо той устаревшей железяки что есть у автора (с устаревшей поддержкой Linux и архаичной документацией), я посоветовал бы ему купить что-то современное типа rasbberry/banana pi и прочие odroid-ы с современным актуальным Linux и подходящей документацией. Осваивать что-то новичку следует с чего-то актуального современного с хорошей документацией. P.S. Тема совершенно не сюда, я бы ее перенес в раздел ОС.
--------------------
|
|
|
|
|
Jul 16 2016, 11:58
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(GeneralProger @ Jul 16 2016, 13:19)  А относительно MS-DOS тема для меня еще менее ясная чем linux, туда мне лезть еще более страшней. Я пытался найти какую-то информацию, но даже не знаю как мне составить поисковый вопрос, пытался запрашивать gpio linux example и подобного рода, но что-то все совсем не то, может подскажете как мне правильно сформулировать запрос поисковику для решения моей задачи? в идеальнов варианте, д.б. либа от производителя и документированное API.. если совсем все тухло, то опираясь на это Код The DIO1 port provides +5V, GND, and 14 digital I/O lines that may be used to interface the TS-5300 with a wide range of external devices. DIO lines DIO1_0 thru DIO1_7 are a byte-wide port accessed at I/O location Hex 7B, while the 6 other DIO lines DIO1_8 thru DIO1_13 are accessed in the lower 6 bits of I/O location Hex 7C. I/O location Hex 7A is a control port for DIO1. The direction of DIO lines DIO1_0 thru DIO1_3 is controlled by bit 0 of I/O location Hex 7A, and the direction of DIO1_4 thru DIO1_7 is controlled by bit 1 of I/O location Hex 7A выписываете адреса портов ввода/вывода, ищете и ставите компилятор. например C под свой дистрибутив далее ищете примеры программ "как обратиться к порту ввода в линукс" - удобнее смотреть в исходниках программ для x86, какого-нить софтового программатора или IrDA, любую хрень для работы с lpt портами (если вы понимаете что это) и пишите свою аппликуху для работы со своими адресами адреса по железу смотрите в разделах 21 Appendix D - System I/O MapTable 12 - TS-5300 DIO and Control RegistersPS как уже вам написали - это х86 архитектура и врядли есть прямой доступ к gpio (типа /sys/class/gpio для ARM).. для интереса попробуйте Код find / | grep gpio
|
|
|
|
|
Jul 16 2016, 22:24
|
Группа: Участник
Сообщений: 8
Регистрация: 16-07-16
Пользователь №: 92 575

|
Почитал в интернете по обращению к портам ввода вывода и нашел файл /proc/ioportsСо следующем содержимым: Код 0000-000f : dma1 0020-0021 : pic1 0040-0043 : timer 0070-007f : rtc 0080-008f : dma page reg 00a0-00a1 : pic2 00c0-00df : dma2 00f0-00ff : fpu 01f0-01f7 : ide0 02f8-02ff : serial(auto) 0300-030f : eth0 03f6-03f6 : ide0 03f8-03ff : serial(auto) 0cf8-0cff : PCI conf1 По инструкции порты DIO висят на 074h - 07Fh, значит если я правильно понимаю к ним относится эта строчка: Код 0070-007f : rtc И выходит что на эти порты есть драйвер /dev/rtc через который можно будет с ними работать?
|
|
|
|
|
Jul 17 2016, 00:51
|
Группа: Участник
Сообщений: 8
Регистрация: 16-07-16
Пользователь №: 92 575

|
Я в принципе уже сам понял что тупанул и rtc это совсем не то
Сообщение отредактировал GeneralProger - Jul 17 2016, 00:51
|
|
|
|
|
Jul 17 2016, 08:50
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(GeneralProger @ Jul 17 2016, 03:51)  Я в принципе уже сам понял что тупанул и rtc это совсем не то конечно тупанули, по вашей ссылке есть область адресов: Код 074h - 07Fh DIO and Control registers и ниже таблица описания.. прочитайте содержимое по адресу 0x74, должны считать значение 0x50: Код 74h Read Product Code 50h = Product Code for TS-5300 если ваша система "знает" о наличии этих портов, то карта адресов будет видна либо Код cat /proc/iomem либо Код cat /proc/ioports
|
|
|
|
|
Jul 18 2016, 08:48
|
Группа: Участник
Сообщений: 8
Регистрация: 16-07-16
Пользователь №: 92 575

|
Цитата(Jury093 @ Jul 17 2016, 08:50)  конечно тупанули, по вашей ссылке есть область адресов: Код 074h - 07Fh DIO and Control registers и ниже таблица описания.. прочитайте содержимое по адресу 0x74, должны считать значение 0x50: Код 74h Read Product Code 50h = Product Code for TS-5300 если ваша система "знает" о наличии этих портов, то карта адресов будет видна либо Код cat /proc/iomem либо Код cat /proc/ioports Файл /proc/ioports выше, а файл /proc/iomem вот: Код 00000000-0009e3ff : System RAM 0009e400-0009ffff : reserved 000a0000-000bffff : Video RAM area 000f0000-000fffff : System ROM 00100000-01ffffff : System RAM 00100000-0022aacd : Kernel code 0022aace-002719c3 : Kernel data fff00000-ffffffff : reserved Вот вы говорите прочитать содержимое, а какой командой вообще обращения к портам ввода вывода по адресам такого вида осуществляется? Я смотрел в интернете как обращаться по этому байтному адресу надо, но там везде требуются какие-то пакеты которые вообще отказываются устанавливаться на эту версию Linux и все примеры разнятся. Вы не могли бы привести пример?
|
|
|
|
|
Jul 18 2016, 09:54
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(GeneralProger @ Jul 18 2016, 11:48)  Вы не могли бы привести пример? я же писал ранее: Цитата далее ищете примеры программ "как обратиться к порту ввода в линукс" - удобнее смотреть в исходниках программ для x86, какого-нить софтового программатора или IrDA, любую хрень для работы с lpt портами (если вы понимаете что это) мнэ.. а гугль уже не работает? "как прочитать ioport linux", например http://www.iakovlev.org/index.html?p=538&m=1
|
|
|
|
|
Jul 18 2016, 18:13
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(GeneralProger @ Jul 18 2016, 11:48)  Вы не могли бы привести пример? гугленье - свет, а негугленье - тьма.. вот вам пример ( ссылка, параграф 4.2): Код #include <stdio.h> #include <sys/io.h> int main() { if (ioperm(0x7A,4,1)<0){ printf(“Error\n”); return -1; } //set pins0 to 3 to inputs ioval=inb(0x7a); ioval= ioval & 0xFE; outb(ioval, 0x7A); return 0; }
|
|
|
|
|
Jul 19 2016, 18:08
|
Группа: Участник
Сообщений: 8
Регистрация: 16-07-16
Пользователь №: 92 575

|
Цитата(Jury093 @ Jul 18 2016, 18:13)  гугленье - свет, а негугленье - тьма.. вот вам пример ( ссылка, параграф 4.2): Код #include <stdio.h> #include <sys/io.h> int main() { if (ioperm(0x7A,4,1)<0){ printf(“Error\n”); return -1; } //set pins0 to 3 to inputs ioval=inb(0x7a); ioval= ioval & 0xFE; outb(ioval, 0x7A); return 0; } Знаете, что самое интересное, я никак не могу установить компилятор gcc на свой linux, ни одна инструкция не подходит, нету make, пробовал использовать Java даже с горя, но ее как я понял на мою i486 архитектуру не существует в природе, пытался скомпилировать файл на Linux на компьютере, но он ругается на и работать не хочет (наверное из-за другой архитектуры ОС на которой был скомпилирован), вообщем даже это уже огромная проблема, не знаю даже что и делать.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|