Стартиране на GNU/Linux на ARM платка от нулата (използвайки Kali и iMX.6 като пример)

TL; р: Създавам изображение на Kali Linux за ARM компютър в програмата debootstrap, linux и u-boot.

Стартиране на GNU/Linux на ARM платка от нулата (използвайки Kali и iMX.6 като пример)

Ако сте купили някой не много популярен едноплатец, може да срещнете липсата на изображение на любимия ви комплект за разпространение за него. Почти същото се случи с планиран Flipper One. Просто няма Kali Linux за IMX6 (аз готвя), ​​така че трябва да го сглобя сам.

Процесът на изтегляне е доста прост:

  1. Хардуерът е инициализиран.
  2. От някаква област на устройството за съхранение (SD карта/eMMC/и т.н.) буутлоудърът се чете и изпълнява.
  3. Товарачът търси ядрото на операционната система и го зарежда в някаква област на паметта и го изпълнява.
  4. Ядрото зарежда останалата част от ОС.

За моята задача това ниво на детайлност е достатъчно, можете да прочетете подробностите в друга статия. „Някои“ области, споменати по-горе, се различават от платка до платка, което създава известни трудности при инсталирането. Зареждане на сървърни ARM платформи опитвайки се да стандартизираме използвайки UEFI, но докато не е достъпен за всички, ще трябва да събирате всичко отделно.

Изграждане на основната файлова система

Първо трябва да подготвите секции. Das U-Boot поддържа различни файлови системи, за които избрах FAT32 /boot и ext3 за root, това е стандартното маркиране на изображения за Kali под ARM. Ще използвам GNU Parted, но вие можете да го направите по-познат fdisk. Вие също ще трябва dosfstools и e2fsprogs за създаване на файлова система: apt install parted dosfstools e2fsprogs.

Разделяне на SD картата:

  1. Маркирайте SD картата като използваща MBR разделяне: parted -s /dev/mmcblk0 mklabel msdos
  2. Създайте раздел за /boot за 128 мегабайта: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Първият пропуснат мегабайт трябва да бъде оставен за самото маркиране и за буутлоудъра.
  3. Създайте root FS за останалата част от капацитета: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Ако внезапно не сте създали или променили файлове на дялове, трябва да изпълните `partprobe`, след което таблицата на дяловете ще бъде препрочетена.
  5. Създайте файлова система на дял за зареждане с етикет BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Създайте основна файлова система с етикет ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Страхотно, сега можете да го попълните. Това ще изисква допълнително debootstrap, помощна програма за създаване на root FS на Debian-подобни операционни системи: apt install debootstrap.

Ние събираме FS:

  1. Монтирайте дяла към /mnt/ (използвайте по-удобна точка за монтиране за себе си): mount /dev/mmcblk0p2 /mnt
  2. Всъщност попълваме файловата система: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali... Параметър --include указва допълнително инсталиране на някои пакети, посочих статично изграден QEMU емулатор. Позволява ви да изпълнявате chroot към средата на ARM. Значението на другите опции можете да намерите в man debootstrap. Не забравяйте, че не всяка ARM платка поддържа архитектурата armhf.
  3. Поради разликата в архитектурите debootstrap се извършва на два етапа, като вторият се извършва, както следва: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Сега трябва да завъртите: chroot /mnt /bin/bash
  5. запълни /etc/hosts и /etc/hostname цел FS. Попълнете същото като съдържанието на вашия локален компютър, не забравяйте да замените само името на хоста.
  6. Можете да персонализирате всичко останало. По-специално инсталирам locales (ключове на хранилище), преконфигуриране на локали и часова зона (dpkg-reconfigure locales tzdata). Не забравяйте да зададете паролата с командата passwd.
  7. Задайте парола за root екип passwd.
  8. Подготовката на изображението за мен е завършена с попълване /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 на файловата система на дяла за зареждане е време да разбиете флашката.

  1. Клонирането на ядрото е твърде дълго, така че просто ще изтегля: 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
  2. Конфигурирайте преди компилиране: make ARCH=arm KBUILD_DEFCONFIG=imx_v6_v7_defconfig defconfig. Конфигурацията е в директорията arch/arm/configs/. Ако няма такъв, можете да опитате да намерите и изтеглите готов такъв и да прехвърлите името на файла в тази директория на параметъра KBUILD_DEFCONFIG. В крайни случаи незабавно преминете към следващия параграф.
  3. По желание можете да промените настройките: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
  4. И кръстосано компилиране на изображението: make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
  5. Сега можете да копирате файла на ядрото: cp arch/arm/boot/zImage /mnt/boot/
  6. И файлове от DeviceTree (описание на наличния хардуер на платката): cp arch/arm/boot/dts/*.dtb /mnt/boot/
  7. И инсталирайте модулите, събрани като отделни файлове: 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. В моя случай платката се поддържа в основна линия, следователно вилица игнорирах.

Събираме самия буутлоудър:

  1. Клонирайте стабилния клон на хранилището: git clone https://gitlab.denx.de/u-boot/u-boot.git -b v2020.10
  2. Да отидем в самата директория: cd u-boot
  3. Подготовка на конфигурацията за изграждане: make mx6ull_14x14_evk_defconfig. Това работи само ако конфигурацията е в самия Das U-Boot, в противен случай ще трябва да намерите конфигурацията на производителя и да я поставите в корена на хранилището във файла .config, или сглобени по друг препоръчан от производителя начин.
  4. Ние събираме самото изображение на буутлоудъра с крос-компилатор armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

В резултат на това получаваме файла u-boot.imx, това е готово изображение, което може да се запише на USB флашка. Пишем на SD картата, като пропускаме първите 1024 байта. Защо избрах цел u-boot.imx? Защо пропусна точно 1024 байта? Това предлагат да се направи в документация. За други платки процесът на изграждане и запис на изображение може да е малко по-различен.

Готово, можете да изтеглите. Буутлоудърът трябва да докладва собствената си версия, малко информация за платката и да се опита да намери изображението на ядрото в дяла. Ако не успее, ще се опита да зареди през мрежата. Като цяло изходът е доста подробен, можете да намерите грешка в случай на проблем.

Вместо заключение

Знаете ли, че челото на делфина не е костеливо? Това е буквално трето око, мазна леща за ехолокация!

Стартиране на GNU/Linux на ARM платка от нулата (използвайки Kali и iMX.6 като пример)

Стартиране на GNU/Linux на ARM платка от нулата (използвайки Kali и iMX.6 като пример)

Източник: www.habr.com