ARM ボヌド䞊で GNU/Linux を最初から開始する (䟋ずしお Kali ず iMX.6 を䜿甚)

tl; dr: プログラム内で ARM コンピュヌタヌ甚の Kali Linux むメヌゞを構築しおいたす debootstrap, linux О u-boot.

ARM ボヌド䞊で GNU/Linux を最初から開始する (䟋ずしお Kali ず iMX.6 を䜿甚)

あたり人気のないシングルボヌド ゜フトりェアを賌入した堎合、お気に入りのディストリビュヌションのむメヌゞが䞍足しおいるこずに盎面するかもしれたせん。 ほが同様のこずが起こりたした 予定されおいるフリッパヌ ワン。 IMX6 甚の Kali Linux はないので (準備䞭です)、自分で組み立おる必芁がありたす。

ダりンロヌドのプロセスは非垞に簡単です。

  1. ハヌドりェアが初期化されたす。
  2. ストレヌゞ デバむス (SD カヌド/eMMC/など) の䞀郚の領域からブヌトロヌダヌが読み取られお実行されたす。
  3. ブヌトロヌダヌはオペレヌティング システムのカヌネルを怜玢し、それをメモリ領域にロヌドしお実行したす。
  4. カヌネルは OS の残りの郚分をロヌドしたす。

このレベルの詳现は私のタスクには十分です。詳现を読んでください。 別の蚘事で。 䞊蚘の「䞀郚の」領域はボヌドごずに異なるため、取り付けに倚少の困難が生じたす。 ARM サヌバヌ プラットフォヌムのロヌド 暙準化しようずしおいる UEFI を䜿甚したすが、これは誰でも利甚できるわけではなく、すべおを個別に組み立おる必芁がありたす。

ルヌトファむルシステムの構築

たずセクションを準備する必芁がありたす。 Das U-Boot はさたざたなファむル システムをサポヌトしおいたすが、私は FAT32 を遞択したした。 /boot ルヌトは ext3 です。これは、ARM 䞊の Kali の暙準むメヌゞ レむアりトです。 ここでは 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. 残りの容量党䜓に察しおルヌト ファむル システムを䜜成したす。 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、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 は XNUMX 段階で実行され、XNUMX 番目の段階は次のように実行されたす。 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 /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/

ダス U ブヌト

ブヌトロヌダヌは察話型であるため、その動䜜をテストするために必芁なのは、ボヌド自䜓、ストレヌゞ デバむス、およびオプションで USB-to-UART デバむスだけです。 ぀たり、カヌネルず OS を埌回しにするこずができたす。

ほずんどのメヌカヌは、初期ブヌトに 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、これはフラッシュ ドラむブに曞き蟌むこずができる既補のむメヌゞです。 最初の 1024 バむトをスキップしお、SD カヌドに曞き蟌みたす。 タヌゲットを遞んだ理由 u-boot.imx? ちょうど 1024 バむトを芋逃したのはなぜですか? これが圌らがやろうずしおいるこずだ ドキュメンテヌション。 他のボヌドの堎合、むメヌゞの構築ず蚘録のプロセスが若干異なる堎合がありたす。

完了したら、起動できたす。 ブヌトロヌダヌは、独自のバヌゞョンずボヌドに関する情報を報告し、パヌティション䞊のカヌネル むメヌゞを芋぀けようずする必芁がありたす。 倱敗した堎合は、ネットワヌク経由での起動が詊行されたす。 䞀般に、出力は非垞に詳现であるため、問題がある堎合ぱラヌを芋぀けるこずができたす。

代わりに、結論の

むルカの額には骚がないこずをご存知ですか これは文字通り第 XNUMX の目、゚コヌロケヌションのための脂肪レンズです。

ARM ボヌド䞊で GNU/Linux を最初から開始する (䟋ずしお Kali ず iMX.6 を䜿甚)

ARM ボヌド䞊で GNU/Linux を最初から開始する (䟋ずしお Kali ず iMX.6 を䜿甚)

出所 habr.com