ramdiskを含むカーネルイメージ(.img)の構築


12

次の手順で、Raspberry Pi用のLinuxカーネル(3.0.1)を構築しました。

1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable   with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot

私の質問は、kernel.imgをどのように構築できますか?zImage + ramdiskが含まれていると思いますが、どうすればこれをビルドできますか?

誰かがramdiskを作成し、これら2つをkernel.imgファイルにパックするように私を案内できますか?Raspberry Piでこのカーネルを起動したい。


これは素晴らしい質問です。まだ質問されていないことに驚いています。
-Jivings

なぜカーネル3.0.1を使用しているのですか?このバニラカーネルはkernel.orgサイトにありますか?
レジストフアダムスキー

はい、私はkernel.orgからこれを発見した
シャンタヌバネルジー

initramfsのbusyboxでqemuとクロスコンパイルされたraspberry pi-2カーネルに関する新しい質問を追加しました:raspberrypi.stackexchange.com/questions/56302/…–
42n4

回答:


8

kernel.imgファイル

Linuxカーネルを使用する場合、kernel.imgファイルは単に名前が変更されlinux/arch/arm/boot/Imageます。このファイルの圧縮バージョンを使用することも可能です(または、少なくとも前回チェックしたときに可能だったはずです)zImage。統合initramfs(ramdisk)を含めることができますが、必須ではありません。たとえば、在庫kernel.imgファイルにはinitramfswhile kernel_emergency.imgが含まれていません。

注:eLinux wikiの公式カーネルコンパイルガイドでは、imagetool-uncompressed.pyツールを使用してkernel.imgファイルを準備することを推奨しています。RaspberyPiの初期には必要でしたが、現在ではブートローダーは通常のファイルImagezImageファイルを処理できます。

カーネルソースの問題

非常に重要なのは、RaspberryPiのカーネルを構築するときに、どのバージョンも使用できないことです。RaspberryPiに移植された特別なバージョンのみが機能します。残念ながら、現在のアップストリームバージョン(kernel.orgサイトにあります)はRaspberryPiと互換性がありません。また、versatil_configRaspberryPiには適していません。bcmrpi_defconfig代わりに使用する必要があります(RaspberryPi互換のカーネルソースにあります)またはbcmrpi_emergency_defconfigbuildinを使用する予定がある場合initramfs

カーネル構築手順

RaspberryPiのカーネルソースを取得するのに最適な場所は、財団のgithubです。また、公式のRasbperryPi wikiで、入手方法とコンパイル方法に関する有用な説明を見つけることができます。ここに含まれる手順の私の少し単純化されたバージョンです(注:カーネルをクロスコンパイルすることを前提としています。はるかに高速で同じ結果を作成するはずですが、RaspberryPiでネイティブにカーネルを構築することも可能です)。

  1. 独自の公式ツールチェーンをダウンロードして作成してください。ちょっと、私はそれがにインストールされていると仮定し/usr/bin/arm-linux-gnueabi-*ます。他の場所にある場合はCROSS_COMPILE、すべてのmakeコマンドでオプションを変更する必要があります。

  2. https://github.com/raspberrypi/linuxサイトにアクセスして、公式のRapsberryPiカーネルソースを見つけてください。次の2つの方法でコードをダウンロードできます。

    • 圧縮ファイルとして(このオプションを使用するには、gitユーティリティをインストールする必要はありません。RapsberryPi自体にもインストールできます):サイト上部のタブのZIP下にあるアイコンをクリックしますCode。これにより、最新のソースファイルをファイルとしてダウンロードできzipます。代わりにgitを使用してこれを行うこともできますが、それは(wikiで説明されているように)より多くのスペースと時間を必要とします。次に、ファイルを解凍してソースツリーを取得します。
    • gitユーティリティを使用する(これはおそらくRAMが少ないためRaspberryPiでは機能しませんでしたが、デスクトップシステムでは問題なく動作するはずです(--depth 1gitが開発の全履歴をダウンロードすることを妨げる引数に注意してください)

      git clone --depth 1 git://github.com/raspberrypi/linux.git
      
  3. 財団が提供するデフォルトの設定を使用します。

    cp arch/arm/configs/bcmrpi_defconfig .config
    
  4. make oldconfigいくつかの質問を実行して回答します(デフォルトの回答を残して、各質問でEnterキーを押しても問題ありません)。

    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
    
  5. カーネルをコンパイルします。

    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
    
  6. カーネルモジュールを/tmp/modules以下にコピーします。

    make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
    
  7. Imageファイルとして使用kernel.img

  8. すべてのモジュールを/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つの手順でこれを行う必要があります。

  1. initramfsファイルなしでカーネルを構築して起動してみてください。
  2. 準備の整ったinitramfsコンテンツをカーネルに追加してみてください。
  3. initramfsニーズに合わせてこのコンテンツを変更します。

1
すばらしい書き上げですが、使用すべきではありませんzipgitファイルを効率的に転送し、depth=1ダウンロード履歴を防ぐために使用できます(私は思う)。
アレックスチェンバレン

はい、これは本当ですが、RaspberryPi自体でこれを実行しようとするのは、あまり良い考えではありません。一方、zipのダウンロードはうまく機能しています。gitの使用に関する短いメモも追加します。
クシシュトフアダムスキー

Raspberry Piでカーネルをコンパイルすること自体、ひどい考えです。
アレックスチェンバレン

@AlexChamberlain:それは本当に遅いですが、間違いなく可能です(私はこれを自分でやった)。一晩かかるので、それほど悪くはありません。それ以外に、なぜそんなにひどいのですか?
クシシュトフアダムスキー

bcmrpi_emergency_defconfigを使用すると、initramfsが含まれますか?
シャンタヌバネルジー

0

X-Apt、dpkg-crossなどを使用して両方で同じバージョンのDebianを実行している場合、emdebianツールは非常にうまく機能します。

ソース:emdebianを実行している組み込みARMシステム用のc ++アプリの開発に使用。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.