LINUX.ORG.RU

Сообщения kuzulis

 

Аналог OVERLAPPED структуры и DeviceIOControl

Форум — Development

Доброго времени знатокам драйверописателям и не только.

Возможно-ли в Linux использовать отслеживание асинхронных событий от некоего девайса, которые не являются событиями от read()/write()?

Допустим, есть некое у-во, от которого мне нужно ловить некоторые события изменения его состояния, грубо - моргание светодиодика. Но мне это нужно делать не поллингом, а в event-based режиме.

В оффтопике я для этих целей могу сделать так:


// получаем хендл у-ва
HANDLE hDevice = ::CreateFile(..., FILE_FLAG_OVERLAPPED);

// создаем событие
OVERLAPPED ov = {0};
ov.hEvent = CreateEvent(...);

// переменная, которая отражает состояние LED
DWORD ledState = 0;

// запускаю отслеживание евента о смене состояния LED
::DeviceIOControl(
    hDevice, 
    LED_TRIGGERED_NOTIFY_ON, 
    NULL,
    0,
    &ledState,
    sizeof(ledState),
    NULL,
    &ov
    );

// где-то жду когда событие произойдет.
::WaitForSingleObject(
    ov.hEvent,
    INFINITE
);

// если оно произошло, то сбрасываю евент и 
// получаю состояние LED

::GetOverlappedResult(
    hDevice,
    &ov,
    &NumberOfBytesTransferred,
    FALSE
);

// ledState теперь содержит текущее состояние LED у-ва 
DWORD newLedState = ledState;

А как сделать подобное в Linux?


// получаю дескриптор у-ва
int fd = ::open();

// делаю ioctl
::ioctl(fd, LED_TRIGGERED_NOTIFY_ON, <но что сюда совать?? >)

// Жду события, но непонятно какой дескриптор сюда
// писать.. По идее нужен не дескриптор у-ва fd,
// а какой-то дескриптор события, но где его взять?
::select(<какой сюда дескриптор нужен???>)

Есть ли какие-то мысли по этому поводу?

Может быть, в ioctl() передавать некую пользовательскую структуру, типа:

// 
typedef struct {
    int efd; // дескриптор события, но как его создать?
    int ledState; // состояние LED
} led_state_t;

led_state_t ls = {0};

ls.efd = <надо как-то что-то создать??>

::ioсtl(fd, LED_TRIGGERED_NOTIFY_ON, &ls);

::select(ls.efd, ...);

// если дождались, то
int newLedState = ls.ledState;

Подскажите, знатоки, как в этом случае быть?

 , , ,

kuzulis
()

QtCreator как IDE для разработки модулей ядра.

Форум — Development

Доброго времени всем.

Суть: Я хочу использовать QtCreator как текстовый редактор с подсветкой синтаксиса и автодополнением для разработки модулей ядра Linux.

Мне нужно, чтобы QtCreator делал поиск заголовков всегда только в конкретном, указанном мною месте, например, в: /usr/src/linux-3.1.7-1-ARCH/include

Я пытался *.pro жестко захардкодить путь к заголовкам:

INCLUDEPATH = /usr/src/linux-3.1.7-1-ARCH/include

Но это не работает. QtCreator все равно сначала по умолчанию ищет заголовки в /usr/include.

Также в свойствах проекта пробовал переключаться на

«Чистая системная среда»

в которой осталось только:

LD_LIBRARY_PATH=/usr/lib PATH=/usr/bin:/usr/bin QTDIR=/usr/share/qt

Но ничего не получается.

Что в этой ситуации можно сделать? Что посоветуете?

kuzulis
()

не компилятся программы !!!

Форум — Development

Всем доброго времени суток!!!

Вступление: имеется мопс 4.1 .. стояло ядро 2.6.15. и стояли заголовочные файлы 2.6.15 Далее я скомпилил ядро 2.6.19 , поставил его и удалил исходники ядра + само ядро 2.6.15 и заголовочные файлы к нему (2.6.15)

Исходники ядра 2.6.19 лежат в /usr/src/linux-2.6.19 .. там же лежит и симлинк linux -> /usr/src/linux-2.6.19

Но чегото проги не хотят компилиться.. вылетает ошибка типа препроцессора С и т.п. . не находятся некоторые *.h файлы

Так вот вопрос: имея только лишь исходники ядра - как правильно сделать ссылки и на какие каталоги, чтоб стали нормально компилиться проги ??????? (именно для мопса!!!!!)

Я до сих пор не въеду Улыбка как в мопсе настраиваются пути к заголов. файлам и т.п шоб все скомпилилось???? ?

kuzulis
()

просмотр поддерживаемых устройств

Форум — General

Здрасьте!!!!

Вопрос: как просмотреть, с какими устройствами собрано ядро линукса ???

например, модули я могу увидеть в /lib/modules, подгруженные модули командой lsmod...

А как посмотреть если ядро например монолитное??? что в него сунули ???

kuzulis
()

Kopete не подключается к ICQ

Форум — General

Доброго времени суток!

У меня почему-то kopete не хочет коннектится к серверу ICQ ... При запуске она(прога) долго висит типа подключается... при попытках сменить статус, на некоторое время подключается, а затем выдает сообщение типа:"отключился" или "пользователь зашел дважды..." или типа "сервер заблокировал учетную запись ....." ----------- Что не так с КОПЫТОМ ??? Я скачал последнюю версию оного... Хотя тот-же SIM подрубается без проблем к серверам... ----------- Что делать с копытом, мож где надо прописать че-нить... :-) ?

kuzulis
()

RSS подписка на новые темы