2008-09-13 10 views
36

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

Спасибо!

+1

Все упоминают только Linux: рассмотрим возможность просмотра FreeBSD или другого варианта BSD. Поскольку они были основаны на кодексе, разработанном в университете, и участвующие в нем люди обучали курсам на основе этого кода. Можно утверждать, что это может быть лучший опыт обучения. Также есть http://www.amazon.com/Design-Implementation-FreeBSD-Operating-System/dp/0201702452 для получения хорошего обзора – 2011-02-04 10:10:18

ответ

33

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

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

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

Understanding the Linux Kernel - очень хорошая ссылка с подробным описанием конструкции из ядра подсистемы

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

Linux Kernel Module Programming Guide - Некоторые более вводный материал

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

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

Linux Kernel Makefiles (kbuild)

Последних но не в последнюю очередь, просмотрите каталог документации для дистрибутива ядра.

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

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

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

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

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

1

Некоторые вещи, чтобы быть готовым к:

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

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

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

3

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

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

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

5

Абсолютно must is this книга Rubini. (доступно как в виде печатной копии, так и в виде бесплатной мягкой копии)

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

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

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

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^