slavayo777 0 8 апреля, 2010 Опубликовано 8 апреля, 2010 (изменено) · Жалоба Есть у меня сабжевый кит с линукс на борту. На нем есть 3 светика r y b подключенные к портам GPIO 416,417,418... Ясен пень нужно на эти порты записать 0, и они зажгуться... начал с поиска как пользоваться GPIO... http://www.mjmwired.net/kernel/Documentation/gpio.txt посмотрел в /dev/ и не нашел модуля gpio... попробовал ~modprobe gpio результат FATAL: Module gpio not found. есть ли другой способ их зажечь?? если нет, то как поставить этот модуль... хотя бы ссылку где взять и как ставятся модули в линукс... линукс собирался в Ltib с диска к киту... Linux version 2.6.20.6 ([email protected]) (gcc version 4.0.2 20060628 (Wasabi)) Изменено 8 апреля, 2010 пользователем Славка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cpl 0 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Есть у меня сабжевый кит с линукс на борту. На нем есть 3 светика r y b подключенные к портам GPIO 416,417,418... Ясен пень нужно на эти порты записать 0, и они зажгуться... начал с поиска как пользоваться GPIO... http://www.mjmwired.net/kernel/Documentation/gpio.txt посмотрел в /dev/ и не нашел модуля gpio... попробовал ~modprobe gpio результат FATAL: Module gpio not found. есть ли другой способ их зажечь?? если нет, то как поставить этот модуль... хотя бы ссылку где взять и как ставятся модули в линукс... линукс собирался в Ltib с диска к киту... Linux version 2.6.20.6 ([email protected]) (gcc version 4.0.2 20060628 (Wasabi)) попробуйте поискать в ядре gpio char interface: (для uclinux): device drivers->charaster devices->simple gpio char interface далее пересобрать ядро. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slavayo777 0 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба У меня не ucLinux :( нет там нигде такого... есть в кросстулах две библиотеки ioctl.h и ite_gpio.h... чо это такое до сих пор вдуплить не могу :( но явно в них над ковыряца... Чо ж так трудно то светик зажечь в Линуксе? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Чо ж так трудно то светик зажечь в Линуксе? :) Возьмите примеры от другого процессора и посмотрите как делается (несколько способов). Этот вопрос неоднократно обсуждался для AT91SAM926x в разных местах и на разных форумах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slavayo777 0 8 апреля, 2010 Опубликовано 8 апреля, 2010 · Жалоба Возьмите примеры от другого процессора и посмотрите как делается (несколько способов). Этот вопрос неоднократно обсуждался для AT91SAM926x в разных местах и на разных форумах. Вот именно что у других процессоров есть либо драйвер, либо функции управления портами в BSP. А у этого не нашел таких. У этого проца GPIO привязан к памяти. Чтоб что то изменить надо обращаться непосредсвтенно в область памяти... Но как то это через попу получается... Пока внятного примера для этого проца не нашел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slavayo777 0 9 апреля, 2010 Опубликовано 9 апреля, 2010 (изменено) · Жалоба #include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <sys/mman.h> #define PIO_BASE 0x0x00001400 volatile unsigned int *CPDATD; //PortD data register volatile unsigned int *CPDIR2D; //PortD datadirection2 register int main (void) { //long delay=128000, delay2=100; unsigned char *gpio; int fd; fd = open("/dev/mem", O_RDWR); if (fd < 0){ printf("Failed to open /dev/mem"); return fd; } gpio = mmap(0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, PIO_BASE); CPDATD = (unsigned int *)(gpio + 0x4C); //data CPDIR2D = (unsigned int *)(gpio + 0x54); *CPDIR2D |= 0x02;//set output *CPDATD ^= (1 << 16);// turn ON Red LED (port D16) return 0; } Вот такую програмку накатал...В даташите на mpc8323e есть адресс: 0x00_1400–0x00_17FF QUICC Engine parallel I/O ports 168 bytes 1 Kbyte Вот только запускаю и выдает Segmentation fault... причем ругается когда я записываю что то в память... *CPDIR2D |= 0x02;//set output *CPDATD ^= (1 << 16);// turn ON Red LED (port D16) На эти две строчки... Есть смутное сомнение, что адресс из даташита не имеет никакого отношения к памяти линукса... Она распределяет как ей удобней... в исходниках кернела не нашел адресса для I/O... такое ощущение что в этой сборке зажечь светик тупо невозможно :( Изменено 9 апреля, 2010 пользователем Славка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 9 апреля, 2010 Опубликовано 9 апреля, 2010 · Жалоба Посмотрите как реализовано для других архитектур и попробуйте сделать по аналогии. (Исходники ядра). :bb-offtopic: На форуме кросс-постинг наказуем. Выберите тему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться