«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»
    История и архитектурная организация. Что это и с чем его обычно кушают. Интерестно, да и для общего развития…

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 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…

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