Пользователь
0,0
рейтинг
29 мая 2008 в 07:33

«Linux Kernel Hacking — это просто!» или «Где найти документацию?»

Когда писал курсовую по поводу драйверов, COM-портов и Linux, столкнулся с проблемой — для новичка может возникнуть ситуация, когда он при поиске документации по незнанию пропускает очевидные источники. Затем, в отчаянии, находит какой-нибудь гроб, и не в силах его изучить и правильно применить бросает изучение ядра.



Для меня это стало настоящей проблемой, ведь я не представлял о написании драйверов под Linux ничего! Конечно я проходил устройство Unix в университете на лекциях по «Операционным Системам», но на практике сталкивался лишь с прикладным программированием на C++ и написанием скриптов на bash. Хотя достаточно богатый опыт общения с *nix на уровне администратора мне помог.

Большая часть документации которую я встретил являлась или устаревшей, как например статьи Mike'а Goblin'а (Makefile для модуля ядра доставил мне массу удовольствия...), или достаточно большими для новичка талмутами, вроде The Linux Kernel, разобраться с которыми, не обладая пониманием принципов организации Unix и идеальным знанием английского, задача не из легких.

И так, с чего же начать?..

Если вы этого еще не сделали — обзаведитесь исходными текстами ядра (желательно актуальной версии...).
www.kernel.org — вам нужна latest stable version.

Затем можно отправиться в Google на поиски статей на русском языке, с примерами, про то как вообще программировать и использовать модули ядра Linux. Правильные вопросы в гугль дадут нам следющее:

netsago.org/ru/docs/1/5
«Введение в написание модулей ядра Linux.»
Достаточно подробная и понятная статья. Описано какие инструменты необходимы для сборки модулей и где их взять. Рассматриваются три варианта написания helloworld модуля ядра. Если вы не писали модуль ядра вам сюда.

Вместе с исходным кодом обычно распространяется документация. В linux ее можно получить набрав комманду в папке с исходным кодом, распакованным из архива:
make htmldocs

В документации содержатся описания функций и структур данных используемых модулями в kernel space. Очень полезно при непосредственном написании модуля ядра. Так же доступна в форматах man, ps, pdf и xml.

Часть 1.
Часть 2.
«LXF79: Драйвер своими руками»
Еще одна не плохая статья, чуть подробнее, чуть глубже, чуть больше раскрывает работу с ядром. Но сильно замарачиваться над ее пониманием не стоит. Есть более понятные и более глубокие вещи.

tldp.org/LDP/lkmpg/2.6/html/index.html
«The Linux Kernel Module Programming Guide» на английском языке
Достаточно полный Howto по модулям.
(http://linuxcenter.ru/lib/books/lkmpg.phtml — на русском языке есть довольно свежая версия, но лучше всётаки использовать оригинал)

И, на закуску, пара статей M. Тим Джонса:

www.ibm.com/developerworks/ru/library/l-linux-synchronization/index.html
«Анатомия методов синхронизации Linux»
Механизмы атомарности ядра, мьютексы и спинлоки. Написано очень понятно.

www.ibm.com/developerworks/ru/library/l-linux-kernel
«Анатомия ядра Linux»
История и архитектурная организация. Что это и с чем его обычно кушают. Интерестно, да и для общего развития…

Андрей Григорьев @eigrad
карма
4,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (15)

  • –2
    Если только для саморазвития, написание своих модулей редко полезное занятие.
    • 0
      даже если бы мне за разработку очень не плохо платили, я бы не стал этим заниматься, хотя бы потому, что я уважаю linux, у меня нет таких навыков, я не хочу портить, то на что много людей потратили много сил, я не Торвальдс. Это личное мнение.

      Разработка ядра во многом дело промышленности, люди которым это нужно и должны этим заниматься. Но слава богу, не я.
      • 0
        хех) ну чтож... кесарю-кесарево... а я на 5 курсовую сдал %)))
  • +2
    Также для понимания процессов протсходящих в ядре, рекомендую изучить книгу "Ядро LINUX"(Understanding the Linux kernel), актуальное третье издание. Авторы: Даниель Бовет (Daniel P. Bovet) и Марко Чезати (Marco Cesati). Издательство: BHV, ISBN 978-5-94157-957-0

    Замечательная книга, с примерами на актуальной версии ядра 2.6.11, темы рассматриваемые в книге:

    * управление памятью, буферизация файлов, выгрузка процессов, прямой доступ к памяти;
    * виртуальная файловая система и файловые системы ext2, ext3;
    * создание процессов и планирование их выполнения;
    * сигналы, прерывания и интерфейсы драйверов;
    * хронометрирование;
    * синхронизация внутри ядра ;
    * межпроцессорное взаимодействие (IPC);
    * выполнение программ.

    • 0
      В топике рассматривал только электронные источники документации. Но из бумажных эта книга действительно заслуживает внимания.
    • 0
      не так давно приобрел, впечатлила.
    • 0
      купил на днях. Хорошая, действитльно полезная книга!
  • 0
    eigrad, такую литературу надо читать в оригинале. на английском её море.
    • 0
      представь себе новичка со средним знанием английского (свободно читает, большую часть понимает, но тяжело переводит), который читает The Linux Kernel (не то которое выше, а то которое официальное TLK за 98й год) - увидишь меня... в оригинале, не спорю, читать стоит, но новичкам имхо лучше начинать с простого... и желательно на родном языке... хотя бы для из за того, что начав читать чтолибо другое они бросят это занятие со словами "ну капе-е-ец..."
  • 0
    Вот еще одна очень хорошая книжка - Linux Kernel Development (2nd Edition) (Novell Press) by Robert Love
  • 0
    На личном опыте не скажу, каковы требуемый уровня знаний и качество публикуемых материалов, но слышал об этом сайте только хорошее: http://kernelnewbies.org/ .
    • 0
      Ну как сказать... Эт основной сайт на котором стоит поискать документацию на английском... Мимо него сложно пройти)
  • 0
    Не подскажите, есть ли такой мануал по разработке собственного простейшего девайса и написания для него модуля ядра?
    На tldp.org есть Coffee-HOWTO, где рассказывается как приготовить кофе с помощью Linux. Кому интересно, вот ссылка: http://tldp.org/HOWTO/Coffee.html
    Но мне даже с этим разобраться довольно сложно.
    Что нибудь еще по-проще хотелось бы, например - светодиод, который можно включить и выключить командами:
    echo 1 > /dev/my_dev
    echo 0 > /dev/my_dev
    Это к примеру. Как в Linux делается IO, я тоже не в курсе.
    • 0
      Мануал по написанию модуля ядра и вводу-выводу через /dev/ есть по первой ссылке из этой статьи. Далее наверняка тебе поможет пример http://linuxcenter.ru/lib/books/lkmpg.ph… . Включающийся/выключающийся светодиод можно сделать замкнув его на пару сигналов COM-порта. Про работу с COM-портом - http://bugtraq.ru/library/programming/rs…
      • 0
        спасибо!

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.