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

StackOverflow https://stackoverflow.com/questions/60763

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Спасибо!

Это было полезно?

Решение

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

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

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

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

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

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

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

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

Makefile ядра Linux (kbuild)

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

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

А Линксис НСЛУ2 Это недорогой способ заставить работать настоящую встроенную систему, имеющую порт USB для добавления периферийных устройств.Также можно использовать любую из нескольких точек беспроводного доступа, см. Страница совместимости OpenWrt. Имейте в виду, что текущие модели Linksys WRT54G, которые вы найдете в магазинах, больше нельзя использовать с Linux:у них меньше оперативной памяти и флэш-памяти, чтобы снизить стоимость.Cisco/Linksys теперь использует vxWorks на WRT54G с меньшим объемом памяти.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top