参考記事
1. クロスコンパイル環境の設定
以前にubuntu上で設定したのでそのまま飛ばしてください。
2. 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 に変更されました。