Стартување на 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, но иако ова не е достапно за секого, ќе мора да соберете сè посебно.

Градење на root датотечен систем

Прво треба да ги подготвите деловите. 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 датотечен систем за целиот преостанат капацитет: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Ако одеднаш вашите датотеки со партиции не се создадени или не се променети, треба да извршите `partprobe`, тогаш табелата со партиции ќе се препрочита.
  5. Создадете датотечен систем за партицијата за подигање со етикетата BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Направете root датотечен систем со етикета ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Одлично, сега можете да го пополните. За ова дополнително ќе ви треба debootstrap, алатка за креирање на root датотечен системи за оперативни системи слични на 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 во опкружувањето на АРМ. Значењето на преостанатите опции може да се најде во man debootstrap. Не заборавајте дека не секоја плочка на АРМ ја поддржува архитектурата 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 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 за првичното подигање. Целосната поддршка обично се обезбедува во нивната сопствена вилушка, но тие не забораваат да придонесат за возводно. Во мојот случај, таблата е поддржана внатре главната линијаЗатоа вилушка Го игнорирав.

Ајде да го собереме самиот подигнувач:

  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 бајти. Зошто го избрав Target u-boot.imx? Зошто пропуштив точно 1024 бајти? Ова е она што тие предлагаат да се направи во документација. За други табли, процесот на градење и снимање слики може да биде малку поинаков.

Готово, можете да подигнете. Подигнувачот мора да ја пријави сопствената верзија, некои информации за таблата и да се обиде да ја пронајде сликата на јадрото на партицијата. Ако не успее, ќе се обиде да се подигне преку мрежата. Во принцип, излезот е доста детален, можете да ја најдете грешката ако има проблем.

Наместо заклучок

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

Стартување на GNU/Linux на табла ARM од нула (користејќи ги Kali и iMX.6 како пример)

Стартување на GNU/Linux на табла ARM од нула (користејќи ги Kali и iMX.6 како пример)

Извор: www.habr.com