Я работал во встроенных ОС, таких как uCOS, ThreadX. Пока я кодировал приложения в Linux, сейчас я планирую начать изучать ядро Linux. У меня есть несколько вопросов относительно окружающей среды.
Какой дистрибутив является лучшим, в котором есть удобные инструменты для разработки ядра? (до сих пор я использовал RHEL и Fedora. Хотя мне это удобно, похоже, в Ubuntu есть встроенные скрипты для простой компиляции ядра, например
make_kpkg
, и т. д.)Можете ли вы описать лучшие настройки для отладки ядра? При отладке других встроенных ОС я использовал последовательный порт для вывода прогресса, JTAG и т. Д. Какие настройки используют разработчики ядра Linux? (Достаточно ли моего тестового ПК с последовательным портом для моих нужд? Если да, как настроить ядро для дампа на последовательный порт?) Я планирую перенаправить сообщения ядра на последовательную консоль, которые будут считываться на моем ноутбуке.
Какой инструмент лучше всего подходит для отладки и отслеживания кода ядра? Как упоминалось ранее, последовательная консоль - единственный путь? Или какой-либо интерфейс IDE / JTAG существует для ПК?
источник
Ответы:
Мой личный вкус для разработки Linux Kernel - Debian. Теперь для ваших очков:
Как вы, наверное, догадались, Ubuntu не вносит ничего нового в ядро, чтобы облегчить процесс разработки, кроме того, что уже доступно в Debian. Например, make_kpkg - это функция Debian, а не Ubuntu. Вот несколько ссылок, которые помогут вам начать работу над общими задачами разработки ядра Linux в Debian:
Самый простой способ отладки ядра - использование QEMU и GDB. Некоторые ссылки, с которых можно начать:
Тем не менее, вы должны знать, что этот метод не подходит для определенных сценариев, таких как отладка определенных аппаратных проблем и т. Д., Для которых вам лучше использовать физическую последовательную отладку и реальное оборудование. Для этого вы можете использовать KGDB (он работает и с использованием Ethernet). KDB также хороший выбор. Да, и между прочим, и KGDB, и KDB были объединены в ядро Linux. Подробнее об этих двух здесь . Еще один замечательный метод, который прекрасно работает для проблем, не связанных с аппаратным обеспечением, - это использование ядра Linux в пользовательском режиме . Запуск ядра в пользовательском режиме, как и любой другой процесс, позволяет отлаживать его, как и любую другую программу ( примеры ). Подробнее о пользовательском режиме Linuxсюда . UML является частью ядра Linux начиная с версии 2.6.0, поэтому вы можете собрать любую официальную версию ядра выше этой в режиме UML, выполнив следующие действия .
См. Пункт 2. К сожалению, здесь нет лучшего метода, так как каждый инструмент / метод имеет свои плюсы и минусы.
источник
Если вы разрабатываете для встраиваемой платформы, которая не основана на аппаратном обеспечении i386, вам придется кросс-компилировать. Проект Emdebian предоставляет наборы инструментов для разработки для многих архитектур (ARM, m68k, MIPS и др.) На ПК (i386 или amd64). Это означает, что в Debian вы можете просто добавить репозитории и apt-get установить набор инструментов для выбранных целей.
источник
Датчики JTAG существуют, но они довольно дорогие (и компании, которые их строят, имеют эксклюзивные контракты). Лучший способ отладки кода ядра - запустить его в kvm или qemu с помощью gdbserver внутри эмуляции.
источник
По сути, любой основной дистрибутив должен работать нормально для этого (они используют свой собственный дистрибутив, чтобы взломать его). Используйте то, что вам удобнее.
источник