Среда взлома ядра

22

Я работал во встроенных ОС, таких как uCOS, ThreadX. Пока я кодировал приложения в Linux, сейчас я планирую начать изучать ядро ​​Linux. У меня есть несколько вопросов относительно окружающей среды.

  1. Какой дистрибутив является лучшим, в котором есть удобные инструменты для разработки ядра? (до сих пор я использовал RHEL и Fedora. Хотя мне это удобно, похоже, в Ubuntu есть встроенные скрипты для простой компиляции ядра, например make_kpkg, и т. д.)

  2. Можете ли вы описать лучшие настройки для отладки ядра? При отладке других встроенных ОС я использовал последовательный порт для вывода прогресса, JTAG и т. Д. Какие настройки используют разработчики ядра Linux? (Достаточно ли моего тестового ПК с последовательным портом для моих нужд? Если да, как настроить ядро ​​для дампа на последовательный порт?) Я планирую перенаправить сообщения ядра на последовательную консоль, которые будут считываться на моем ноутбуке.

  3. Какой инструмент лучше всего подходит для отладки и отслеживания кода ядра? Как упоминалось ранее, последовательная консоль - единственный путь? Или какой-либо интерфейс IDE / JTAG существует для ПК?

rajaganesh87
источник
3
Для # 1 сам Линус использует Fedora, так что, возможно, что-то говорит. Я не знаю достаточно по этой теме, чтобы действительно дать ответ, но мне было бы интересно, что говорят другие люди.
Jonescb
1
make_kpkg происходит из Debian, на котором основан Ubuntu, и моего любимого дистрибутива;)
Удален аккаунт

Ответы:

14

Мой личный вкус для разработки Linux Kernel - Debian. Теперь для ваших очков:

  1. Как вы, наверное, догадались, Ubuntu не вносит ничего нового в ядро, чтобы облегчить процесс разработки, кроме того, что уже доступно в Debian. Например, make_kpkg - это функция Debian, а не Ubuntu. Вот несколько ссылок, которые помогут вам начать работу над общими задачами разработки ядра Linux в Debian:

  2. Самый простой способ отладки ядра - использование QEMU и GDB. Некоторые ссылки, с которых можно начать:

    Тем не менее, вы должны знать, что этот метод не подходит для определенных сценариев, таких как отладка определенных аппаратных проблем и т. Д., Для которых вам лучше использовать физическую последовательную отладку и реальное оборудование. Для этого вы можете использовать KGDB (он работает и с использованием Ethernet). KDB также хороший выбор. Да, и между прочим, и KGDB, и KDB были объединены в ядро ​​Linux. Подробнее об этих двух здесь . Еще один замечательный метод, который прекрасно работает для проблем, не связанных с аппаратным обеспечением, - это использование ядра Linux в пользовательском режиме . Запуск ядра в пользовательском режиме, как и любой другой процесс, позволяет отлаживать его, как и любую другую программу ( примеры ). Подробнее о пользовательском режиме Linuxсюда . UML является частью ядра Linux начиная с версии 2.6.0, поэтому вы можете собрать любую официальную версию ядра выше этой в режиме UML, выполнив следующие действия .

  3. См. Пункт 2. К сожалению, здесь нет лучшего метода, так как каждый инструмент / метод имеет свои плюсы и минусы.

Шиннок
источник
Благодарность! для подробного ответа. Кстати, меня интересуют фс и би подсистемы ядра. какая установка будет лучше для меня?
rajaganesh87
UML и QEMU - это, вероятно, правильный путь, поскольку вы можете легко играть с файловыми системами бесплатно.
Шиннок
Очень хорошие ссылки, только одно. Мой фаворит тоже debian, но Kernel Development можно сделать с любым дистрибутивом. Возможно, слабость - лучший способ, если вы пурист, так как он использует ядро ​​ванили, но конфиги не плохие вещи, вы найдете лучшее.
D4RIO
Найдено еще несколько полезных ссылок: [Ссылка 1] ( ibm.com/developerworks/linux/tutorials/l-kernelhack1/index.html ) [Ссылка 2] ( ibm.com/developerworks/linux/tutorials/l-kernelhack2/index. html )
rajaganesh87
6

Если вы разрабатываете для встраиваемой платформы, которая не основана на аппаратном обеспечении i386, вам придется кросс-компилировать. Проект Emdebian предоставляет наборы инструментов для разработки для многих архитектур (ARM, m68k, MIPS и др.) На ПК (i386 или amd64). Это означает, что в Debian вы можете просто добавить репозитории и apt-get установить набор инструментов для выбранных целей.

Жиль "ТАК - перестань быть злым"
источник
3

Датчики JTAG существуют, но они довольно дорогие (и компании, которые их строят, имеют эксклюзивные контракты). Лучший способ отладки кода ядра - запустить его в kvm или qemu с помощью gdbserver внутри эмуляции.

Саймон Рихтер
источник
Еще лучше использовать пользовательский режим Linux. Linux как обычный пользовательский процесс.
vonbrand
0

По сути, любой основной дистрибутив должен работать нормально для этого (они используют свой собственный дистрибутив, чтобы взломать его). Используйте то, что вам удобнее.

vonbrand
источник