カーネルパニック - 非同期:要求された初期化/初期化失敗(エラー-2)

カーネルパニック - 非同期:要求された初期化/初期化失敗(エラー-2)

追加の開始ログが添付されています。

HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
iommu: Default domain type: Translated 
iommu: DMA domain TLB invalidation policy: strict mode 
SCSI subsystem initialized
EDAC MC: Ver: 3.0.0
clocksource: Switched to clocksource arch_sys_counter
workingset: timestamp_bits=62 max_order=19 bucket_order=0
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)
io scheduler mq-deadline registered
cacheinfo: Unable to detect cache hierarchy for CPU 0
brd: module loaded
VFS: Mounted root (tmpfs filesystem) on device 0:15.
Freeing unused kernel memory: 704K
Run /init as init process
  with arguments:
    /init
  with environment:
    HOME=/
    TERM=linux
Kernel panic - not syncing: Requested init /init failed (error -2).
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.15.0-rc7-00001-g8d7daa446b53-dirty #33
Call trace:
 dump_backtrace+0x0/0x1d0
 show_stack+0x14/0x20
 dump_stack_lvl+0x64/0x7c
 dump_stack+0x14/0x2c
 panic+0x158/0x304
 kernel_init+0xf0/0x150
 ret_from_fork+0x10/0x20
Kernel Offset: disabled
CPU features: 0x00001001,20000802
Memory Limit: none
---[ end Kernel panic - not syncing: Requested init /init failed (error -2). ]---

私は実験的なFPGAプラットフォーム用の組み込みLinuxオペレーティングシステムを構築しています。私はアップストリームのU-boot(ブートローダ)、Linux(カーネル)、buildroot(ファイルシステムのみ)を使用しました。

いくつかの例に従い、Linux構成で必須initrd / initramfsサポートを有効にしました。

CONFIG_BLK_DEV_INITRD=y
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=1
CONFIG_BLK_DEV_RAM_SIZE=10240

u-bootでbootmコマンドを使用して、Linuxカーネル、dtb、およびrootfs.cpio(buildrootでコンパイル済み)を含むFITイメージをロードします。関連情報はここにあります。FIT_TEST

カーネルに渡されるbootargsは次のようになります。

console=ttyS0,9600 earlyprintk maxcpus=1 earlycon root=/dev/ram init=/init rw rootfstype=tmpfs debug

メモ:

いくつかの異なる方法を試しましたが、同じエラーが発生しました。

  • カーネル、dtb、およびfsイメージを別々に渡します。
  • initスクリプト、単純なディレクトリ構造、および/ bin / busyboxにある別々にコンパイルされたbusyboxを使用して、デフォルトのinitramfsを試しました。
  • 外部FSを渡すのではなく、initramfsソースへのパスを渡し、CONFIG_INITRAMFS_SOURCEを使用してカーネルにコンパイルしました。

私が欠けている可能性のある部分へのフィードバック/ポインタを送ってくれてありがとう。しばらくこの問題は解決されませんでした。

ベストアンサー1

Linuxが正常に起動し、コマンドラインに入ります。他のgcc armコンパイラツールチェーンに切り替えました。 aarch64-linux-gnu- と linaro ツールチェーンのバージョンを試しましたが、動作しません。しかし、aarch64-none-linux-gnu-(バージョン10.3)を使用すると機能しました。なぜこれがうまくいくのかわかりません。 Initramfsを使用すると、プロセスを開始するのに本当に役立ちます。

おすすめ記事