ARMボードでGNU / Linuxを最初から取得する(たとえば、KaliやiMX.6)

TL; DR:プログラムでは、ARMコンピュータのカーリーLinuxイメージを構築しdebootstraplinux そしてu-boot あまり人気のないシングルボードデバイスを購入した場合は、お気に入りの配布キットのイメージが不足していることに直面する可能性があります。計画されたフリッパーワンでも同じことが起こりましたIMX6用のKaliLinux(私は料理をしています)がないので、自分で作成する必要があります。











ダウンロードプロセスは非常に簡単です。



  1. Ironが初期化されます。
  2. ストレージデバイス(SDカード/ eMMCなど)のある領域から、ブートローダーが読み取られて実行されます。
  3. ローダーはオペレーティングシステムカーネルを探し、それをメモリ領域にロードして実行します。
  4. カーネルは残りのOSをロードします。


このレベルの詳細は私のタスクには十分です詳細は別の記事で読むことができます上記の「いくつかの」領域はボードごとに異なり、インストールが困難になります。彼らUEFIを使用してサーバーARMプラットフォームのロードを標準化しようとしていますが、これがすべての人に利用可能でない限り、すべてを個別に収集する必要があります。



ルートファイルシステムの構築



まず、セクションを準備する必要があります。Das U-Bootはさまざまなファイルシステムをサポートしています。/bootルートにはFAT32とext3を選択しました。これは、ARMでのKaliの標準イメージマークアップです。GNU Partedを使用しますが、同じことをもっと身近なものにすることができますfdiskまた、ファイルシステムを作成する必要がdosfstoolsありe2fsprogsますapt install parted dosfstools e2fsprogs



SDカードをマークアップします。



  1. SDカードをMBRマークアップを使用するものとしてマークします。 parted -s /dev/mmcblk0 mklabel msdos
  2. /boot128メガバイトでセクションを作成しますparted -s /dev/mmcblk0 mkpart primary fat32 1MiB 128MiB最初に失われたメガバイトは、マークアップ自体とブートローダーのために残しておく必要があります。
  3. 残りの容量全体のルートファイルシステムを作成します。 parted -s /dev/mmcblk0 mkpart primary ext4 128MiB 100%
  4. 突然パーティションファイルが作成または変更されていない場合は、 `partprobe`を実行する必要があります。その後、パーティションテーブルが再読み込みされます。
  5. 次のラベルを使用してブートパーティションファイルシステムを作成しますBOOTmkfs.vfat -n BOOT -F 32 -v /dev/mmcblk0p1
  6. 次のラベルを使用してルートファイルシステムを作成しますROOTFSmkfs.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 , : 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/ます。


以前に作成したタグに従ってロードするため、コンテンツは次のようになります。

LABEL = ROOTFS /自動エラー=再マウント-ro0 1

LABEL = BOOT /ブート自動デフォルト00


最後に、ブートパーティションをマウントできます。カーネルに必要です: `mount / dev / mmcblk0p1 / mnt / boot /`



Linuxの構築



Debian Testingでカーネル(およびブートローダー)を構築するには、ターゲットアーキテクチャ(I armhfのGCC、GNU Make、GNU Cライブラリヘッダーファイルの標準セット、およびOpenSSLヘッダー、コンソール計算機bcbisonおよびflexを確立する必要がありますapt install crossbuild-essential-armhf bison flex libssl-dev bcブートローダーはデフォルトでzImageブートパーティションのファイルシステム上のファイルを検索するため、USBフラッシュドライブをパーティション分割するときが来ました。



  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-UARTデバイスで、その動作をテストできます。つまり、カーネルとOSを後で延期することができます。



大多数のメーカーは、初期起動にDasU-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。これは、USBフラッシュドライブに書き込むことができる既製のイメージです。最初の1024バイトをスキップして、SDカードに書き込みます。なぜターゲットを選んだのu-boot.imxですか?なぜ正確に1024バイトスキップしたのですか?これは、ドキュメントが示唆していることです。他のボードの場合、イメージのビルドと書き込みのプロセスが少し異なる場合があります。



完了しました。起動できます。ブートローダーは、独自のバージョンといくつかのボード情報を報告し、パーティション上のカーネルイメージを見つけようとする必要があります。失敗した場合は、ネットワーク経由で起動しようとします。一般的に、出力は非常に詳細であり、問​​題が発生した場合にエラーを見つけることができます。



結論の代わりに



イルカの額が骨ではないことをご存知ですか?それは文字通り第三の目、エコーロケーションのための脂肪質のレンズです!










All Articles