initrd.imgには多くのファイルが含まれています。

initrd.imgには多くのファイルが含まれています。

私はここに初めて来て、正しいセクションに投稿していることを願っています。

まあ、私はdebian 3.16.0-4-686-paeのinitrd.imgを得ました(私はiso全体をダウンロードして燃やしました)。ディスクまたはLAN initrdから問題なく起動すると、すべてが正常に起動します。

問題は、initrdにドライバを追加しようとしたときに始まります。 initrd.imgファイルを入手して解凍します。私はkernelという名前のディレクトリを1つだけ取得します。検索後、同じ問題を抱えているスレッドを見つけ、彼の回避策を試しました(スレッドリンク:私のinitrdに「kernel」という1つのディレクトリしかないのはなぜですか?)。

cpioを使って1410個のブロックだけを抽出してみました。 1410からアーカイブの終わりまでddを実行した後、アーカイブを取得しました(重要な場合は名前を指定するだけで読むことができます)。名前.tar.gz )にはすべてのフォルダとすべてのエントリが含まれていますが、やや破損しており、一部のファイルのサイズは0です(例:initrdを作成するshやbashなど、この役に立たず起動できないエラーから生成しようとしています)。しかし、実行することはできません。

同じスレッドでbinwalkソリューションを使用している場合は、initrdからアーカイブを抽出できますが、アーカイブにはすべてのファイルではなく、3つのフォルダ(binなど、lib)のみが含まれています。 (例:shまたはbashなし)

注 - binwalkによると、initrdには次のものが含まれています。

1 - ASCIIアーカイブ

1 - xz圧縮データ

30 - binwalkによると、gzip圧縮データアーカイブの例

NTFSファイルシステム(NT)のNULL日付:1970年1月1日木曜日00:00:00

すべて1MB未満です。

したがって、フォーマットのため、このinitrd.imgファイルにドライバを追加することはできません。より多くの情報が必要な場合は、お知らせください。提供いたします。

Tl;dr 奇妙な initrd.img ファイルがあり、ドライバを追加できないようです。

Binwalk出力:

私はASCIIアーカイブのファイルで始まるようにファイルを編集しましたが、私が削除したすべてのエントリはgzip圧縮アーカイブの日付です。すべて記載されているとおりです。 Thu 1 Jan 00:00:00 1970(私はそれ以来それを信じています。これは画期的な日付です。おそらく奇妙な理由で実際の日付を読むことができないかもしれません...)

どんな助けでも大変感謝します。より多くの情報が必要な場合は、お知らせください。提供するよう努めます。ありがとう:)

言及するのを忘れました。私が実行して使用するすべてのコマンドはUbuntu 3.16.0-30-generic(信頼できると思います)にあります。

答え1

まず、正常に起動する場合は、imgファイルをどのように抽出するかを見てみましょう。画像はそのまま残ります。

Redhat/Fedora initrd イメージの場合は、以下を使用します。

# This should confirm it is a gziped image    
file initrd0.img 

# This should leave you with unzipped initrd0 (no .img)
# The -d is decompress, the -S is to expect the .img suffix not the usual .gz
gzip -dS .img 

# This should show confirm it is now a cpio archive
file initrd0

# Create a directory to unpack to
# and unpack inside the new directory
mkdir new-init 
cd new-init
cpio -id < ../initrd0

上記の「あまり明確ではない」行の説明を追加しました。アイデアは、抽出を試みる前に正しいファイル形式があることを確認することです。各ファイルコマンドの出力が予想と異なる場合(gzipファイル、その後cpio)、適切なツールを使用して解凍する必要があります。

関連情報