私は、Linux用のARMメモリ(カーネル3.10)とストレージ用のNANDメモリを使っています。私は独自のパーティションに常駐し、メインファームウェアの更新を実行する最小限のLinuxを構築しようとしています。組み込みデバイスでramfsを使用したカーネルパニック:ファイルシステムなしでルートをマウントすることはできません
カーネルはramfsに格納されている非常に最小のルートfsを使用します。しかし、私はそれを起動することはできません。私は次のエラーを取得する:
[ 0.794113] List of all partitions:
[ 0.797600] 1f00 128 mtdblock0 (driver?)
[ 0.802669] 1f01 1280 mtdblock1 (driver?)
[ 0.807697] 1f02 1280 mtdblock2 (driver?)
[ 0.812735] 1f03 8192 mtdblock3 (driver?)
[ 0.817761] 1f04 8192 mtdblock4 (driver?)
[ 0.822794] 1f05 8192 mtdblock5 (driver?)
[ 0.827820] 1f06 82944 mtdblock6 (driver?)
[ 0.832850] 1f07 82944 mtdblock7 (driver?)
[ 0.837876] 1f08 12288 mtdblock8 (driver?)
[ 0.842906] 1f09 49152 mtdblock9 (driver?)
[ 0.847928] No filesystem could mount root, tried: squashfs
[ 0.853569] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)
[ 0.861806] CPU: 0 PID: 1 Comm: swapper Not tainted 3.10.73 #11
[ 0.867732] [<800133ec>] (unwind_backtrace+0x0/0x12c) from [<80011a50>] (show_stack+0x10/0x14)
(...etc)
ルートfsをビルドプロセスによって構築され、以下のものを使用して、(明確にするために簡略化):
# [Copy some things to $(ROOTFS_OUT_DIR)/mini_rootfs]
cd $(ROOTFS_OUT_DIR)/mini_rootfs && find . | cpio --quiet -o -H newc > $(ROOTFS_OUT_DIR)/backup.cpio
gzip -f -9 $(ROOTFS_OUT_DIR)/backup.cpio
これは、$(ROOTFS_OUT_DIR)/backup.cpioを作成します。 GZ
カーネルは、このように構築されています:
@$(MAKE) -C $(LINUX_SRC_DIR) O=$(LINUX_OUT_DIR) \
CONFIG_INITRAMFS_SOURCE="$(ROOTFS_OUT_DIR)/backup.cpio.gz" \
CONFIG_INITRAMFS_ROOT_UID=0 CONFIG_INITRAMFS_ROOT_GID=0
私は、これはそれが同じCONFIを使用することを意味だと思いますgをメインファームウェアとして(他の場所に構築されています)、CONFIG_INITRAMFS_SOURCEを使用して最小ramfsイメージを提供します。
Kernel.Orgから、ramfsは常に作成され、CONFIG_INITRAMFS_SOURCEは、使用する既定のルートfsを指定するために必要なすべてです。 ramfsを作成する際に問題があることを示すビルドエラーはなく、結果として得られるカーネルのサイズは正しいと思われます。 backup.cpio.gzは約3.6 MBです。最終的なzImageは6.1 MBです。イメージは8 MBのサイズのパーティションに書き込まれます。
このイメージを使用するには、最小限のパーティションからブートするように指示する(カスタム)ブートローダによって使用されるフラグをいくつか設定し、カーネルには別のコマンドラインを設定します。ここでは、ブートに使用するコマンドラインです:nimimalルートfsが実際にビン/ busyboxの/へのリンクである "ファイル/ linuxrcを"、含んでいること
console=ttyS0 rootfs=ramfs root=/dev/ram rw rdinit=/linuxrc mem=220M
注:
lrwxrwxrwx 1 root root 11 Nov 5 2015 linuxrc -> bin/busybox
なぜdoesnの」このブートは?どうして "squashfs"ファイルシステムを試しているのですか?これは間違っていますか?
PS:私はこれを読んで:http://www.linuxquestions.org/questions/linux-embedded-and-single-board-computer-78/no-filesystem-could-mount-root-873864/、CONFIG_BLK_DEV_INITRD = yとCONFIG_RD_GZIP = yであることを確認しました設定で設定されます。 – Jeremy
コマンドラインで 'rootfs ='を指定する必要はありません。適切に設定されたカーネルは、常に正しく接続されたinitramfsを使用します( 'rootfs ='パラメータは無視します)。 cpioアーカイブはzImageで再び圧縮されるので、圧縮する必要はありません。私は手作業でinitramfsを作り、それをカーネルとマージして以来、ずっとずっと続いています。 Buildrootがあるので、私はこれを使用しています。 – sawdust
@sawdust私はcmdlineパラメータから "rootfs = ramfs"を削除しましたが、同じエラーが表示されます。 – Jeremy