LINUX.ORG.RU

Программирование модулей


0

0

Доброе время суток! Постановка проблемы. Есть самописный модуль, в котором есть какие-то функции, которые что-то делают. Вопрос: как получить доступ к этим функциям извне, то есть из другого, "неядерного", приложения? Заранее благодарен за ответ.

anonymous

А можно поподробнее? Если не трудно - с примером.

SnakePAN
()

SadStork правильно написал....
Смотря что подразумевать под вызовом функции.
Если как-нить через указатель фенкции то на врядли, если только system call не перегружать.
Через ioctl делается примерно таким макаром.
Регистрируется символьное (к примеру) устройство.
В модуле делается обработка его read, write, ioctl функций.
Таким образом через ioctl передается код функции, исходные данные передаются через тот же ioctl или write в это устройство.
Результаты читаются через read.
За подробностями смотреть Linux Kernel Modules Programming Guide и/или Linux Device Driver.




Dead ★★★★
()
Ответ на: комментарий от Dead

Спасибо. С символьными устройствами разобрался вроде. А вот с блочными - напряг. Объясните дураку на пальцах, плз. Опять же очень желательно с примерами.

SnakePAN
()

Что тебе объяснять?
Ну есть же LKMPG на русском, там же все толково расписано, хоть и для древних ядер.

Dead ★★★★
()
Ответ на: комментарий от Dead

Есть-то она есть конечно. но там описываются драйвера для символьных устройств. А мне нужно блочное. Однако, ладно, почитал я Linux Device Drivers на буржуйском языке, что-то понял, видимо не все, но суть уловил. Возникли другие проблемы : компиляться это все хозяйство не хочет. При подключении linux/blk.h, linux/blkdev.h компилятор ругается на неопределенные макросы INIT_REQUEST и CURRENT и на некоторые вещи в asm/io.h. В чем может быть проблема? Если решишь все-таки помчь, могу выслать и output от gcc иисходники.

PS Я конечно извиняюсь, что достаю наверно глупыми вопросами, но очень надо. Еще вчера надо :)

SnakePAN
()

Установлены ли у тебя исходники ядра, или хотя бы заголовки ядра...
Обычно в /usr/src/linux
Ты в опциях gcc должен указать -I/usr/src/linux/include
По умолчанию же берется /usr/include , что не есть верно.

И попробуй поискать эти макросы во всей дире с заголовками.

Dead ★★★★
()

Ya delal tak:

gcc -D KERNEL -c hello.c -I /usr/src/linux-2.4.18/include -o hello

i vse poluchilos' , tam gde linux-2.4.18 napishi to chto u tebya, esli u tebya tam nichego net tak ustanovi ishodniki kernela.

s uvajeniem Evgeny.

anonymous
()

Конечно у меня установлены исходники ядра :) Однако опция, которую вы оба указали, не помогла :((((

SnakePAN
()

To Dead. Макросы эти находятся в blk.h. он подключен, однако макросы не видятся

SnakePAN
()

Посмотри, может нужно дефайн какой-нить поставить, чтобы макросы стали видны.
И вобще у тебя модуль типа Hello World компиляется?

Dead ★★★★
()
Ответ на: комментарий от Dead

Да, без включения этого хедера все комнпиляется на ура. Ну например, какой дефайн?

SnakePAN
()

ну - нужные тебе определения могут находится в обвязке ifdef
пример.

#ifdef XXX
определения
#endif

пока ты не поставишь #define XXX или не начнешь компилять с
-DXXX - то их не увидишь

SadStork
()

Слушай, SnakePAN, звучат эти дефайны так: -D__KERNEL__ означает компиляцию "ядерной" части, а -DMODULE -- компиляцию модуля :-)

Подпись: твой научный руководитель

P.S.: да пиши ты отчет, черт с ней, с программой - покажем мы что-нибудь Мише, а в комиссии тебя все равно никто не поймет - они слова "ядро" не слышали :-)

no-dashi ★★★★★
()

Прикол :)
Поздновато уже диплом начинать писать :)

По поводу комиссии, то это точно, никто нихрена не поймет.
Я год назад защищал, вот они и не поняли, гады....
Год прошел, а как вспомню, сердце кровью обливается, четверку поставили :(

А я там такую систему навернул :(

Dead ★★★★
()

Короче, слов нет!! :)))) To Dead. Сочувствую. А писать диплом - никогда не поздно :)

SnakePAN
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.