Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > kernel module и свои библиотеки |
Автор: slater 20.1.2011, 18:37 |
приветствую, скажите как в модуле использовать свои собственные функции. например, основные функции модуля я реализую в module.c свои функции я реализую в файлах 1.c 1.h и т.д. Как скомпоновать модуль со своими функциями? Еще вопрос, какие хидеры я могу подключать в модулях? только из директории include/linux? если можно объясните на простом примере спасибо |
Автор: null56 21.1.2011, 02:18 | ||
точно также как и в обычном си приложении, реализуешь в отдельном сишнике, прототив в хедер, хедер цепляешь к загрузочному сишнику 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 если чего напутал, то завтра поправлю или меня поправят, но вроде похоже ![]() |
Автор: t_gran 21.1.2011, 11:31 |
http://www.infanata.com/2007/12/08/gcc.-polnoe-rukovodstvo.html Глава 4, страница 77. Компиляция программ на языке С |
Автор: slater 21.1.2011, 17:45 |
null56, t_gran, спасибо вам, ребята разобрался вот есть еще такой вопрос: ядро - это процесс? как мне реализовать синхронизацию функционала модуля и обычного приложения? семафоры, очереди сообщений, разделяемая память - этого нет для модулей, как я почитал мне интересно, как например вести обмен данных с модулем и обычной программой? нашел такие примеры: netlink sockets, через файл символьного устройства...но это сложно для меня сейчас есть ли что то наподобие разделяемого буфера? вообще, как попроще реализовать обмен данных между модулем и приложением? |
Автор: Vicul 21.1.2011, 17:48 |
Начни вот с этой книги http://forum.vingrad.ru/forum/topic-154696/kw-linux-kernel-development.html |
Автор: alexvs11 21.1.2011, 18:29 | ||
сокеты достаточно удобный вариант но если чисто символьное устройство, то для взаимодействия достаточно read/write по адресу устройства в фс и ioctl соответственно командами видел когда и чтение и запись реализовывали через ioctl - тоже возможно, одновременно понятно что за операция, плюс предоставляется буфер для чтения и записи |
Автор: slater 21.1.2011, 18:36 |
alexvs11, спасибо а как синхронизацию реализовать, есди модуль и приложение будут взаимодействовать через одно символьное устройство? |
Автор: alexvs11 21.1.2011, 18:45 |
драйвер используется несколькими приложениями/потоками? просто само по себе взаимодействие с драйвером происходит через приходящие в виде потоков callback'и и тут синхронизация соответственно никакая не нужна. вообще были средства синхронизации, linux device drivers читали? |
Автор: slater 21.1.2011, 19:06 |
нет, один пользовательский процесс взаимодействует с модулем |
Автор: slater 21.1.2011, 21:06 | ||
вот нашел простой код реализации символьного устройства как синхронизировать запись в символьное устройство между пользовательской программой и модулем?
|
Автор: slater 24.1.2011, 18:23 |
xvr, спасибо за совет ![]() |