Перейти к содержанию
    

Как работать с GPIO под Linux?

Здравствуйте!

Заранее предупреждаю, что это первый раз когда я имею дело с микрокомпьютерами, раньше работал только с AVR и для меня тема программирования из под Linux темный лес, так что прошу сильно не бить, если я написал не туда или задаю очевидные/глупые/неправильно сформулированные вопросы.

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

Заранее предупреждаю, что это первый раз когда я имею дело с микрокомпьютерами, раньше работал только с 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Первое - читайте документацию на ваш компьютер. Это не АРМ, а стандартный х86 процессор.

Второе - Линукс с "пол-оборота" не осваивается, это достаточно сложная система, по сравнению с АВР программированием.

Третье - Не вижу смысла в данной задаче вообще его использовать, у вас РС-совместимая машина, берете любой компилятор, на вроде Watcom C, под MS-DOS и пишите свою прогу. Если нужно много памяти, используйте dos-4gw.

Ну и напоследок - если уж все-таки хотите влезть в линукс - сначала почитайте о нем по-подробнее...

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

А относительно MS-DOS тема для меня еще менее ясная чем linux, туда мне лезть еще более страшней.

Я пытался найти какую-то информацию, но даже не знаю как мне составить поисковый вопрос, пытался запрашивать gpio linux example и подобного рода, но что-то все совсем не то, может подскажете как мне правильно сформулировать запрос поисковику для решения моей задачи?

 

какая версия ядра?

По команде uname -mrs выводит:

Linux 2.4.31 i486

Изменено пользователем GeneralProger

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

можно предложить несколько вариантов:

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

2) искать документацию на эту плату и этот линукс того времени;

3) забить на плату, и взять современное железо, которое поддержано современным софтом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Третье - Не вижу смысла в данной задаче вообще его использовать, у вас РС-совместимая машина, берете любой компилятор, на вроде Watcom C, под MS-DOS и пишите свою прогу. Если нужно много памяти, используйте dos-4gw.

MS-DOS категорически не рекомендую, нет смысла новичку осваивать программирование под архаичные платформы. Linux не так сложен, тем более для задачи дерганья GPIO.

А вместо той устаревшей железяки что есть у автора (с устаревшей поддержкой Linux и архаичной документацией), я посоветовал бы ему купить что-то современное типа rasbberry/banana pi и прочие odroid-ы с современным актуальным Linux и подходящей документацией.

Осваивать что-то новичку следует с чего-то актуального современного с хорошей документацией.

 

P.S. Тема совершенно не сюда, я бы ее перенес в раздел ОС.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А относительно 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал в интернете по обращению к портам ввода вывода и нашел файл /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 через который можно будет с ними работать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем GeneralProger

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я в принципе уже сам понял что тупанул и 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

конечно тупанули, по вашей ссылке есть область адресов:

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 и все примеры разнятся.

 

Вы не могли бы привести пример?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не могли бы привести пример?

я же писал ранее:

далее ищете примеры программ "как обратиться к порту ввода в линукс" - удобнее смотреть в исходниках программ для x86, какого-нить софтового программатора или IrDA, любую хрень для работы с lpt портами (если вы понимаете что это)

 

мнэ.. а гугль уже не работает?

"как прочитать ioport linux", например

http://www.iakovlev.org/index.html?p=538&m=1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

можно предложить несколько вариантов:

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

2) искать документацию на эту плату и этот линукс того времени;

3) забить на плату, и взять современное железо, которое поддержано современным софтом

 

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

 

Если вы поставите современный линукс, то там доступ к ножкам очень простой даже для тех кто не имеет понятия ни о линуксе ни о программировании.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы не могли бы привести пример?

гугленье - свет, а негугленье - тьма..

вот вам пример (ссылка, параграф 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;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

гугленье - свет, а негугленье - тьма..

вот вам пример (ссылка, параграф 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 на компьютере, но он ругается на и работать не хочет (наверное из-за другой архитектуры ОС на которой был скомпилирован), вообщем даже это уже огромная проблема, не знаю даже что и делать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...