Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Ядреные модули

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix
Предыдущая тема :: Следующая тема  
Автор Сообщение
alexxxxxxxx
Гость





СообщениеДобавлено: Вт Сен 10 2002 09:43    Заголовок сообщения: Ядреные модули Ответить с цитатой

Народ подскажите, можно ли как то загрузив динамически в ядро первый модуль, а потом и второй, из вторго модуля получиь ссылку (работать как с обычной переменной) на переменную определенную в первом модуле?
Операция типа следующей не проходит:
1. В первом модуле int shared_variable
2. Во втором модуле extern int shared_variable

Однако, вышеприведенная схема обращения через extern переменные к переменным рабочего ядра проходит. Т.е. если в коде откомпилированного ядра присутствует некоторая нестатическая переменная, то ее напрямую (через extern объявление) можно использовать в ядреном модуле.
Вернуться к началу
Dmitry.Karpov http://www.
Гость





СообщениеДобавлено: Вт Сен 10 2002 10:23    Заголовок сообщения: IMHO, обе д.б. shared Ответить с цитатой

Pls, не надо путать статическую переменную с внешней - IMHO, надо обе переменные объявлять extern, а статическая она или динамическая - это дело десятое. IMHO.
Вернуться к началу
alexxxxxx
Гость





СообщениеДобавлено: Вт Сен 10 2002 11:22    Заголовок сообщения: Re: IMHO, обе д.б. shared Ответить с цитатой

Возможно я, извеняюсь, не совсем точно описал ситуацию.
Но если я в первом модуле и во втором объявлю переменную как extern, то, по-моему, я и в первом модуле не смогу пользоваться такой переменной (ведь ее нигде (в ядре) пока не существует). А необходимо следующее: загрузить первый модуль в котором есть переменная, к которой можно обращаться из второго модуля, который загрузится позднее. И ошибка возникает не в период выполнения, а в период связывания (работает каманда ld), когда загружается второй модуль (ошибка вроде не могу найти такую то _переменную в сегменте text).
Все эти дела делаются под freeBSD...

А, вообще, пока я в поиске попробую объявить обе переменные как extern, может и сработает.
Вернуться к началу
Dmitry.Karpov http://www.
Гость





СообщениеДобавлено: Вт Сен 10 2002 12:01    Заголовок сообщения: Где логика? Ответить с цитатой

Насколько я понимаю, любая переменная, объявленная стандартными средствами Си (типа int или static int) является внутренней переменной модуля, иначе всем программистам пришлось бы согласовывать имена переменных. Так что для доступности переменной из других модулей надо их как-то объявлять - может, одинаково, а может, и по разному (типа загружаемый раньше модуль должен объявить переменную как свою, а остальные - как чужую).

Рекомендую посмотреть модуль miibus и модули сетевых карт, которые его используют (ed и разные PCI-ные), благо исхдники доступны.
Вернуться к началу
alexxxxxxxxxx
Гость





СообщениеДобавлено: Вт Сен 10 2002 14:49    Заголовок сообщения: Логики никакой просто надо сделать Ответить с цитатой

То, что надо как то по особенному объявлять переменые или загружать второй модуль с некоторым особенным параметром это уж как пить дать. Тока вот как?..
Исходников, miibus не нашел, а вот ed и ему подобных нашел, но эти дрова выполнены не ввиде модулей, а компиляться в ядро. А с ядром проблем нет, к его не extern переменным из модулей можно через extern обращаться.

Спасибо за предложенные советы. Я их опробывал, но пока положительного результата нет.
Буду копать...
Вернуться к началу
Dmitry.Karpov httpwww.pi2
Гость





СообщениеДобавлено: Ср Сен 11 2002 13:49    Заголовок сообщения: Не нравится ed - попробуй fxp или любой другой, работающий через miibus. А исходники miibus д.б. в ядре - поищи файл "miib Ответить с цитатой

-
Вернуться к началу
alexxxxxx
Гость





СообщениеДобавлено: Чт Сен 12 2002 11:22    Заголовок сообщения: Все еще в поиске... Ответить с цитатой

miibus, он в стандартной комплектации для всех версий freeBSD или тока для какой то конкретной (у меня версия ядра 2.ХХ?
Побробую скачать откуда нибудь этот miibus.
Да, если miibus ето KLD, то меня это не очень устраивает, потому как KLD это системно поддерживаемая технология динамической загрузки драйверов (да и не очень универсальная), а в моем unix такой траблы нет, а посему приходится извращаться.
Читал о наличии такой вещи как Stream технология для драйверов (когда драйвера разбиваются по уровням и взаимодействуют друг с другом через потоки). Вот это то что надо, но попытки найти поддержку Stream в моем UNIX не привели к положительному результату, что и обязывает делать нечто подобное самому без внесения, однако, изменений в стандартное (откомпилированное и загружаемое) ядро.

А вообщем пока нашел решение завести некоторую переменную типа указатель на void, расположенную по конкретному физическому адресу и дать знать об этом адресе остальным загружаемым драйверам. Опасность в том какой физический адрес выбрать что бы в какой то момент не рухнула система или мои данные.
Я чисто интуитивно остановился на адресе в первом мегабайте (ядро вроде начинает грузиться поверх первого метра), там, где в случае MS DOS должны располагаться io.sys и что то еще... Хотелось бы увидеть мнения на сей счет.
Вернуться к началу
Dmitry.Karpov
Гость





СообщениеДобавлено: Чт Сен 12 2002 11:26    Заголовок сообщения: Ну и старье!!! Ответить с цитатой

Во FreeBSD'2.x действительно еще не было динамически загружаемых модулей, так что рекомендую перейти на более новую версию, благо уже доступна 4.6.2 и на подходе 5.0. Лично я даю советы на основании 4.4.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Unix Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...