Видео смотреть бесплатно

Смотреть подборки видео

Официальный сайт itartass-sib 24/7/365

Смотреть видео бесплатно

02.02.10 03:07 dementiy

CodingС чего начать исследование ядра Linux?

Итак, первое и самое важное это конечно же исходный код ядра. Взять его можно на сайте kernel.org. Могу посоветовать скачать, как последний релиз (на сегодняшний день это 2.6.32.7), так и тот, на котором работает ваша система. На случай, если соберетесь писать модули ядра, то установите заголовочные файлы. В ubuntu это можно сделать командой:

sudo apt-get install linux-headers-`uname-r`

Второе, нам необходим редактор с помощью которого мы будем ориентироваться в ядре. Для этого необходимо, чтобы ваш редактор поддерживал (например модулями) ctags. Для начала установим ctags:

sudo apt-get install exuberant-ctags

Создать файл с тегами можно к примеру командой:

ctags -R -o out_tags_file

Выбор редактора это дело каждого (vim, emacas, gedit, etc), мой выбор пал на старенький Nedit (Nirvana Editor). После того, как вы выбрали редактор остается только загрузить файл с тегаи (в nedit это делается так: File -> Load tags file). Также есть и разные online навигаторы по ядру, вот довольно неплохой ресурс на мой взгляд.

Далее документация. Главную документацию нам предоставляют исходные тексты ядра. Они представлены в виде 9 раздела справочного руководства (man). Для того, чтобы их установить необходимо открыть каталог с исходным кодом. Далее:

1
2
make mandocs
sudo make installmandocs

*как я понимаю там собраны только те функции, которые экспортируются ядром

Может понадобиться документация по системным вызовам, чтобы ей пользоваться необходимо установить пакет manpages-dev:

sudo apt-get install manpages-dev

*информация из manpages-dev находится во 2 и 3 разделах руководства man

Также некоторую документацию можно найти в каталоге Documentation исходных текстов ядра. Из обычной печатной литературы сложно что-либо рекомендовать просто потому, что печатные издания в России несколько устаревшие (отстают года на 2 от издания в стране «производителя», а для ядра это немаленький срок) в связи с затратами времени на перевод, но в любом случае в них есть довольно много актуальной информации. Можете время от времени заглядывать в рассылку LKML и следить за происходящим.

Теперь установим Git, чтобы быть в курсе «вся и всего»:

sudo apt-get install git-core

Создайте папку в удобном для вас месте, куда будет скачано дерево ядра Linux (Linux kernel tree. Внимание! На сегодняшний день это чуть более 700 Мб):

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6

Для большего удобства поставим GUI (для gnome):

sudo apt-get install giggle

*для kde можно установить qgit: sudo apt-get install qgit

Есть неплохое руководство на русском для ознакомления с возможностями git.

Также в процессе изучения могут понадобиться отладчик и трассировщики. В большинстве систем они установлены «из коробки». В качестве отладчика используется gdb (руководство на русском), а в качестве трассировщиков ltrace и strace (конечно вы можете использовать другой отладчик и другие трассировщики).

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

P.S. Забыл сказать о самом главном - если уж начали изучать, то добейте до конца =) и как всегда pdf'ка (и тут). Теперь все. Вечер поздний - всем доброй ночи.


Теги:

NickNill 02.02.10 03:17 # +0
а продолжение? =)
digiwhite 02.02.10 06:30 # +4
По мне, несколько не хватает вступления небольшого в стиле "А зачем оно вообще нужно". А то как-то сразу "с места в карьер". А так, спасибо :). Добавил в избранное.
nymiiin 02.02.10 06:55 # +3
в: зачем?
о: исключительно для удовлетворения потребности поковыряться в ядре немытыми руками (потому как для подготовленных разработчиков этот мануал бесполезен)
digiwhite 02.02.10 13:24 # +0
Все унылые скептики ушли на ЛОР.
digiwhite 02.02.10 13:31 # +-1
Мой коммуникатор уныл. Зохавал в себя вторую часть сообщения.

Новичкам после теоретических изысканий ведь нужно откуда-то начинать практические занятия :).
Daria 03.02.10 22:47 # +0
мой профессор "компьютерных архитектур" читает код ядра перед сном.
nymiiin 03.02.10 22:49 # +0
а мой - пишет патчи к ядру перед завтраком
Daria 03.02.10 23:02 # +0
он читает его в бинарном виде.
booley 03.02.10 23:11 # +0
Кошмары не снятся?
Daria 05.02.10 07:51 # +0
я побоялась спросить. он настолько "бородатый", что мне не ловко задавать ему вопросы. может быть такое знакомо, что чем больше человек нёрд, тем меньше его спрашиваешь. житейский парадокс.
bvk 02.02.10 08:54 # +0
Часто лажу в ядро посмотреть, как там что-нибудь работает. Иногда хочется исправить и посмотреть, что получится :)
Username 02.02.10 12:14 # +0
да, я тоже вообще не врубился в проблематику поста
bvk 02.02.10 08:52 # +2
В плане теоретической подготовки я бы для начала предложил ознакомиться с курсом "Операционные системы", иначе большинство используемых концепций будет просто непонятно. Для этого можно пройти одноименный курс на intuit.ru (http://www.intuit.ru/department/os/baseoperatesys/) и/или прочитать одну из книг Таненбаума, лучше, если это будет "ОС: разработка и реализация" (Линус с нее начинал). Несмотря на то, что Таненбаум фанат микроядра и описываемая им архитектура Minix 3 серьёзно отличается от классических Unix, теория и часть практики применима и к Linux, и к FreeBSD и дае местами к Windows.

В качестве путеводителя по ядру рекомендую Бовет, Чезати "Ядро Linux". Хоть там и описывается kernel 2.6.9, но с тех пор ключевые концепции мало поменялись :)

