реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как работать с GPIO под Linux?
GeneralProger
сообщение Jul 16 2016, 03:15
Сообщение #1





Группа: Участник
Сообщений: 8
Регистрация: 16-07-16
Пользователь №: 92 575



Здравствуйте!
Заранее предупреждаю, что это первый раз когда я имею дело с микрокомпьютерами, раньше работал только с AVR и для меня тема программирования из под Linux темный лес, так что прошу сильно не бить, если я написал не туда или задаю очевидные/глупые/неправильно сформулированные вопросы.
Имеется плата http://wiki.embeddedarm.com/wiki/TS-5300, хочу использовать ее как Arduino (т.е. иметь возможность подавать и снимать питание с определенных ножек), почитав в интернете конкретно про такой тип микрокомпьютеров я примерно предположил что под мои цели на данной плате могут подойти выходы DIO1 и DIO2. Как вообще к ним обратиться из под Linux и задать им какое-то состояние? Нашел в интернете какие-то примеры обращения через файл /sys/dio, но в версии Linux которая стоит на этом микрокомпьютере не то что такого файла нету, папка sys вообще не существует.

Что мне делать что бы выполнить хотя бы такую задачу и вообще возможно ли это?

Go to the top of the page
 
+Quote Post
mantech
сообщение Jul 16 2016, 07:14
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
1113
сообщение Jul 16 2016, 08:40
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 24-02-06
Из: Москва
Пользователь №: 14 658



какая версия ядра?
Go to the top of the page
 
+Quote Post
GeneralProger
сообщение Jul 16 2016, 10:19
Сообщение #4





Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
1113
сообщение Jul 16 2016, 10:45
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 604
Регистрация: 24-02-06
Из: Москва
Пользователь №: 14 658



эта платформа оч древняя (> 10 лет), и ядро линукса - тоже.

можно предложить несколько вариантов:
1) пытаться искать сборку (openwrt, yocto и тд) для конкретно этой платы, или подбирать наиболее похожую плату, с этим же процессором. если получится - будете иметь современный линукс со всеми рабочими примерами использования GPIO и тд;
2) искать документацию на эту плату и этот линукс того времени;
3) забить на плату, и взять современное железо, которое поддержано современным софтом
Go to the top of the page
 
+Quote Post
AVR
сообщение Jul 16 2016, 11:50
Сообщение #6


фанат 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. Тема совершенно не сюда, я бы ее перенес в раздел ОС.


--------------------
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 16 2016, 11:58
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 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 Map
Table 12 - TS-5300 DIO and Control Registers

PS как уже вам написали - это х86 архитектура и врядли есть прямой доступ к gpio (типа /sys/class/gpio для ARM).. для интереса попробуйте
Код
find / | grep gpio
Go to the top of the page
 
+Quote Post
GeneralProger
сообщение Jul 16 2016, 22:24
Сообщение #8





Группа: Участник
Сообщений: 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 через который можно будет с ними работать?
Go to the top of the page
 
+Quote Post
GeneralProger
сообщение Jul 17 2016, 00:51
Сообщение #9





Группа: Участник
Сообщений: 8
Регистрация: 16-07-16
Пользователь №: 92 575



Я в принципе уже сам понял что тупанул и rtc это совсем не то

Сообщение отредактировал GeneralProger - Jul 17 2016, 00:51
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 17 2016, 08:50
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
GeneralProger
сообщение Jul 18 2016, 08:48
Сообщение #11





Группа: Участник
Сообщений: 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 и все примеры разнятся.

Вы не могли бы привести пример?
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 18 2016, 09:54
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Jul 18 2016, 16:53
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(1113 @ Jul 16 2016, 14:45) *
эта платформа оч древняя (> 10 лет), и ядро линукса - тоже.

можно предложить несколько вариантов:
1) пытаться искать сборку (openwrt, yocto и тд) для конкретно этой платы, или подбирать наиболее похожую плату, с этим же процессором. если получится - будете иметь современный линукс со всеми рабочими примерами использования GPIO и тд;
2) искать документацию на эту плату и этот линукс того времени;
3) забить на плату, и взять современное железо, которое поддержано современным софтом


Ядро линукса 2.4 в 2005 уже было устаревшим.

Если вы поставите современный линукс, то там доступ к ножкам очень простой даже для тех кто не имеет понятия ни о линуксе ни о программировании.
Go to the top of the page
 
+Quote Post
Jury093
сообщение Jul 18 2016, 18:13
Сообщение #14


Знающий
****

Группа: Участник
Сообщений: 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;
}
Go to the top of the page
 
+Quote Post
GeneralProger
сообщение Jul 19 2016, 18:08
Сообщение #15





Группа: Участник
Сообщений: 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 на компьютере, но он ругается на и работать не хочет (наверное из-за другой архитектуры ОС на которой был скомпилирован), вообщем даже это уже огромная проблема, не знаю даже что и делать.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 23:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.45143 секунд с 7
ELECTRONIX ©2004-2016