Linux カーネル ソース コードを Ubuntu でクロスコンパイルし、Raspberry Pi 4B にデプロイします

参考記事
1. クロスコンパイル環境の設定
以前にubuntu上で設定したのでそのまま飛ばしてください。

2. Linux カーネルのソース コードを入手します。

Linux カーネルのソース コード リンク

  • リンクに移動してカーネル ソース コードの適切なバージョンを選択し、ダウンロードして、解凍するために Ubuntu に転送します。
    ここに画像の説明を挿入します

3. Linuxカーネルソースコードの構成

参考記事

			厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码
		第一种方式:
			cp 厂家.config .config
		第二种方式:
			make menuconfig 一项项配置,通常是基于厂家的config来配置
			
		第三种方式:
			完全自己来

私は最初の方法を使用して、製造元から提供された .config ファイルに従って設定します。

1) カーネル構成:
まず、Linux カーネル ソース コードのディレクトリに移動し、
bcm2711_defconfig 構成を .config に取得します。

Raspberry Pi 4b は bcm2711_defconfig で構成され
、Raspberry Pi 3b は bcm2709_defconfig で構成されます。

埋め込む

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2711_defconfig

ここに画像の説明を挿入します

2) ドライバー構成

  • 必要なライブラリをインストールします。
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
  • 2 番目の方法:
    make menuconfig は、通常はメーカーの設定に基づいて、menuconfig を実行する項目ごとに設定します。
 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig

すると、このようなブロック図が表示されます

  • *カーネルにコンパイルされる zImage にはドライバーが含まれます
  • Mモジュールモードでドライバファイルxxx.koを生成し、システム起動後、コマンドinmosd xxx.koでロードします。

ここに画像の説明を挿入します
カーネル ドライバーの関連する構成をいくつか実行できます。
変更するものが何もない場合は、この手順を実行する必要はありません。

4. カーネルソースコードのコンパイルとパッケージ化
1) コンパイル

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

ここに画像の説明を挿入します
その後、コンパイルエラーが発生し、ツールが動作しませんので、最新のツールを直接インストールしてください。

sudo apt install libssl-dev

* 注:コンパイルが成功する
と、ソース ツリー ディレクトリに vmlinux があることがわかります。失敗すると、そのようなファイルは存在しません。成功すると、
ターゲット zImage イメージは、arch/ の下にあります。腕/ブーツ
*
ここに画像の説明を挿入します
ここに画像の説明を挿入します

2) zImage を xxx.img にパッケージ化するRaspberry Pi で利用可能な
参考記事

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

ここにバグがあります

ヒント: ash: ./scripts/mkknlimg: そのようなファイルまたはディレクトリはありません
パッケージ化ツール mkknlimg はありません。多くの方法を試しましたが、うまくいきませんでした。後で、パッケージ化ツール mkknlimg が削除されていることがわかりました。 方法 1: 再
ダウンロード古いバージョンのソース コード Linux-rpi-4.14 .y.zip を解凍し、scripts フォルダーでパッケージ化ツール mkknlimg を見つけて、パッケージ化ツールを現在のソース コードの script ディレクトリにコピーします。
ここに画像の説明を挿入します

方法 2:tool_master ツール パッケージをダウンロードし、imagetool-uncompressed.py を見つけます。

sudo ./imagetool-uncompressed.py 内核源码目录的绝对路径/arch/arm/boot/zImage

パッケージ化が成功したら、ソース コード ディレクトリに移動して、kernel_new.img ファイルを見つけます。
ここに画像の説明を挿入します

5. Raspberry Pi SD カードをマウントし、コンパイルされたカーネル ソース コードを SD カードにインストールします。

1) SD カードのマウントを容易にするために、最初に 2 つの空のフォルダーを作成します。

mkdir data1 data2

dmesgでカーネルの印刷情報を確認し、「sdb1 sdb2」と表示された場合は、
USBディスクのマウントを行ってください。

sudo mount /dev/sdb1 data1   一个fat分区,是boot相关的内容,kernel的img
sudo mount /dev/sdb2 data2   一个是ext4分区,也就是系统的根目录分区。

以下では、[fat] を使用してブート マウント パスを示し、[ext4] を使用して ext4 マウント パスを示します。

2) モジュールとデバイスドライバーファイルをインストールします

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install

ext4 パーティションを操作するには、root 権限が必要です。

3) kernel.img ファイルをインストールして更新します。イメージ名は kernel7.img であることに注意し
てください。カーネルの変更後に Raspberry Pi が起動できず、元のカーネルが見つからないことを防ぐため、更新する前にバックアップしてください。

```bash
cd [fat]
cp kernel7.img kernel7old.img

kernel_new.img ファイルは以前に mkknlimg ツールにパッケージ化されているので、それをブート パーティションにコピーし、使用できるように設定します。

cp kernel_new.img [fat]/

次に、[fat]/config.txt ファイルを編集し、最後に次の行を追加します。

kernel=kernel_new.img

新しく生成されたコンパイルを [fat]/ にコピーして、kernel7.img という名前を付けることもできます。

cp kernel_new.img [fat]/kernel7.img

この場合、[fat]/config.txt ファイルを変更する必要はありません。

4) 他の関連ファイルをコピーする

sudo cp arch/arm/boot/dts/*.dtb [fat]/
sudo cp arch/arm/boot/dts/overlays/*.dtb* [fat]/overlays/
sudo cp arch/arm/boot/dts/overlays/README [fat]/overlays/

6. SD カードを Raspberry Pi に挿入し直し、シリアル ポート経由でログインし、Raspberry Pi のカーネル出力ログが正常かどうか、および正常にログインできるかどうかを確認します。
ここに画像の説明を挿入します

以前のカーネル バージョンは 5.15.32 でしたが
、その後 5.15.0 に変更されました。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/m0_68038554/article/details/132011324