ここでは、i.MX6 sabre sdプラットフォーム用の BusyBoxを使用して、最小限のルートファイルシステムをかなり迅速に生成する方法を示します。
このドキュメントは、すでにプラットフォーム上で Linux カーネルを起動できることを前提としています。その方法の詳細については、 この投稿 を参照してください。これは 、ARMクロスコンパイラ(Debian + Emdebianなど)が手元にある「動作する」Linux開発環境がすでにある ことを意味します 。
busybox は非常に小さいため、メインのルートファイルシステムとしてRAMディスクを使用します。
git を使用して busybox のソースを取得します。
$ git clone git://git.busybox.net/busybox
これにより、 すべての最新のソースを含む busybox ディレクトリが作成されます。
安定性を高めるために、最新バージョンの代わりにリリースをチェックアウトする場合もあることに注意してください。そのためには、利用可能なリリースタグを git tag -l や git checkout
あなたのクロスコンパイラが例えばarm-linux-gnueabihf-gccの場合、次のようにしてコンパイルできます。
$ cd busybox
$ export ARCH=arm
$ export CROSS_COMPILE=arm-linux-gnueabihf-
$ make defconfig
$ sed -i.orig 's/^#.*CONFIG_STATIC.*/CONFIG_STATIC=y/'.configの
$作る
$ make install
これにより、バイナリとリンクを含む _install フォルダ階層が作成されます。静的バイナリのビルドを sed コマンドで強制することに注意してください。
_installフォルダを最小ファイルシステムと呼ぶ前に、さらにいくつかの構成を追加する必要があります。
いくつかのマウントポイントとフォルダを作成する必要があります。
$ mkdir _install/dev
$ mkdir _install/proc
$ mkdir _install/sys
$ mkdir -p _install/etc/init.d
次の内容で、メインの init 設定ファイル _install/etc/inittab を準備する必要があります。
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
これは、 inittab ファイルがない場合の busybox init のデフォルトの動作に非常に近いです。tty が欠落しているという警告を抑制するだけです。
利便性のために、起動時にいくつかのファイルシステムをマウントするための設定を追加する必要があります。これは、以下を含む _install/etc/fstab ファイルを使用して行われます。
proc /proc proc defaults 0 0
sysfs /sys sysfs デフォルト 0 0
devtmpfs /dev devtmpfs defaults 0 0
また、実際に _install/etc/init.d/rcS でマウントをトリガーする必要がありますスクリプトは、 inittab から呼び出されます。次のものが含まれている必要があります。
#!/bin/sh
マウント-a
そして、それを実行可能にする必要があります。
$ chmod +x _install/etc/init.d/rcS
ルートファイルシステムの内容を調整したので、次のコマンドを使用して u-boot の busybox RAMディスクイメージを生成できます。
$ (cd _install ; find |cpio -o -H newc |gzip -c > ../initramfs.cpio.gz)
$ mkimage -A arm -T ramdisk -d initramfs.cpio.gz uInitrd
これにより、 u-boot に適した uInitrd ファイルが作成されます。
デフォルトの u-boot コマンドはシステムを起動するのに十分ではないため、次の内容で boot.txt ファイルを編集する必要があります。
run loaduimage
loadfdt を実行します
setenv rdaddr 0x13000000
fatload mmc ${mmcdev}:$mmcpart $rdaddr uInitrd
setenv bootargs console=${console},${baudrate} rdinit=/sbin/init
bootm $loadaddr $rdaddr $fdt_addr
次に、 u-boot でロードできる boot.scr スクリプトを生成します。
$ mkimage -A arm -T スクリプト -d boot.txt boot.scr
この投稿 で説明されているように、 u-boot と Linux を使用してSDカードを準備したと仮定すると、カーネルとdtbを含むカードには単一のFATパーティションがあります。ブートスクリプトとRAMディスクイメージを一緒にコピーする必要があります。
$ mount /dev/
$ cp uInitrd boot.scr /mnt/
$ umount /mnt
SDカードの最初のパーティションは、通常 、/dev/sd
SDカードを起動する準備ができました。i.MX6 sabre sdプラットフォームのSDカードスロットに挿入し、シリアル端子を115200ボー、パリティなし、8ビットデータに設定したUSBからUARTポートに接続し、プラットフォームの電源を入れます。Y busybox システムはプロンプトで起動するはずです。
...
未使用のカーネルメモリの解放: 292K (806d5000 - 8071e000)
Enter キーを押して、このコンソールをアクティブにしてください。
Enterキーを押した後、ターゲット上には機能 的なbusybox シェルがあるはずです。
お楽しみください!