kernel.imgファイル
Linuxカーネルを使用する場合、kernel.img
ファイルは単に名前が変更されlinux/arch/arm/boot/Image
ます。このファイルの圧縮バージョンを使用することも可能です(または、少なくとも前回チェックしたときに可能だったはずです)zImage
。統合initramfs
(ramdisk)を含めることができますが、必須ではありません。たとえば、在庫kernel.img
ファイルにはinitramfs
while kernel_emergency.img
が含まれていません。
注:eLinux wikiの公式カーネルコンパイルガイドでは、imagetool-uncompressed.py
ツールを使用してkernel.img
ファイルを準備することを推奨しています。RaspberyPiの初期には必要でしたが、現在ではブートローダーは通常のファイルImage
とzImage
ファイルを処理できます。
カーネルソースの問題
非常に重要なのは、RaspberryPiのカーネルを構築するときに、どのバージョンも使用できないことです。RaspberryPiに移植された特別なバージョンのみが機能します。残念ながら、現在のアップストリームバージョン(kernel.org
サイトにあります)はRaspberryPiと互換性がありません。また、versatil_config
RaspberryPiには適していません。bcmrpi_defconfig
代わりに使用する必要があります(RaspberryPi互換のカーネルソースにあります)またはbcmrpi_emergency_defconfig
buildinを使用する予定がある場合initramfs
。
カーネル構築手順
RaspberryPiのカーネルソースを取得するのに最適な場所は、財団のgithubです。また、公式のRasbperryPi wikiで、入手方法とコンパイル方法に関する有用な説明を見つけることができます。ここに含まれる手順の私の少し単純化されたバージョンです(注:カーネルをクロスコンパイルすることを前提としています。はるかに高速で同じ結果を作成するはずですが、RaspberryPiでネイティブにカーネルを構築することも可能です)。
独自の公式ツールチェーンをダウンロードして作成してください。ちょっと、私はそれがにインストールされていると仮定し/usr/bin/arm-linux-gnueabi-*
ます。他の場所にある場合はCROSS_COMPILE
、すべてのmake
コマンドでオプションを変更する必要があります。
https://github.com/raspberrypi/linuxサイトにアクセスして、公式のRapsberryPiカーネルソースを見つけてください。次の2つの方法でコードをダウンロードできます。
財団が提供するデフォルトの設定を使用します。
cp arch/arm/configs/bcmrpi_defconfig .config
make oldconfig
いくつかの質問を実行して回答します(デフォルトの回答を残して、各質問でEnterキーを押しても問題ありません)。
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
カーネルをコンパイルします。
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
カーネルモジュールを/tmp/modules
以下にコピーします。
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
Image
ファイルとして使用kernel.img
すべてのモジュールを/tmp/modules/lib/modules/
コンピューターのfromから/lib/modules/
RaspberryPi rootfsのディレクトリにアップロードします。
initramfsを追加する
initramfs
ただし、これは作成方法に関する指示を提供しません。これは非常に広範なトピックであるため(基本的に、作業用のLinuxユーザースペース環境を作成する必要があり、複雑さの制限はありません)、ここでは説明しません。initramfs
独立したファイルと、カーネルイメージファイルと統合されるビルドイン(スタンドアロンの場合)の2つの異なる形式で使用できることにのみ注意しますkernel_emergency.img
。2番目のオプションはRaspberryPiブートローダーでサポートされているはずですが、現在のファームウェアバージョンでは壊れているという噂があるため、おそらくビルドインバージョンを使用する必要があります。
開始する最良の方法は、動作中のinitramfsコンテンツ(kernel_emergency.imgに使用されている)を別の基盤githubリポジトリからダウンロードして使用することですiniramfs
。このイメージを使用してカーネルを起動できるようになってから、独自のビルドを試してください。これに必要なのは、ダウンロードされたディレクトリuing CONFIG_INITRAMFS_SOURCE
カーネル構成オプションを指すことだけです。
最終ノート
したがって、3つの手順でこれを行う必要があります。
initramfs
ファイルなしでカーネルを構築して起動してみてください。
- 準備の整った
initramfs
コンテンツをカーネルに追加してみてください。
initramfs
ニーズに合わせてこのコンテンツを変更します。