TL; р: Създавам изображение на Kali Linux за ARM компютър в програмата debootstrap
, linux
и u-boot
.
Ако сте купили някой не много популярен едноплатец, може да срещнете липсата на изображение на любимия ви комплект за разпространение за него. Почти същото се случи с
Процесът на изтегляне е доста прост:
- Хардуерът е инициализиран.
- От някаква област на устройството за съхранение (SD карта/eMMC/и т.н.) буутлоудърът се чете и изпълнява.
- Товарачът търси ядрото на операционната система и го зарежда в някаква област на паметта и го изпълнява.
- Ядрото зарежда останалата част от ОС.
За моята задача това ниво на детайлност е достатъчно, можете да прочетете подробностите
Изграждане на основната файлова система
Първо трябва да подготвите секции. Das U-Boot поддържа различни файлови системи, за които избрах FAT32 /boot
и ext3 за root, това е стандартното маркиране на изображения за Kali под ARM. Ще използвам GNU Parted, но вие можете да го направите по-познат fdisk
. Вие също ще трябва dosfstools
и e2fsprogs
за създаване на файлова система: apt install parted dosfstools e2fsprogs
.
Разделяне на SD картата:
- Маркирайте SD картата като използваща MBR разделяне:
parted -s /dev/mmcblk0 mklabel msdos
- Създайте раздел за
/boot
за 128 мегабайта:parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB
. Първият пропуснат мегабайт трябва да бъде оставен за самото маркиране и за буутлоудъра. - Създайте root FS за останалата част от капацитета:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Ако внезапно не сте създали или променили файлове на дялове, трябва да изпълните `partprobe`, след което таблицата на дяловете ще бъде препрочетена.
- Създайте файлова система на дял за зареждане с етикет
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Създайте основна файлова система с етикет
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Страхотно, сега можете да го попълните. Това ще изисква допълнително debootstrap
, помощна програма за създаване на root FS на Debian-подобни операционни системи: apt install debootstrap
.
Ние събираме FS:
- Монтирайте дяла към
/mnt/
(използвайте по-удобна точка за монтиране за себе си):mount /dev/mmcblk0p2 /mnt
- Всъщност попълваме файловата система:
debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali
... Параметър--include
указва допълнително инсталиране на някои пакети, посочих статично изграден QEMU емулатор. Позволява ви да изпълняватеchroot
към средата на ARM. Значението на другите опции можете да намерите вman debootstrap
. Не забравяйте, че не всяка ARM платка поддържа архитектуратаarmhf
. - Поради разликата в архитектурите
debootstrap
се извършва на два етапа, като вторият се извършва, както следва:chroot /mnt/ /debootstrap/debootstrap --second-stage
- Сега трябва да завъртите:
chroot /mnt /bin/bash
- запълни
/etc/hosts
и/etc/hostname
цел FS. Попълнете същото като съдържанието на вашия локален компютър, не забравяйте да замените само името на хоста. - Можете да персонализирате всичко останало. По-специално инсталирам
locales
(ключове на хранилище), преконфигуриране на локали и часова зона (dpkg-reconfigure locales tzdata
). Не забравяйте да зададете паролата с командатаpasswd
. - Задайте парола за
root
екипpasswd
. - Подготовката на изображението за мен е завършена с попълване
/etc/fstab
в/mnt/
.
Ще кача в съответствие с таговете, създадени по-рано, така че съдържанието ще бъде така:
LABEL=ROOTFS / автоматични грешки=remount-ro 0 1
LABEL=BOOT /автоматично зареждане по подразбиране 0 0
И накрая, можете да монтирате дяла за зареждане, ще ни трябва за ядрото: `mount /dev/mmcblk0p1 /mnt/boot/`
Изграждане на Linux
За да изградите ядрото (и след това буутлоудъра) на Debian Testing, трябва да инсталирате стандартния набор от GCC, GNU Make и заглавните файлове на GNU C библиотеката за целевата архитектура (имам armhf
), както и OpenSSL заглавки, конзолен калкулатор bc
, bison
и flex
: apt install crossbuild-essential-armhf bison flex libssl-dev bc
. Тъй като товарачът по подразбиране търси файл zImage
на файловата система на дяла за зареждане е време да разбиете флашката.
- Клонирането на ядрото е твърде дълго, така че просто ще изтегля:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.9.1.tar.xz
. Разопаковайте и отидете в изходната директория:tar -xf linux-5.9.1.tar.xz && cd linux-5.9.1
- Конфигурирайте преди компилиране:
make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig
. Конфигурацията е в директориятаarch/arm/configs/
. Ако няма такъв, можете да опитате да намерите и изтеглите готов такъв и да прехвърлите името на файла в тази директория на параметъраKBUILD_DEFCONFIG
. В крайни случаи незабавно преминете към следващия параграф. - По желание можете да промените настройките:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
- И кръстосано компилиране на изображението:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
- Сега можете да копирате файла на ядрото:
cp arch/arm/boot/zImage /mnt/boot/
- И файлове от DeviceTree (описание на наличния хардуер на платката):
cp arch/arm/boot/dts/*.dtb /mnt/boot/
- И инсталирайте модулите, събрани като отделни файлове:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- INSTALL_MOD_PATH=/mnt/ modules_install
Ядрото е готово. Можете да демонтирате всичко: umount /mnt/boot/ /mnt/
Das U Boot
Тъй като буутлоудърът е интерактивен, самата платка, устройство за съхранение и опционално USB към UART устройство са достатъчни, за да тестват работата му. Тоест можете да отложите ядрото и ОС за по-късно.
По-голямата част от производителите предлагат използването на Das U-Boot за първично зареждане. Пълната поддръжка обикновено се предоставя в собствената му разклонение, но не забравяйте да допринесете в upstream. В моя случай платката се поддържа в
Събираме самия буутлоудър:
- Клонирайте стабилния клон на хранилището:
git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
- Да отидем в самата директория:
cd u-boot
- Подготовка на конфигурацията за изграждане:
make mx6ull_14x14_evk_defconfig
. Това работи само ако конфигурацията е в самия Das U-Boot, в противен случай ще трябва да намерите конфигурацията на производителя и да я поставите в корена на хранилището във файла.config
, или сглобени по друг препоръчан от производителя начин. - Ние събираме самото изображение на буутлоудъра с крос-компилатор
armhf
:make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx
В резултат на това получаваме файла u-boot.imx
, това е готово изображение, което може да се запише на USB флашка. Пишем на SD картата, като пропускаме първите 1024 байта. Защо избрах цел u-boot.imx
? Защо пропусна точно 1024 байта? Това предлагат да се направи в
Готово, можете да изтеглите. Буутлоудърът трябва да докладва собствената си версия, малко информация за платката и да се опита да намери изображението на ядрото в дяла. Ако не успее, ще се опита да зареди през мрежата. Като цяло изходът е доста подробен, можете да намерите грешка в случай на проблем.
Вместо заключение
Знаете ли, че челото на делфина не е костеливо? Това е буквално трето око, мазна леща за ехолокация!
Източник: www.habr.com