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

tl;dr: Събирам образ на 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, но докато това не е достъпно за всички, ще трябва да съберете всичко поотделно. Сглобяване на кореновата файлова система

Първо, трябва да подготвите разделите. U-Boot поддържа различни файлови системи, избрах FAT32 за

и ext3 за корен, това е стандартната схема за образите на Kali под ARM. Ще използвам GNU Parted, но можете да направите същото по-удобно /boot fdisk . Също така ще са необходимиdosfstools за създаване на файлови системи: и e2fsprogs apt install parted dosfstools e2fsprogs Размечаваме SD картата:.

Отбелязваме SD картата като използваща MBR схема:

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

, утилита за създаване на коренови файлови системи за Debian-подобни операционни системи: debootstrapapt install debootstrap Сглобяваме файловата система:.

Монтираме раздела в

  1. (използвайте по-удобна за вас точка на монтиране): /mnt/ mount /dev/mmcblk0p2 /mnt монтиране на /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: chroot /mnt /bin/bash
  5. Попълваме /etc/hosts и /etc/hostname целевата ФС. Попълнете по аналогия с съдържанието на вашия локален компютър, не забравяйте само да замените името на хоста.
  6. Можете да конфигурирате всичко останало. Конкретно аз инсталирам locales (ключовете на репозитория), пренастройвам локалите и часовата зона (dpkg-reconfigure locales tzdata). Не забравяйте да зададете парола с командата passwd.
  7. Задайте парола за root с командата passwd.
  8. Приготвянето на образа за мен завършва с попълване /etc/fstab вътре /mnt/.

Ще заредя в съответствие с предварително създадените етикети, така че съдържанието ще бъде такова:

LABEL=ROOTFS / auto errors=remount-ro 0 1
LABEL=BOOT /boot auto defaults 0 0

Накрая можете да монтирате стартовия дял, ще ни е нужен за ядрото: `mount /dev/mmcblk0p1 /mnt/boot/`

Сглобяване на Linux

За компилиране на ядрото (и после на буутлоадера) на Debian Testing трябва да инсталирате стандартния набор от GCC, GNU Make и заглавните файлове на GNU C Library за целевата архитектура (при мен 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-to-UART. Тоест, ядрото и ОС могат да бъдат отложени за по-късно.

Абсолютно мнозинство производители предлагат използването на Das U-Boot за първично зареждане. Пълна поддръжка обикновено се осигурява в собствен fork, но и в upstream не забравят да контрибуират. В моя случай платката се поддържа в mainline, следователно форк го игнорирах.

Събираме самия зареждач:

  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, това е готов образ, който може да се запише на флашка. Записваме на SD картата, пропускам първите 1024 байта. Защо избрах цел u-boot.imx? Почему пропустил именно 1024 байта? Так предлагают сделать в документацията. За други платки процесът на изграждане на образа и запис може да е малко различен.

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

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

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

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

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

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster