![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
прошу помочь мне в изучении исходников ядра linux.
нарыл пару книг в сети, но вопрос не в этом. Не могу найти откуда ж собственно начать читать сырцы ядра, в книгах про это не нашел. кто может копался в исходниках прошу помочь |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
зависит от того что нужно тебе. -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
я хочу изучить весь процесс работы ядра
|
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 3 Всего: 33 |
![]() -------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
andrew_121, представляю, если тебе нечего говорить по делу, то не пиши тут, пиши в личку, там обсудим
|
|||
|
||||
смерш |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.3.2009 Репутация: нет Всего: нет |
Ну так начни с процесса загрузки : http://duartes.org/gustavo/blog/post/kernel-boot-process Работу всех подсистем ядра знают во всём мире человек 5 отсилы ![]() Поэтому все разработчики ядра специализируются на конкретной подсистеме или даже её части (это к /net например относится). Из подсистем для того чтобы начать можно выбрать /mm. Во всяком случае там хоть что-то понять можна, и литературы достаточно по ней тоже. Хотя бы: Gorman M. — Understanding the Linux Virtual Memory Manage. Вобще имхо без серьёзного опыта в программировании лезть в ядро не стоит (по себе сужу). |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
смерш благодарю за ответ, спасибо
опыт есть, достаточно большой на С. придется постигнуть еще asm |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 компилирует исходники??? |
|||
|
||||
Pointer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 24.6.2008 Где: Cheboksary Репутация: 1 Всего: 1 |
Cпецом по ядру не являюсь, но на мой взгляд сразу в "большое ядро" лезть не стоит, возми что-нибудь поменьше)
Таненбаум Э.,Вудхалл А.Операционные системы.Разработка и реализация.3-е изд. minix, linux первые версии ядра(на фтп кернел.орг, папка historic)...смотри исходники. |
|||
|
||||
смерш |
|
||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.3.2009 Репутация: нет Всего: нет |
Простые программы работают в окружении хоста , который предоставляет ей все необходимые сервисы. Т.е. gcc предоставляет все необходимые библиотеки и ф-ции и в свою очередь ядро предоставляет все необходимые сервисы gcc, который тоже работает в его окружении. В этом окружении начальная точка выполнения находится в ф-ции main(). А ядро работает в своём собственном"автономном окружении". Поэтому никаких main() тут и нет. В общем это забота загрузчика, загрузить образ и сделать jump на точку входа... А дальше всё есть по ссылке в первом посте.
это уже надо лазить по мэйкфайлам, мой интерес пока дотуда ещё недобрался, если вобще когда нибудь доберётся. Но если интересно то тут есть доки по ним Documentations/kbuild/ Это сообщение отредактировал(а) смерш - 11.9.2009, 20:32 |
||||
|
|||||
MAKCim |
|
|||
![]() Воін д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 секунду
есть start_kernel как аналог main к слову говоря, до main в обыычной программе выполняется куча кода libc применительно к ядру этой кучей является все, что выполняется до start_kernel очень просто сама компиляция не требует наличия какй-либо точки входа типа main в обычной программе в процессе компиляции создаются объектные файлы дальше они подаются на вход компоновщику, который собирает целевой файл применительно к ядру, например для x86_64, в arch/x86/kernel/vmlinux.lds.S находится скрипт компоновщика, в котором записаны соответствия между входными и выходными секциями по нему ld собирает статический образ ядра дальше в arch/x86/boot/compressed/Makefile описан процесс сборки bzImage из полученного статического образа -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
Pointer, смерш, MAKCim преогромное спасибо
Это сообщение отредактировал(а) vadim90 - 11.9.2009, 22:00 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
vadim90,
компилятор ничего не ищет, он компилирует, т. е создает объектные файлы дальше работает ld он создает нужный тип выходного файла используя один из скриптов (в зависимости от нужного типа) вместе с объектником самой программы статически линкуется еще ряд объектников, в частности crt1.o из /usr/lib или /usr/lib64 в этом объектнике используется ссылка на символ main так как он линкуется с программой статически, то ld должен найти main среди символом всех входных объекников при сборке ядра после компиляции ld просто выполняет другие скрипты и линкует дрк\угие объектники, где main в явном и неявном виде не используется отсюда нет необходимости в его наличии -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
Друзья, проведя 2 дня за изучением загрузочных кодов и чтением статей (кстати, нашел подробную статью http://linuxportal.ru/entry.php/1506_0_3_0_C/) я пока понял основной алгоритм что и как. Конкретно в данной статье говорится что и как. Меня мучает один вопрос, по-сути, чтоб там разобраться, надо знать аппаратуру на высоком уровне, как и что тестировать и т.д. Ведь кто то этот код писал, придумывал что и в какой последовательности тестировать, включать, вот, и получается так, что это просто надо знать. Может кто подскажет что читать (кроме про проц), каким образом что и как инициализируется, по каким адресам и т.д.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
vadim90, если не секрет, зачем тебе это? У тебя что-то не работает и ты хочешь сам устранить проблему? Имхо, быстрее будет, если ты баг-репорт отправишь.
Если ты хочешь стать разработчиком ядра, то для этого совсем не обязательно знать полностью его устройство. Так как ты вряд ли будешь переписывать его архитектуру. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |