Форум русскоязычного сообщества Ubuntu


Автор Тема: код загрузки модулей  (Прочитано 1019 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
код загрузки модулей
« : 23 Сентября 2009, 22:29:37 »
Люди, привет. Ктонибудь имеет представление в каком участке кода происходит загрузка модулей  ?
Везде пишут что гдето в initrd, это так ? а где она находится ? Конкретно нужно найти место где происходит загрузка модулей в память с присвоением им номера кольца.

кто что знает, слышал, пишите все посмотрю.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #1 : 24 Сентября 2009, 07:00:41 »
Почитай про устройство ядра Linux. Про загрузку ОС.
Кольцо всем модулям ядра присваивается нулевое. Прикладные программы работают на 3ем. остальные не используются.

initrd нужен только когда драйвер загрузочного диска/фс не собран с ядром статически. правда сейчас все больше в initrd спихивают весь набор нужных драйверов. может для более быстрой загрузки... я не знаю уже всех тонкостей.

ну а собственно код загрузки модулей есть в исходниках insmod =)

Оффлайн zilog82

  • Активист
  • *
  • Сообщений: 420
  • Hello, World!!!
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #2 : 24 Сентября 2009, 08:03:16 »
опять рекомендую книгу Бовета - Ядро Линукс, 3 изд.

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #3 : 24 Сентября 2009, 10:35:27 »
загрузку ядра, изучаю, читаю эту книжку, стать, смотрю исходники.
Но так пока и немогу найти куски кода где непосредственно это происходит.

insmod этожа команда.
« Последнее редактирование: 24 Сентября 2009, 16:16:09 от cupper »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #4 : 25 Сентября 2009, 05:56:55 »
ну ты гений. конечно команда. она и загружает модули ядра. смотри что она вызывает и найдешь функции загрузки модуля.

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #5 : 25 Сентября 2009, 13:21:56 »
Цитировать
ну ты гений
я знаю я умный :)

по делу:
почитал статью на IBM про загрузку модулей http://www.ibm.com/developerworks/ru/library/l-lkm/index.html, просматрел исходники функции sys_init_module, но к сожалению не обнаружил там заполнение полей таблицы дескриптора. Возможно ее поля заполняються когда модуль запускаеться из пользовательского простанства, но непонял где это происходит. Переход из пользовательнкого простанство в простр. ядра происходит благодаря системному вызову, можете объяснить поподробней как это происходит ?

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #6 : 28 Сентября 2009, 07:05:09 »
Подробнее в документации Intel на i386 (точнее в документации на твой микропроцессор)

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #7 : 28 Сентября 2009, 11:22:36 »
а причем тут процессор ? он проста смотрит какой номер кольца и решает можно коду делать то что он хочет или нет

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #8 : 28 Сентября 2009, 17:06:59 »
Увы. сначала происходит переход на ring 0  а уже там (в коде ядра) стоит проверка чего надо.
а процессор не смотрит ни на что. если есть trap на int 80h значит будет смена привилегий.
так было на i386. современные процессоры имеют что-то более совершенное. если кто знает пусть расскажет.

Оффлайн cupper

  • Автор темы
  • Любитель
  • *
  • Сообщений: 98
    • Просмотр профиля
Re: код загрузки модулей
« Ответ #9 : 02 Октября 2009, 21:02:38 »
Цитировать
сначала происходит переход на ring 0

вот как раз это мне и надо найти.

такой вопрос: загрузка модулей начинается с системного вызова уровня пользователя init_module, он вызывает функцию sys_init_module, но в коде я нашел только ее объявление. И несколько мест где происходит что с системными вызовами и этой функций, возник вопрос: sys_init_module это функция или же тоже системный вызов но уже уровня ядра ?
сам же отвечаю:
Цитировать
Когда структура module окончательно заполнена необходимыми данными вызывается
функция sys_init_module() (системный вызов на самом деле), которая загружает
модуль в ядро.
« Последнее редактирование: 02 Октября 2009, 21:05:30 от cupper »

 

Страница сгенерирована за 0.032 секунд. Запросов: 25.