- Убедимся, что все необходимые программы установлены в системе (ссылка);
- Склонируем официальный репозиторий Linux (ссылка);
- Если в репозитории ранее что-то собиралось, необходимо выполнить команду
make distclean
.
-
ARCH=arm make defconfig
- создадим дефолтную конфигурацию под архитектуру ARM; -
ARCH=arm make menuconfig
- при необходимости можно изменить параметры конфигурации; -
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- make -j<число ядер> zImage
- соберем ядро под заданную архитектуру;После сборки увидим надпись
Kernel: arch/arm/boot/zImage is ready
. -
ARCH=arm make -j<число ядер> dtbs
- соберем device tree blob (dtb) файлы, чтобы затем выбрать нужный. Это поможет эмулятору понять, какой функционал универсального ядра использовать, т.к. ядро умеет работать с разными платами.
-
QEMU_AUDIO_DRV=none qemu-system-arm -M vexpress-a9 -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "console=ttyAMA0" -nographic
- запустим виртуальную машину с эмулированной ARM платформой Versatile Express Cortex-A9, загрузим ядро из файла zImage, используя файл конфигурации устройства vexpress-v2p-ca9.dtb, направим вывод консоли на виртуальный последовательный порт ttyAMA0 и запустим всё это в текстовом режиме;
Tip
Список поддерживаемых плат можно вывести командой qemu-system-arm -machine help
.
-
После запуска ядра увидим ошибку
Kernel panic
. Это говорит о том, что ядро запустилось, но не смогло найти корневую файловую систему и процесс init в ней.
Таким образом, ядро было успешно собрано и запущено. Сборка корневой файловой системы происходит в задании 18.