Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> рвопос про исходники ядра linux, нужно помощь 
:(
    Опции темы
vadim90
Дата 11.9.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



прошу помочь мне в изучении исходников ядра linux.

нарыл пару книг в сети, но вопрос не в этом. Не могу найти откуда ж собственно начать читать сырцы ядра, в книгах про это не нашел.

кто может копался в исходниках прошу помочь 
PM MAIL   Вверх
andrew_121
Дата 11.9.2009, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Цитата(vadim90 @  11.9.2009,  13:33 Найти цитируемый пост)
Не могу найти откуда ж собственно начать читать сырцы ядра

зависит от того что нужно тебе.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
vadim90
Дата 11.9.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



я хочу изучить весь процесс работы ядра
PM MAIL   Вверх
andrew_121
Дата 11.9.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 3
Всего: 33



Цитата(vadim90 @  11.9.2009,  14:13 Найти цитируемый пост)
я хочу изучить весь процесс работы ядра 

 smile думаешь успеешь?(до старости). Ты хоть представляешь сколько там строк кода? Хоть приблизительно?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
vadim90
Дата 11.9.2009, 14:41 (ссылка)    | (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



andrew_121, представляю, если тебе нечего говорить по делу, то не пиши  тут, пиши в личку, там обсудим
PM MAIL   Вверх
смерш
Дата 11.9.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.3.2009

Репутация: нет
Всего: нет



Цитата(vadim90 @ 11.9.2009,  14:13)
я хочу изучить весь процесс работы ядра

Ну так начни с процесса загрузки : 
http://duartes.org/gustavo/blog/post/kernel-boot-process
Работу всех подсистем ядра знают во всём мире человек 5 отсилы  smile  
Поэтому все разработчики ядра специализируются на конкретной подсистеме или даже её части (это к /net например относится).
Из подсистем для того чтобы начать можно выбрать /mm. Во всяком случае там хоть что-то понять можна, и литературы достаточно по ней тоже. Хотя бы:
Gorman M. — Understanding the Linux Virtual Memory Manage.
Вобще имхо без серьёзного опыта в программировании лезть в ядро не стоит (по себе сужу). 
PM MAIL   Вверх
vadim90
Дата 11.9.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



смерш благодарю за ответ, спасибо

опыт есть, достаточно большой на С. придется постигнуть еще asm

PM MAIL   Вверх
vadim90
Дата 11.9.2009, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



тоже неплохая статья о процессе загрузки linux

http://www.ibm.com/developerworks/ru/library/l-linuxboot/

там написано: "...вызывается функцияstart_kernelиз(init/main.c), которая осуществляет переход в ту часть ядра Linux, которая не зависит от особенностей конкретной аппаратной платформы. Можно сказать, что это функция main для ядра Linux."

так вот хочу понять, в коде исходников ядра есть функция main или же нет???
как же тогда GNU gcc компилирует исходники???
PM MAIL   Вверх
Pointer
Дата 11.9.2009, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 24.6.2008
Где: Cheboksary

Репутация: 1
Всего: 1



Cпецом по ядру не являюсь, но на мой взгляд сразу в "большое ядро" лезть не стоит, возми что-нибудь поменьше)

Таненбаум Э.,Вудхалл А.Операционные системы.Разработка и реализация.3-е изд.

minix, linux первые версии ядра(на фтп кернел.орг, папка historic)...смотри исходники.
PM MAIL   Вверх
смерш
Дата 11.9.2009, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 2.3.2009

Репутация: нет
Всего: нет



Цитата(vadim90 @ 11.9.2009,  17:40)
тоже неплохая статья о процессе загрузки linux

http://www.ibm.com/developerworks/ru/library/l-linuxboot/

там написано: "...вызывается функцияstart_kernelиз(init/main.c), которая осуществляет переход в ту часть ядра Linux, которая не зависит от особенностей конкретной аппаратной платформы. Можно сказать, что это функция main для ядра Linux."

так вот хочу понять, в коде исходников ядра есть функция main или же нет???

Простые программы работают в окружении хоста , который предоставляет ей все необходимые сервисы. Т.е. gcc предоставляет все необходимые библиотеки и ф-ции и в свою очередь ядро предоставляет все необходимые сервисы gcc, который тоже работает в его окружении. В этом окружении начальная точка выполнения находится в ф-ции main().
А ядро работает в своём собственном"автономном окружении".  Поэтому никаких main() тут и нет.  В общем это забота загрузчика, загрузить образ и сделать jump на точку входа... А дальше всё есть по ссылке в первом посте.

Цитата

как же тогда GNU gcc компилирует исходники???

это уже надо лазить по мэйкфайлам, мой интерес пока дотуда ещё недобрался, если вобще когда нибудь доберётся.
Но если интересно то тут есть доки по ним Documentations/kbuild/




Это сообщение отредактировал(а) смерш - 11.9.2009, 20:32
PM MAIL   Вверх
MAKCim
Дата 11.9.2009, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



загрузку изучать в таком порядке
startup_32 (head_32.S) -> i386_start_kernel (head32.c) -> start_kernel (init/main.c)

в обязательном порядке смотреть linux/init.h, а именно во что разворачиваются макросы *_initcall в зависимости от MODULE (это даст представление о том, каким образом реализуется возможность сборки некоторых частей ядра статически и динамически (в виде модулей))

изучение любой подсистемы начинается с __init функции
пример - sock_init из net/socket.c

Добавлено через 9 минут и 31 секунду
Цитата(vadim90 @  11.9.2009,  17:40 Найти цитируемый пост)
так вот хочу понять, в коде исходников ядра есть функция main или же нет???

есть start_kernel как аналог main

к слову говоря, до main в обыычной программе выполняется куча кода libc
применительно к ядру этой кучей является все, что выполняется до start_kernel


Цитата(vadim90 @  11.9.2009,  17:40 Найти цитируемый пост)
как же тогда GNU gcc компилирует исходники??? 

очень просто
сама компиляция не требует наличия какй-либо точки входа типа main в обычной программе
в процессе компиляции создаются объектные файлы
дальше они подаются на вход компоновщику, который собирает целевой файл
применительно к ядру, например для x86_64, в arch/x86/kernel/vmlinux.lds.S находится скрипт компоновщика, в котором записаны соответствия между входными и выходными секциями
по нему ld собирает статический образ ядра
дальше в arch/x86/boot/compressed/Makefile описан процесс сборки bzImage из полученного статического образа




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vadim90
Дата 11.9.2009, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



Pointer, смерш, MAKCim преогромное спасибо



Это сообщение отредактировал(а) vadim90 - 11.9.2009, 22:00
PM MAIL   Вверх
MAKCim
Дата 11.9.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



vadim90
компилятор ничего не ищет, он компилирует, т. е создает объектные файлы
дальше работает ld
он создает нужный тип выходного файла используя один из скриптов (в зависимости от нужного типа)
вместе с объектником самой программы статически линкуется еще ряд объектников, в частности crt1.o из /usr/lib или /usr/lib64
в этом объектнике используется ссылка на символ main
так как он линкуется с программой статически, то ld должен найти main среди символом всех входных объекников

при сборке ядра после компиляции ld просто выполняет другие скрипты и линкует дрк\угие объектники, где main в явном и неявном виде не используется
отсюда нет необходимости в его наличии


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
vadim90
Дата 12.9.2009, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.9.2009

Репутация: нет
Всего: нет



Друзья, проведя 2 дня за изучением загрузочных кодов и чтением статей (кстати, нашел подробную статью http://linuxportal.ru/entry.php/1506_0_3_0_C/) я пока понял основной алгоритм что и как. Конкретно в данной статье говорится что и как. Меня мучает один вопрос, по-сути, чтоб там разобраться, надо знать аппаратуру на высоком уровне, как и что тестировать и т.д. Ведь кто то этот код писал, придумывал что и в какой последовательности тестировать, включать, вот, и получается так, что это просто надо знать. Может кто подскажет что читать (кроме про проц), каким образом что и как инициализируется, по каким адресам и т.д.
PM MAIL   Вверх
bsa
Дата 13.9.2009, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



vadim90, если не секрет, зачем тебе это? У тебя что-то не работает и ты хочешь сам устранить проблему? Имхо, быстрее будет, если ты баг-репорт отправишь.
Если ты хочешь стать разработчиком ядра, то для этого совсем не обязательно знать полностью его устройство. Так как ты вряд ли будешь переписывать его архитектуру.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0890 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.