#linux
Всем привет.Не так давно я заинтересовался одним низкоуровневым вопросом работы ОС, но сходу не смог его разрешить. Мне посоветовали (что в принципе и логично) почитать исходники ядра, чтобы прояснить самому себе, как дело обстоит на самом деле. Скачать исходный код ядра убунты не оказалось проблемой, но вот разобраться в нем для меня оказалось довольно проблематично, что и не удивительно. Там столько файлов, и совершенно непонятно, куда копать =(Короче, мне нужен совет или даже методика, как подходить к изучению исходных кодов ядра, да и чужого исходного кода вообще (хотя я сомневаюсь, что тут какая-то методика вообще может быть), не в привязке конкретно к моей проблеме (я умышленно тут не рассказываю, что именно я хочу узнать), а вообще, в принципе. Я хотел бы для начала хотя бы определиться со структурой папок, понять какие файлы за что отвечают, узнать о каких-то возможно основных файлах исходного кода.Был бы очень рад ссылкам на полезные ресурсы или какие-нибудь книги по этой тематике!
Ответы
Ответ 1
Скачать исходный код ядра убунты не оказалось проблемой, но вот разобраться в нем для меня оказалось довольно проблематично, что и не удивительно. Там столько файлов, и совершенно непонятно, куда копать =( Для меня, как и возможно для большинства людей, Был самым простым путь в познании ядра, Копаясь во всех фичах и настройках, Мне приходилось собирать его с нуля. Компилить. Т.е собирать, собирать, собирать, собирать Ещё раз собирать, потом в него грузиться Не бутится, опять, беда, опять идти и компилять. Глядеть в dmesg, искать, вникать, Всё бросить и снова 30-50 минут сидеть и компилить. Зимою можно так согреть ладони, Когда сквозняк и стужа рвутся сквозь занавески штор, Уже пройдя двойные стёкла стеклопакетов, сквозь стены... На ноутбуке ты набираешь make CONFIG. Зачем брать убунтушное, Возьмите дефолтное, прямо на www.kernel.org, Там документация, примерно тут: www.kernel.org/doc В самом начале,на заре, ядро являло из себя лишь базовый функционал, И постоянно дописывалось мудрым Торвальдсом. Все разбирались с ядром по ходу выполнения каких-то маленьких задач. К примеру, для запуска какой-нибудь прекрасной демонюки Необходимо было патчить ядро. Брались исходники, вносился патч и собиралось кастомное ядро. Сейчас же, большинство необходимых вещей, Таких как слойчатай файловая система aufs, И модули прослушивания сетевых интерфейсов, Всё это уже в ядре по-умолчанию, Включается и выключается одной лишь строчкой В конфигурационном файле сборки ядра. Но Вы можете повторить весь этот путь Найти себе интересным такой проект как grsecurity.net Спомощью этого патча можно создать пули-не-пробиваемый сервант С миллионом следящих, логгирующих элементов. Запрещать всё, что только можно запрещать. К слову сказать, достаточно нетривиальной Является задача запуска X-сервера С максимально-возможным "включеным" grsecurity-патчем. В процессе сборки кастомного пули-не-пробиваемого ядра И попытки загрузиться с него, У Вас появится некоторое представление об иерархии всех флагов. Вы сможете понять, что 90% ядра - ни что иное как модули Конкретно взятых железяк, карт сетевых и звуковых И всякого подобного добра. А те, оставшиеся 10% - это и есть само Ядро, Core of Kernel, если можно так сказать. Сетевая, дисковая подсистемы, Шедулер - Планировщик задач, Всякие фичи, хуки, хаки, баги... Хотя, сколько я ни копался во всём этом. До сих пор, большинство сходится во мнении, Что лучше документации, чем сам исходный код - НЕТ. Вероятно, создание этакой "википедии" "ядро-педии" Поверх кода ядра и поддержание документации в up-to-date состоянии Это задача многих миллиардов человеко-часов. Эта задача попросту не подсильна сообществу. По-этому вход в kernel-hacking до сих пор Достаточно высок и требует как минимум хорошего знания C/C++. Короче, мне нужен совет или даже методика, как подходить к изучению исходных кодов ядра, Ищите интересный патч, Вносите... И компильте, сотни раз... После 2 тысяч процедур На Вас снизойдёт озарение. Так было с каждым. И будет так всегда. Faber est suae quisque fortunaeОтвет 2
Ядро Linux - большая и сложная система, поэтому изучать его целиком крайне трудоемко.Начать всегда стоит с ознакомления с основами, чтобы понять, как система работает в целом. Например, прочитать книгу Ядро ОС Linux: руководство системного программиста.Просмотреть заметки для начинающих на kernelnewbies.org.Найти интересующий модуль ядра (исходя из той задачи, которая стоит).Далее - поиск по коду grep'ом и просмотр его построчно. Иногда помогают IDE, которые строят диаграммы вызовов функций и связи между ними.
Комментариев нет:
Отправить комментарий