Skip to the content.

BusyBox

Склонируем BusyBox v1.36:

git clone --depth 1 --branch 1_36_stable git@github.com:mirror/busybox.git
cd busybox

Сборка BusyBox

Скомплировать нужно статический исполняемый файл (без линковки с динамическими библиотеками):

CROSS_COMPILE=arm-linux-gnueabi- LDFLAGS=--static ARCH=arm make defconfig
CROSS_COMPILE=arm-linux-gnueabi- LDFLAGS=--static ARCH=arm make install -j CONFIG_PREFIX=../rootfs
cd ../rootfs

В каталоге rootfs будет развернутый образ BusyBox.

Подготовка initramfs

Добавим каталоги, в которые будут смонтированы procfs, sysfs, devtmpfs, а так же каталог для init-скриптов:

mkdir -p proc sys dev etc/init.d

Создадим init-скрипт etc/init.d/rcS:

#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mdev -s

Добавим ему разрешение на запуск:

chmod +x etc/init.d/rcS

Соберем initramfs в единый CPIO-архив:

find . | cpio -o --format=newc > ../rootfs.img

Запуск

Запустим QEMU с initramfs на основе BusyBox:

qemu-system-arm -M virt -cpu cortex-a15 -kernel zImage -nographic -initrd rootfs.img -append "rdinit=/sbin/init"

После загрузки ядра Linux, управление будет передано в систему инциализации /sbin/init, которую из коробки предоставляет BusyBox.

Система инициализации выполнит init-скрипт etc/init.d/rcS и предоставит консольный доступ:

[    7.680274] Run /sbin/init as init process

Please press Enter to activate this console. 
~ # 

BusyBox предоставляет различные популярные консольные UNIX-утилиты, такие как cat и многие другие:

~ # cat /proc/cpuinfo 
processor	: 0
model name	: ARMv7 Processor rev 0 (v7l)
BogoMIPS	: 125.00
Features	: half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm 
CPU implementer	: 0x41
CPU architecture: 7
CPU variant	: 0x4
CPU part	: 0xc0f
CPU revision	: 0

Hardware	: Generic DT based system
Revision	: 0000
Serial		: 0000000000000000