Есть плата SK-AT91SAM9260, с ней система сборки в виде образа виртуальной машины.
а именено
/home/user/src/buildroot-2010.02
/home/user/src/linux-2.6.28 - ядро, скрипты сборки внутри
/usr/local/cross-gcc/...
Все собирается. Уже собрал zlib, glib, ncurses и mc. MC на плате запустился!
Хочу собрать вот такой файл:
#include <stdlib.h>
#include <stdio.h>
#include <mach/gpio.h>
int main(void)
{
printf ("Reading GPIO pins...\n");
printf("0 - %d", at91_get_gpio_value(0));
return 0;
}
Собираю командой arm-none-linux-gnuebi-gcc -static test.c -o test. Просто printf работает на плате и все печатает.
А тут не находит иклуд gpio. Он лежит /home/user/src/linux-2.6.28/arch/arm/mach-at91/include/mach.
Вопрос такой, а как сказать компилятору, что я собираю под at91sam, исходники ядра linux-2.6.28 лежат там-то. Какие переменные окружения ему следует указать? какие пути к библиотекам?
Вообщем как сделать некий шаблон для makefile для своего проекта? Может у кого пример под эту платку(с системой сборки от starkit на виртуалке) есть?
пардон, что влезаю..
2Kris почитайте местную [url=http://wiki.starterkit.ru/чтение-запись_физических_адресов_в_linux]WiKi [/url]
или вольную интерпретацию типа
там надо поправить базовый адрес (а может и не надо)
Еще небольшой вопрос по опросу пинов и общей структуры программы остался.
Программа должна осуществлять следующее. Опрос 4-х пинов, на которых ...пусть будут кнопки и 1-го пина, на котором импульсы для счета, минимальная длительность импульса 10 мс.
По каждому нажатию кнопки отправляется snmptrap. Далее добавится telnet, ftp-сервер, возможно gsm какнал и.т.п.
Не подскажите как оптимально построить программу в этом случае. Прерывания по пинам лучше не использовать?
Все это было реализовано на 8-битном контроллере.
Там было все в общем цикле и прерывания:
while (1) {
опрос кнопок
обработка snmp
и.т.д.
}
Как это грамотнее всего реализовать в линуксе?
При этом еще 10 мс импульсы успевать считать.
1. Изучи в документации к ядру Documentation/gpio.txt
2. Внимательно посмотри на arch/arm/mach-at91/board-sam9260ek.c раздел GPIO buttons
3. Посмотри на drivers/input/keyboard/gpio_keys.c
4. Прочесть в Documentation/input/ файлы input.txt и input-programming.txt
У AT91SAM9260 есть 6 аппаратных счетчиков - нет смысла делать счетчик на gpio вручную, к ним нужно только интерфейс удобный придумать (напрмер чтение значения счетчика через файл символьного устройства) , тут зависит от того что вы с этим счетчиком делать хотите. С кнопками удобней было бы сделать свой модуль ядра с работой по прерыванию, но можно и в юзерспейс что-нибуть придумать - как это оптимально сделать у меня мыслей нет кроме опроса в цикле, возможно событие от прерывания через uio в юзерспейс кидать. Можно и через готовые средств - как написал Lampus, но там опять же циклический опрос скорей всего.