Я интересуюсь модификацией внутренних компонентов ядра, применением патчей, обработкой драйверов устройств и модулей, для собственного личного удовольствия.
Существует ли всеобъемлющий ресурс для взлома ядра, предназначенный для опытных программистов?
linux
kernel
linux-kernel
Адам Матан
источник
источник
Ответы:
Путешествие в тысячу кодовых миль должно начинаться с одного шага. Если вы не уверены, с какой из следующих книг начать, не волнуйтесь, выберите любую из ваших книг. Не все те, кто бродят теряются. Поскольку все дороги в конечном итоге соединяются с шоссе , вы будете исследовать новые вещи в своем путешествии по ядру, поскольку страницы развиваются без каких-либо тупиков и, в конечном счете, подключаются к
code-set
. Читайте с умом и помните: код не литература .То, что осталось, - это не вещь, не эмоция, не изображение, не ментальная картина, не память и даже не идея. Это функция. Процесс какой-то. Аспект Жизни, который можно описать как функцию чего-то «большего». И, следовательно, кажется, что это на самом деле не «отделено» от этого чего-то еще. Подобно функции ножа - резать что-то - на самом деле не отдельно от самого ножа. Эта функция может использоваться или не использоваться в данный момент, но потенциально НИКОГДА не является отдельной.
Соломай Штрассен дерандомизированный алгоритм для теста простоты :
Читайте, чтобы не противоречить и не путать; ни верить, ни принимать как должное; ни найти разговоров и бесед; но взвесить и рассмотреть. Некоторые книги нужно попробовать, другие проглотить, а некоторые - разжевать и переварить: то есть некоторые книги следует читать только по частям, другие читать, но не с любопытством, а некоторые - полностью. и с усердием и вниманием.
Читатель должен хорошо разбираться в понятиях операционной системы ; правильное понимание длительных процессов и их различий с процессами с короткими очередями исполнения; отказоустойчивость при выполнении мягких и жестких ограничений в реальном времени. Во время чтения важно понимать и
n/ack
выбор дизайна, сделанный исходным кодом ядра Linux в основных подсистемах.Потоки [и] сигналы [являются] зависимым от платформы следом страдания, отчаяния, ужаса и безумия (~ Энтони Баксте). При этом вы должны быть самооценочным экспертом C, прежде чем углубляться в ядро. Вы также должны иметь хороший опыт работы со связанными списками, стеками, очередями, деревьями красных черных, хэш-функциями и др.
Красота и искусство исходного кода ядра Linux заключается в преднамеренном запутывании кода, которое используется вместе. Это часто необходимо, чтобы передать вычислительное значение, включающее две или более операций, чистым и элегантным способом. Это особенно верно при написании кода для многоядерной архитектуры.
Видео Лекция по системам реального времени , задачи календарного планирования , Memory Compression , барьеры памяти , SMP
Ваша задача - установить высокоскоростной интерфейс связи между аппаратным устройством и программным ядром. Вам следует прочитать справочную таблицу / руководство по аппаратному обеспечению, чтобы понять поведение устройства, его состояния управления и данных, а также предоставляемые физические каналы. Знание ассемблера для вашей конкретной архитектуры и хорошее знание описания оборудования VLSI. Такие языки, как VHDL или Verilog, помогут вам в долгосрочной перспективе.
В : Но почему я должен читать спецификации оборудования?
A : Потому что «существует пропасть из углерода и кремния, которую программное обеспечение не может преодолеть» - Рахул Соннад
Тем не менее, вышеизложенное не представляет проблемы для вычислительных алгоритмов ( код драйвера - обработка нижней половины ), поскольку его можно полностью смоделировать на универсальной машине Тьюринга . Если вычисленный результат верен в математической области , то несомненно, что он верен и в физической области .
Видеолекции по драйверам устройств Linux (Лек. 17 и 18), Анатомия встроенного драйвера KMS , Pin Control и обновление GPIO , Common Clock Framework , Написать настоящий драйвер Linux - Грег КХ
Понимание прохождения пакетов в ядре является ключом к пониманию работы ядра в сети. Понимание этого является обязательным, если мы хотим понять внутренности Netfilter или IPSec и многое другое. Два наиболее важных структур сети Linux ядра слоя:
struct sk_buff
иstruct net_device
Брайан В. Керниган, в статье «Unix для начинающих» (1979), сказал: «Самый эффективный инструмент отладки - это все еще тщательно продуманный в сочетании с разумно размещенными печатными заявлениями». Знание того, что собирать, поможет вам быстро получить правильные данные для быстрой диагностики. Великий компьютерщик Эдсгер Дейкстра однажды сказал, что тестирование может продемонстрировать наличие ошибок, но не их отсутствие. Надлежащая практика проведения расследований должна сочетать необходимость быстрого решения проблем, необходимость развития навыков и эффективного использования экспертов в данной области.
Есть моменты, когда вы достигаете предела, кажется, что ничего не работает, и у вас заканчиваются все ваши варианты. Затем начинается настоящая отладка. Ошибка может обеспечить перерыв, который вам нужен, чтобы освободиться от зацикливания на неэффективном решении.
Видео Лекция по Kernel Debug и профилирование , дампы памяти , анализ , многожильная Отладка с помощью GDB , контроллинг Многоядерного Race Условие , отладка электроника
В системе UNIX все является файлом; если что-то не является файлом, это процесс, за исключением именованных каналов и сокетов. В файловой системе файл представлен
inode
своего рода серийным номером, содержащим информацию о фактических данных, составляющих файл. Виртуальная файловая система LinuxVFS
кэширует информацию в памяти из каждой файловой системы, когда она монтируется и используется. Необходимо тщательно позаботиться о корректном обновлении файловой системы, поскольку данные в этих кэшах изменяются по мере того, как файлы и каталоги создаются, записываются и удаляются. Наиболее важным из этих кэшей является буферный кэш, который интегрирован в способ доступа отдельных файловых систем к своим базовым блочным устройствам хранения.Видеолекции по системам хранения , Flash Friendly File System
Криптография формирует основу доверия в Интернете. Хакерство - это использование средств контроля безопасности в техническом, физическом или человеческом элементах. Защита ядра от других работающих программ - это первый шаг к безопасной и стабильной системе, но этого явно недостаточно: должна также существовать некоторая степень защиты между различными пользовательскими приложениями. Эксплойты могут быть нацелены на локальные или удаленные сервисы.
Видеолекции по криптографии и сетевой безопасности , пространствам имен для безопасности , защите от удаленных атак , защищенному встраиваемому Linux
Вы можете не думать, что программисты - художники, но программирование - чрезвычайно творческая профессия. Это основанное на логике творчество. Образование в области компьютерных наук не может сделать кого-либо опытным программистом, так же как изучение кистей и пигмента не может сделать кого-то опытным художником. Как вы уже знаете, есть разница между знанием пути и ходьбой пути; крайне важно закатать рукава и запачкать руки исходным кодом ядра. Наконец, благодаря полученным таким образом знаниям ядра , куда бы вы ни пошли, вы будете сиять .
Незрелые кодеры имитируют; зрелые кодеры воруют; плохие кодеры портят то, что они берут, а хорошие кодеры превращают это во что-то лучшее или, по крайней мере, во что-то другое. Хороший кодер впадает в кражу целое чувство, которое является уникальным, совершенно отличным от того, из которого оно было порвано.
Видео лекции по рецептам ядра
Linux_source_dir/Documentation/*
источник
Ядро Linux Newbies - отличный ресурс.
источник
Я предлагаю вам прочитать « Ядро Linux в двух словах » Грега Кроа-Хартмана и « Понимание ядра Linux » Роберта Лава. Должен читать :)
источник
Драйверы устройств Linux - еще один хороший ресурс. Это даст вам другой способ проникнуть во внутреннюю работу. Из предисловия:
источник
Смотрите проект документации Linux . В частности, «Руководство по модулю ядра Linux».
источник
Linux Kernel 2.4 Internals - еще один онлайн-ресурс, на который стоит обратить внимание. Похоже, что это довольно подход «с нуля», начиная с загрузки. Вот оглавление:
И, чтобы сделать его еще более сладким, есть новая версия Linux Kernel Development Third Edition от Роберта Лава, и у Slashdot есть обзор.
источник
Начните с Linux Kernel Primer от Claudia Salzberg et al. Хороший для начала для начинающих. Книга Роберта Лава определенно не та книга, с которой начинающим следует начинать. Последняя книга выше среднего уровня.
источник