tl; dr: Градам слика на Kali Linux за ARM компјутер, во програмата debootstrap
, linux
и u-boot
.
Ако купивте некој не многу популарен софтвер со една табла, можеби ќе се соочите со недостаток на слика од вашата омилена дистрибуција за него. Приближно истото се случи и со
Процесот на преземање е прилично едноставен:
- Хардверот е иницијализиран.
- Од одредена област на уредот за складирање (SD-картичка/eMMC/итн) подигнувачот се чита и се извршува.
- Подигнувачот го бара кернелот на оперативниот систем и го вчитува во некоја мемориска област и го извршува.
- Јадрото го вчитува остатокот од ОС.
Ова ниво на детали е доволно за мојата задача, можете да ги прочитате деталите
Градење на root датотечен систем
Прво треба да ги подготвите деловите. 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 датотечен систем за целиот преостанат капацитет:
parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
- Ако одеднаш вашите датотеки со партиции не се создадени или не се променети, треба да извршите `partprobe`, тогаш табелата со партиции ќе се препрочита.
- Создадете датотечен систем за партицијата за подигање со етикетата
BOOT
:mkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
- Направете root датотечен систем со етикета
ROOTFS
:mkfs.ext3 -L ROOTFS /dev/mmcblk0p2
Одлично, сега можете да го пополните. За ова дополнително ќе ви треба debootstrap
, алатка за креирање на root датотечен системи за оперативни системи слични на 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
во опкружувањето на АРМ. Значењето на преостанатите опции може да се најде воman debootstrap
. Не заборавајте дека не секоја плочка на АРМ ја поддржува архитектурата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 Library за целната архитектура (за мене 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-to-UART. Тоа е, можете да ги одложите кернелот и ОС за подоцна.
Огромното мнозинство на производители нудат да користат Das U-Boot за првичното подигање. Целосната поддршка обично се обезбедува во нивната сопствена вилушка, но тие не забораваат да придонесат за возводно. Во мојот случај, таблата е поддржана внатре
Ајде да го собереме самиот подигнувач:
- Ја клонираме стабилната гранка на складиштето:
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
, ова е готова слика што може да се запише на флеш-уред. Ние пишуваме на SD-картичката, прескокнувајќи ги првите 1024 бајти. Зошто го избрав Target u-boot.imx
? Зошто пропуштив точно 1024 бајти? Ова е она што тие предлагаат да се направи во
Готово, можете да подигнете. Подигнувачот мора да ја пријави сопствената верзија, некои информации за таблата и да се обиде да ја пронајде сликата на јадрото на партицијата. Ако не успее, ќе се обиде да се подигне преку мрежата. Во принцип, излезот е доста детален, можете да ја најдете грешката ако има проблем.
Наместо заклучок
Дали знаевте дека челото на делфинот не е коскено? Тоа е буквално трето око, масна леќа за ехолокација!
Извор: www.habr.com