カーネルが回転して初期ファイルシステムを上書きするのを防ぐ方法は?
カーネルにどのスイッチを渡しますか?
initramfsにコードを追加する必要がありますか?
私はbusyboxをクロスコンパイルしてインストールしました_install
。
その後、カーネルメニュー設定でこのディレクトリ(CONFIG_INITRAMFS_SOURCE)をポイントしました。
私のzImageにはinitramfsというcpioファイルが含まれています。
起動(u-boot bootm 0xkernel - 0xdtbBlob
)すると、カーネルにエラーが発生し、「不明なブロックデバイスにrootfsをマウントできません」というメッセージが表示されます。
私が理解したところ、カーネルは「初期ファイルシステム」を上書きするために「実際のファイルシステム」を探しています。私の考えでは、これが呼び出されると思います。「ピボット」。
少なくとも今は初期ファイルシステムをそのまま維持したいと思います。
私が作成してzImageに埋め込んだinitramfsを使用したいと思います。
これまで私が読んだ内容はすべて
ramdisk(ブロックデバイス)のようです。メモリが8Mしかないので使いたくありません。
物理ファイルシステムmmc、sd、ネットワークは使用できません。すべてのファイルをsbファイルでラップされたメモリにロードします。
古いカーネルや作業方法。カーネル4.xとu-boot 2015.xを使用しています。
ハードウェア:
* 組み込み Freescale imx233
* 8M sdram
* リカバリモードで 0 キー sb ファイルを sdram にロードします。
* mmc、sd、ネットワークなし
目的:
次の作業に必要なツールのみを使用して、小さなカーネルとファイルシステムを作成します。
* LCD画面やUSBポートなど、残りのハードウェア操作をデバッグして作成します。
*到着フラッシュメモリUSBのファイルとして。
ありがとう
答え1
initramfsのルートからというbusyboxバイナリへのシンボリックリンクを作成しますinit
。たとえば、ルートがディレクトリ_install
で、busybox バイナリが次の場所にあるとします_install/bin/busybox
。
cd _install
ln -s bin/busybox init
(re-compile and copy kernel)
カーネルのコマンドラインは必要ありません。カーネルは/init
デフォルトでinitramfsで実行されます*。マルチコールライブラリBusyboxは、呼び出すユーティリティの動作をエミュレートします。これは、init
一般的にやっていることをエミュレートすることを意味しますinittab
。 Busybox ビルドで無効にしない場合基本inittab
それをコンパイルします。このデフォルトはtty
シェルアクセスを設定します。
*) 実際、カーネルのデフォルト値は、またはですlinuxrc
がinit
、Busyboxでも同じです。