Изучение хакера ядра и встроенная разработка дома?

Меня всегда привлекали мир взлома ядра и встроенных систем.
Кто-нибудь получил хорошие учебники (+ легкодоступное оборудование), чтобы начать беспорядок с такими вещами?
Что-то вроде комплектов для написания драйверов и т.д., Которые поставляются с хорошей документацией и доступны по цене?

Спасибо!

Ответ 1

Если вы совершенно не знакомы с разработкой ядра, я бы предложил начать с разработки аппаратного обеспечения и перейти к некоторым "программным" ядровым модулям, таким как proc file/sysfs или более сложным примерам создания файловой системы/сети, разрабатывая на uml/vmware/virtualbox/..., так что сбой вашей машины не повредит так много:) Для встроенной разработки вы можете использовать небольшой комплект ARM Development Kit или небольшую машину Via C3/C4 или любой старый ПК, который вы можете записать с вашим домашним USB/PCI/любым устройством.

Хорошим местом для начала является, вероятно, Kernelnewbies.org - у которого много ссылок и полезной информации для разработчиков ядра, а также есть список легко реализуемых задач для новичков.

Некоторые книги для чтения:

Понимание ядра Linux - очень хорошая ссылка, детализирующая дизайн подсистем ядра

Драйверы устройств Linux - больше похож на учебник с большим количеством примеров кода, сфокусированный на том, чтобы вы поймали и объяснили ключевые аспекты linux ядро. Он представляет процесс сборки и основы модулей ядра.

Руководство по программированию модулей ядра Linux - Еще один вводный материал

Как было предложено ранее, просмотр кода Linux всегда является хорошей идеей, особенно, поскольку API ядра Linux имеет тенденцию к изменению довольно часто... LXR помогает в очень хорошем интерфейсе просмотра - lxr.linux.no

Чтобы понять процесс сборки ядра, эта ссылка может быть полезна:

Linux Kernel Makefiles (kbuild)

И последнее, но не менее важное: просмотрите каталог документации для дистрибутива ядра.

Вот некоторые интересные упражнения, нагло украденные из класса разработки ядра:

  • Напишите модуль ядра, который создает файл /proc/jiffies, сообщающий текущее время в jiffies при каждом доступе к чтению.
  • Напишите модуль ядра, обеспечивающий файл proc/proc/sleep. Когда приложение записывает несколько секунд в виде текста ASCII в этот файл ( "echo 3 > /proc/sleep" ), он должен блокироваться в течение указанного количества секунд. Записи на запись не должны иметь побочного эффекта на содержимое файла, то есть на чтениях, файл должен выглядеть пустым (см. LDD3, глава 6/7).
  • Напишите файл proc, в котором вы можете временно сохранить некоторый текст (используя эхо "blah" > /proc/pipe) и вытащите его снова (cat/proc/pipe), очистив файл. Следите за проблемами синхронизации.
  • Измените примерный пример канала для регистрации в качестве символьного устройства /dev/pipe, добавьте распределение динамической памяти для запросов на запись.
  • Напишите действительно простую файловую систему.

Ответ 2

Абсолютная должна эта книга Рубини. (доступный как в виде печатной копии, так и в бесплатной мягкой копии)

Он дает реализацию нескольких фиктивных драйверов, которые не требуют, чтобы у вас было какое-либо оборудование, отличное от вашего компьютера. Итак, для начала работы в разработке ядра это самый простой способ.

Что касается выполнения встроенных работ, я бы рекомендовал приобрести один из многочисленных SBC (одноплатных компьютеров), которые находятся там. Есть ряд из них, которые основаны на процессорах x86, как правило, с интерфейсами PC/104 (электрически PC/104 идентичен стандарту шины ISA, но на основе стекируемых разъемов, а не разъемов) - очень простое интерфейсное пользовательское оборудование)

У них обычно есть разъемы vga, которые облегчают отладку.

Ответ 3

Для встроенного взлома Linux простой маршрутизатор Linksys WRT54G, который вы можете купить везде, является платформой разработки http://en.wikipedia.org/wiki/Linksys_WRT54G_series:

WRT54G отличается тем, что является первым сетевым устройством потребительского уровня, выпущенным исходным кодом прошивки для выполнения обязательств GNU GPL. Это позволяет программистам модифицировать прошивку для изменения или добавления функциональных возможностей устройства. Несколько сторонних проектов прошивки предоставляют общественности расширенную прошивку для WRT54G.

Я попытался установить OpenWrt и DD-WRT. Вы можете проверить их как отправную точку для взлома на недорогой платформе.

Ответ 4

Для начала лучший способ - прочитать много кода. Поскольку Linux является Open Source, вы найдете десятки драйверов. Найдите тот, который работает в некотором роде как то, что вы хотите написать. Вы найдете достойный и относительно простой в понимании код (loopback device, ROM fs и т.д.).

Вы также можете использовать lxr.linux.no, который является перекрестным ссылкой на Linux. Если вам нужно выяснить, как что-то работает, и нужно заглянуть в код, это хороший и простой способ.

Также есть книга O'Reilly ( "Понимание ядра Linux", 3-е издание - о ядрах 2.6), или если вы хотите что-то бесплатно, вы можете использовать книгу Advanced Linux Programing (http://www.advancedlinuxprogramming.com/). Существует также множество конкретных документов о файловых системах, сети и т.д.

Ответ 5

Некоторые вещи, которые нужно подготовить для:

  • вы будете выполнять кросс-компиляцию. Встраиваемое устройство будет использовать процессор MIPS, PowerPC или ARM, но не будет иметь достаточной мощности, памяти или хранилища центрального процессора для компиляции своего ядра в разумные сроки.
  • Встраиваемая система часто использует последовательный порт в качестве консоли, и для снижения стоимости обычно нет разъема, спаянного на производственных платах. Отладка паники ядра очень сложна, если вы не можете припаять к разъему последовательного порта, у вас мало информации о том, что пошло не так.

Linksys NSLU2 - недорогой способ получить реальную встроенную систему для работы с, и имеет порт USB для добавления периферийных устройств. Можно также использовать любой из нескольких точек беспроводного доступа, см. Страницу OpenWrt. Знайте, что текущие модели Linksys WRT54G, которые вы найдете в магазинах, больше не могут использоваться с Linux: у них меньше оперативной памяти и Flash, чтобы снизить стоимость. Cisco/Linksys теперь использует vxWorks на WRT54G с меньшим объемом памяти.

Если вы действительно хотите в нее попасть, оценочные комплекты для встроенных процессоров начинаются от пары сотен долларов США. Я бы рекомендовал не тратить на них деньги, если вы не нуждаетесь в этом профессионально для работы или консультационного контракта.

Ответ 6

Я совершенно новичок в взломе ядра:) Я решил купить две книги "Linux Program Development: руководство с упражнениями" и "Написание драйверов устройств Linux: руководство с упражнениями". Они очень четко написаны и обеспечивают хорошую базу для дальнейшее обучение.