Покретање ГНУ/Линук-а на АРМ плочи од нуле (користећи Кали и иМКС.6 као пример)

тл; др: Правим Кали Линук слику за АРМ рачунар, у програму debootstrap, linux и u-boot.

Покретање ГНУ/Линук-а на АРМ плочи од нуле (користећи Кали и иМКС.6 као пример)

Ако сте купили неки не баш популаран софтвер за једну плочу, можда ћете се суочити са недостатком слике ваше омиљене дистрибуције за њега. Отприлике иста ствар се десила и са планирао Флиппер Оне. Једноставно не постоји Кали Линук за ИМКС6 (припремам се), па морам сам да га саставим.

Процес преузимања је прилично једноставан:

  1. Хардвер је иницијализован.
  2. Са неке области на уређају за складиштење (СД картица/еММЦ/итд) покретач се чита и извршава.
  3. Боотлоадер тражи кернел оперативног система и учитава га у неко меморијско подручје и извршава га.
  4. Кернел учитава остатак ОС-а.

Овај ниво детаља је довољан за мој задатак, можете прочитати детаље у другом чланку. Горе поменуте „неке“ области се разликују од плоче до плоче, што ствара одређене потешкоће при инсталацији. Учитавање АРМ серверских платформи покушавајући да стандардизује користећи УЕФИ, али док ово није доступно свима, мораћете све да саставите засебно.

Изградња коренског система датотека

Прво морате припремити секције. Дас У-Боот подржава различите системе датотека, ја сам изабрао ФАТ32 за /boot и ект3 за роот, ово је стандардни изглед слике за Кали на АРМ-у. Користићу ГНУ Партед, али то можете учинити и на познатији начин fdisk. Такође ће вам требати dosfstools и e2fsprogs да креирате систем датотека: apt install parted dosfstools e2fsprogs.

Означавамо СД картицу:

  1. Означите СД картицу да користи МБР партиционирање: parted -s /dev/mmcblk0 mklabel msdos
  2. Направите одељак испод /boot за 128 мегабајта: parted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB. Први пропуштени мегабајт мора бити остављен за саму ознаку и за боотлоадер.
  3. Креирамо основни систем датотека за цео преостали капацитет: parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. Ако одједном фајлови ваше партиције нису креирани или се нису променили, потребно је да покренете `партпробе`, тада ће табела партиција бити поново прочитана.
  5. Креирајте систем датотека за партицију за покретање са ознаком BOOT: mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. Направите основни систем датотека са ознаком ROOTFS: mkfs.ext3 -L ROOTFS /dev/mmcblk0p2

Одлично, сада можете да га попуните. За ово ће вам додатно требати debootstrap, услужни програм за креирање роот система датотека за оперативне системе сличне Дебиану: apt install debootstrap.

Прикупљамо ФС:

  1. Монтирајте партицију /mnt/ (користите погоднију тачку за монтирање): mount /dev/mmcblk0p2 /mnt
  2. Ми заправо попуњавамо систем датотека: debootstrap --foreign --include=qemu-user-static --arch armhf kali-rolling /mnt/ http://http.kali.org/kali. Параметар --include указује на додатно инсталирање неких пакета, навео сам статички изграђен КЕМУ емулатор. Омогућава вам да изведете chroot у АРМ окружењу. Значење преосталих опција може се наћи у man debootstrap. Не заборавите да свака АРМ плоча не подржава архитектуру armhf.
  3. Због разлике у архитектури debootstrap се изводи у две фазе, друга се изводи овако: chroot /mnt/ /debootstrap/debootstrap --second-stage
  4. Сада треба да зезнете: chroot /mnt /bin/bash
  5. Ми пунимо /etc/hosts и /etc/hostname таргет ФС. Попуните исто као и садржај на вашем локалном рачунару, само не заборавите да замените име хоста.
  6. Све остало можете прилагодити. Конкретно, инсталирам locales (кључеви складишта), реконфигуришите локале и временску зону (dpkg-reconfigure locales tzdata). Не заборавите да поставите лозинку помоћу команде passwd.
  7. Поставите лозинку за root тим passwd.
  8. Припрема слике за мене се завршава пуњењем /etc/fstab унутар /mnt/.

Учитаваћу у складу са претходно креираним ознакама, тако да ће садржај бити овакав:

ЛАБЕЛ=РООТФС / аутоматске грешке=ремоунт-ро 0 1
ЛАБЕЛ=БООТ /аутоматско покретање подразумевано 0 0

Коначно, можете монтирати партицију за покретање, биће нам потребна за кернел: `моунт /дев/ммцблк0п1 /мнт/боот/`

Линук буилд

Да бисте направили језгро (а затим и покретач) на Дебиан тестирању, потребно је да инсталирате стандардни скуп датотека заглавља ГЦЦ, ГНУ Маке и ГНУ Ц библиотеке за циљну архитектуру (за мене armhf), као и ОпенССЛ заглавља, конзолни калкулатор 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. И датотеке са ДевицеТрее (опис хардвера на плочи): 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/

Дас У-Боот

Пошто је боотлоадер интерактиван, све што требате да тестирате његов рад је сама плоча, уређај за складиштење и опционо УСБ-то-УАРТ уређај. То јест, кернел и ОС можете одложити за касније.

Огромна већина произвођача нуди употребу Дас У-Боот-а за почетно покретање. Пуна подршка се обично пружа у њиховој сопственој виљушки, али они не заборављају да допринесу узводном. У мом случају, плоча је подржана у главна линијаТако виљушка Игнорисао сам то.

Хајде да саставимо сам боотлоадер:

  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. Ово функционише само ако је конфигурација у самом Дас У-Боот-у, иначе ћете морати да пронађете конфигурацију произвођача и ставите је у корен спремишта у датотеци .config, или саставите на било који други начин који препоручује произвођач.
  4. Саму слику покретача састављамо помоћу унакрсног компајлера armhf: make CROSS_COMPILE=arm-linux-gnueabihf- u-boot.imx

Као резултат добијамо датотеку u-boot.imx, ово је готова слика која се може уписати на флеш диск. Пишемо на СД картицу, прескачући првих 1024 бајта. Зашто сам изабрао Таргет u-boot.imx? Зашто сам пропустио тачно 1024 бајта? То је оно што они предлажу да ураде у документација. За друге плоче, процес изградње слике и снимања може бити мало другачији.

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

Уместо закључка

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

Покретање ГНУ/Линук-а на АРМ плочи од нуле (користећи Кали и иМКС.6 као пример)

Покретање ГНУ/Линук-а на АРМ плочи од нуле (користећи Кали и иМКС.6 као пример)

Извор: ввв.хабр.цом