Всю литературу можно взять тут: http://gen.lib.rus.ec.
m039 02.02.10 11:11 # +1
При копании в ядре обхожусь только lxr. Все остальное каждый раз по разному, например ядро с заголовочными файлами можно скачать в архиве, страницы руководства читать в инете.
Если запланировали поведать чего-нибудь больше то с радостью жду, если нет, то бессмысленно.
HTaeD 02.02.10 12:17 # +0
после прочтения заголовка, так и напрашивается "С чего начать что?"

/* отличный ФАК, для тех, кто хочет изучить ядро.
booley 02.02.10 13:39 # +3
Комментарий не закрыт!
digiwhite 02.02.10 13:55 # +2
1
2
3
4

booley -v
Intellectual Welinux.ru comment interpreter version 1.0
 
dementiy 02.02.10 12:26 # +0
Спасибо всем отписавшимся. Попробую ответить одним комментарием.
Зачем оно надо и где вступление? Если вы ходили смотреть pdf, то думаю заметили, что статья называлась "Инструменты kernel hacking'а" (когда оформлял пост изменил на "С чего начать kernel hacking?" - когда ложился спать именно такой заголовок и был!). Мне казалось, что это лучше любого вступления.
На счет литературы повторусь, что в плане разработки ядра ее мало (всего три книги) и они уже старенькие. А вот по операционным системам полностью согласен с bvk и от себя добавлю книгу, в которой общие понятия очень хорошо описаны: В. Столлингс - "Операционные системы".
И последнее. Я не совсем понимаю про "продолжение". Что имеется ввиду? В статье я хотел описать базовый набор документации и средств для исследования ядра. Если имеется ввиду вообще по ядру, то пара постов уже есть и к воскресенью я надеелся дописать продолжение поста о процессах.
m039 02.02.10 13:00 # +0
Извиняюсь, но мне кажется немножко запутанным так начинать изучать ядро. Из примеров хочу привести ссылку, в которой мне больше всего понравился начальный подход по изучению ядра.
Крайне сложно изучать ядро линукс, по тем книжкам которые вы рекомендуете. Это легко если ваша профессия связана с ОС-ми или куча не травленного времени.
Самый хороший способ по изучению(исследованию), это использование самого исходного кода. Например в корне исходников есть замечательная папка "samples". По крайней мере былобы замечательно, если бы вы указали с чего начинать, это был бы взгляд со стороны.
dementiy 02.02.10 14:16 # +0
Хм... В чем-то вы безусловно правы. У разных людей разный подход. Мне хотелось, чтобы люди, которые будут читать мои посты могли самостоятельно продолжить изучение, так как я не могу рассмотреть все (моя профессия не связана с ОС и времени не так уж и много, я просто интересуюсь, как "оно" работает), а для того чтобы продолжить я попробовал рассказать, с помощью чего это можно было бы сделать. Да безусловно исходный код ядра это лучшая документация, поэтому я упомянул о том, как собрать man. Добавлю к сказанному вами, в папке sample находяться примеры, реализованные в качестве модулей ядра, поэтому для интересующихся вот ссылочка в виде вводного курса в написание модулей. А на счет литературы, Столлингс не плохой автор и пишет довольно понятно, поэтому я смело его рекомендую в качестве курса по ОС.
commonD 02.02.10 14:23 # +0
ОФФТОП

Попробовал редактор nedit, так он даже UTF-8 из коробки (?) не поддерживает, а так же поиск ссылок на функции/переменные, определение типа переменных, дополнение структур/функций. Не понимаю чего вы в нем нашли или я чего то не углядел?
dementiy 02.02.10 14:52 # +0
Все верно, UTF-8 не держит. Так, про поиск ссылок. Создаете файл с тегами находясь в папке с исходниками, загружаете его в nedit, выделяете интересующую вас функкцию (структуру и т.д.) и нажимаете Ctrl+D.
commonD 02.02.10 15:07 # +0
В файл с тегами заносятся только определения функций и глобальных переменных.

Под поиском ссылок я имел введу следующие: есть функция и мне стало интересно кто ее еще вызывает (а не где она определена). Так же иногда интересно узнать тип определенной переменной (локальной) не переходя к ее определению, список объявленных функций, и т.д. и т.п.
dementiy 02.02.10 15:22 # +0
Создаете файл с тегами такой командой: "ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .". Загружаете его, но при выборе функции используете не Ctrl+D, а Ctrl+'. Но полностью избавиться от выбора файлов не получится, так как структуры (переменные, функции и т.д.) могут быть определены в разных файлах для разных архитектур.
commonD 02.02.10 15:30 # +0
Похоже что мы не понимаем друг друга.

Ну ладно, речь не о редакторах, полагаю что следует закончить эту ветвь дискуссии.

Лучшие блоги (все 105)
Топ пользователей Топ блогов
Топ пользователей Топ блогов
Элита (все 2088 из 158 городов)
Топ пользователей Топ блогов

Новенькие: residum, ksn135, lestat, warzon, Extender
welinux.ru

Смотреть видео онлайн

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн