![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
приветствую,
скажите как в модуле использовать свои собственные функции. например, основные функции модуля я реализую в module.c свои функции я реализую в файлах 1.c 1.h и т.д. Как скомпоновать модуль со своими функциями? Еще вопрос, какие хидеры я могу подключать в модулях? только из директории include/linux? если можно объясните на простом примере спасибо |
|||
|
||||
null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 4 Всего: 12 |
точно также как и в обычном си приложении, реализуешь в отдельном сишнике, прототив в хедер, хедер цепляешь к загрузочному сишнику http://www.crossplatform.ru/?q=node/338 раздел "2.7. Модули, состоящие из нескольких файлов" Добавлено @ 02:24 если непонятно, то вот так кратенько module.c - основной код модуля, где init и exit my_lib.c - твои функции понятное дело, нужен хедер my_lib.h, который будет подключаться в module.c Makefile будет выглядеть следующим образом
на выходе после отработки make, получишь модуль ядра my_kernel_module.ko если чего напутал, то завтра поправлю или меня поправят, но вроде похоже ![]() Это сообщение отредактировал(а) null56 - 21.1.2011, 02:24 |
|||
|
||||
t_gran |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 621 Регистрация: 13.11.2007 Где: г.Усть-Илимск Репутация: нет Всего: 37 |
GCC. Настольная книга пользователей, программистов и системных администраторов (А.Гриффитс).2004
Глава 4, страница 77. Компиляция программ на языке С -------------------- Я знаю, что ничего не знаю© Сократ ![]() |
|||
|
||||
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
null56, t_gran, спасибо вам, ребята
разобрался вот есть еще такой вопрос: ядро - это процесс? как мне реализовать синхронизацию функционала модуля и обычного приложения? семафоры, очереди сообщений, разделяемая память - этого нет для модулей, как я почитал мне интересно, как например вести обмен данных с модулем и обычной программой? нашел такие примеры: netlink sockets, через файл символьного устройства...но это сложно для меня сейчас есть ли что то наподобие разделяемого буфера? вообще, как попроще реализовать обмен данных между модулем и приложением? |
|||
|
||||
Vicul |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 169 Регистрация: 27.4.2009 Репутация: нет Всего: нет |
||||
|
||||
alexvs11 |
|
|||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: -1 Всего: 10 |
сокеты достаточно удобный вариант но если чисто символьное устройство, то для взаимодействия достаточно read/write по адресу устройства в фс и ioctl соответственно командами видел когда и чтение и запись реализовывали через ioctl - тоже возможно, одновременно понятно что за операция, плюс предоставляется буфер для чтения и записи Это сообщение отредактировал(а) alexvs11 - 21.1.2011, 18:31 |
|||
|
||||
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
alexvs11, спасибо
а как синхронизацию реализовать, есди модуль и приложение будут взаимодействовать через одно символьное устройство? |
|||
|
||||
alexvs11 |
|
|||
hell is here ![]() ![]() Профиль Группа: Участник Сообщений: 518 Регистрация: 21.8.2010 Репутация: -1 Всего: 10 |
драйвер используется несколькими приложениями/потоками?
просто само по себе взаимодействие с драйвером происходит через приходящие в виде потоков callback'и и тут синхронизация соответственно никакая не нужна. вообще были средства синхронизации, linux device drivers читали? |
|||
|
||||
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
нет, один пользовательский процесс взаимодействует с модулем
|
|||
|
||||
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
вот нашел простой код реализации символьного устройства
как синхронизировать запись в символьное устройство между пользовательской программой и модулем?
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 20 Всего: 223 |
В конце концов драйвер может синхронизироваться через mutex с приложением (на уровне ядра это будет ядерный объект futex) (кажется так) |
|||
|
||||
slater |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 168 Регистрация: 20.11.2009 Репутация: -2 Всего: -4 |
xvr, спасибо за совет
![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |