![]() |
Модераторы: 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, если не секрет, зачем тебе это? У тебя что-то не работает и ты хочешь сам устранить проблему? Имхо, быстрее будет, если ты баг-репорт отправишь.
Если ты хочешь стать разработчиком ядра, то для этого совсем не обязательно знать полностью его устройство. Так как ты вряд ли будешь переписывать его архитектуру. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
поддерживаю bsa, какая цель?
если "просто так", то мотивация пропадет быстро ;) нужна некая проблема, тогда поиск ее решения даст ответы на вопросы -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
нее, ребят, вы ошибаетесь, цель глобальна, понять все это
|
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
Рекомендую начать с простого
![]() Linux Device Driver 3 (ldd3) Добавлено через 43 секунды http://lwn.net/Kernel/LDD3/ |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
GrayCardinal, спасибо
|
|||
|
||||
смерш |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 2.3.2009 Репутация: нет Всего: нет |
Действительно непонятно какую цель ты преследуешь. Если хочешь стать разработчиком ядра, то ты идёшь по неправильному пути, в конце концов ты просто сломаешься от потока информации которая никак у тебя не будет связываться в общую картину. Под большим опытом в программировании я имел именно это в виду, т.е. опыт работы с ОГРОМНЫМИ проектами, а не владение в совершенстве С. Мотивация как сказал Максим пройдёт ОЧЕНЬ быстро, если ты будешь только читать книги/исходники. Я по этому пути уже прошёл, практически с нулевым результатом на выходе. Это после полугода скитания по всему ядру в надежде что вот вот зацеплюсь за что-то и начну уже писать, хотя никаких попыток для этого и не делал... В общем рекомендую тебе оставить загрузку (на время хотя бы), бородатым хакерам ![]() Изучи: 1. обработку прерываний, исключений, softirq, тасклеты и т.д. 2. синхронизацию в ядре 3. управление памятью и далее выбери подсистему которая тебя больше всего интересует, подпишись на рассылку по ней на http://vger.kernel.org , читай баги на http://bugzilla.kernel.org и пробуй ПИСАТЬ. Ну или если хочеш писать драйвера то читать LDD + опять же ПИСАТЬ. Из книг на первом месте: Ядро Linux. Бовет/Чезати. Ещё книги: Professional Linux Kernel Architecture The Linux Networking Architecturе Understanding Linux Network Internals Essential Linux Device Drivers Linux Kernel in a Nutshell Всё, ![]() |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
смерш, спасибо преогромное за все, я поступлю по твоим советам, потому что ты прав. Спасибо!
|
|||
|
||||
Remiznik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 379 Регистрация: 30.4.2005 Репутация: нет Всего: 1 |
я вот хотел бы разобраться с внутреним строением ядра чтоб оптимизировать его под свои нужды ) тоесть не переписывать а бонально отключить то что мне не нужно то чем я не буду пользоваться а для этого мне кажеться неплохо было знать усстройство ядра )
и чтобы вы мне посоветовали почитать ? |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 16 Всего: 196 |
Remiznik, а ты зайди в конфигуратор ядра и вдумчиво читай описание каждого пункта. Думаю, тебе в большинстве случаев не составит труда отключить лишнее (в крайнем случае, можно сделать модулем многое) или выбрать подходящую именно тебе настройку.
|
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
может кому пригодится перевод LDD http://www.nclug.ru/wiki/index.php?page=knz_ldd2
|
|||
|
||||
GrayCardinal |
|
|||
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 8 Всего: 58 |
vadim90,
ldd, вторая, да еще и русская... Хм ![]() |
|||
|
||||
cupper |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 525 Регистрация: 29.11.2006 Репутация: нет Всего: 1 |
vadim90 если в процессе изучения кода ядра найдешь участки кода отвечающие за начальную загрузку молулей, скинь плиз инфу эту в личку, а то ищу но пока немогу найти.
|
|||
|
||||
kirjanov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 22.1.2006 Где: Dark wood of erro r Репутация: 3 Всего: 15 |
Действительно, один из лучших способов что-либо начать делать для ядра - пытаться фиксить баги, которые появляются на http://bugzilla.kernel.org. Конечно, это достаточно сложная задача, потому что она требует хорошего понимания того, что же собственно случилось и как это примерно работает (хорошо если это банальный NULL pointer dereference, который бросается в глаза). Но тем не менее, иногда все же можно найти задачу, которуй можно решить начинающему разработчику.
Bugzilla это хорошо, но, имхо, ведь есть и способ получше. Как насчет The Linux Driver Project? Проект находится на http://www.linuxdriverproject.org/foswiki/bin/view и ждет помощи ![]()
Для того чтобы потихоньку вьезжать в курс дела, неплохо подписаться на рассылку kernelnewbies.org. Насчет того, чтобы понять работу ядра, то имхо, это хорошая цель. Меня она не покидает уже года 2. Могу сказать что поначалу все очень плохо/непонятно, но потом все же картинка немного прояснится. В конечном итоге все зависит только от вас и вашего упорства. Вот вроде все. PS: из книг я очень советую почитать Professional Linux kernel architecture. Я считаю что это одна из лучших книг по общему устройству ядра Linux(коих не так много). |
|||
|
||||
vadim90 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
kirjanov, спасибо большое, но мне еще рано что-либо фиксить, все свободное время уделяю исходникам ядра и соответствующей литературе
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |