RaspberryPi構成Linuxカーネルソースコード


ドライバーコードの記述には、コンパイル済みのカーネルが必要です。カーネルをコンパイルするには、カーネルを構成する必要があります。構成の最終的な目標は、Makefileに有用なものをカーネルに編成するように指示する.configファイルを生成することです。

1.コンパイルに必要なソースコードを入手します。

クリックして公式ウェブサイトに入ります
ここに画像の説明を挿入
必要なドキュメント:
linux:カーネルソースコード、ブランチの下でバージョンを選択できます。
ツール:カーネルやその他のソースコードをコンパイルするために必要なツール-クロスコンパイラなど。

Linux:

ここに画像の説明を挿入

ツール:

ここに画像の説明を挿入

2.環境変数を構成します。

(1)環境変数を手動で構成する:
①現在の環境変数の値をecho $PATH
取得する②クロスコンパイルツールチェーンのパスを取得する環境変数を手動で構成pwd
する:export PATH=エコー$ PATH+pwd

tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin	// 将该文件配置入环境变量
arm-linux-gnueabihf-gcc -> arm-linux-gnueabihf-gcc-4.8.3					// 使用该交叉编译工具

(2)環境変数の自動構成:
①作業ディレクトリを入力します: ②作業ディレクトリcd
に非表示の.bashrcファイルを入力します:vi .bashrc
③非表示の.bashrcファイルの内容を変更し、対応する内容をファイルの最後の行に追加します。export PATH=エコー$ PATH+pwd
④ファイルを保存する

3.構成を構成します。

Linuxのソースコードには多くのプロジェクトがあります。

  • Raspberry Pi1のプロジェクトはbcmrpi_defconfig
  • Raspberry Pi2および3のプロジェクトはbcm2709_defconfig

(1)ソースコードに付属の設定を使用します。

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
// 获取 bcm2709_defconfig 的配置到 .config 里,此命令在 linux-rpi-4.14.y 目录下执行

説明:

  • ARCH=arm:ARMアーキテクチャを指定する
  • CROSS_COMPILE=arm-linux-gnueabihf-:コンパイラを指定する
  • KERNEL=kernel7:ラズベリーパイ
  • make bcm2709_defconfig:主なコア命令

プロジェクトで直接構成を使用できますが、この場合、元のRaspberryPiの構成が失われる可能性があります。現在使用されているRaspberryPiの構成を取得する方法は次のとおりです。

(2)現在のRaspberryPiの構成を取得します。

①電源がオンになっている/proc/config.gzRaspberryPiにこのノードがあります:このノードから、このRaspberry Piの構成を取得できます。
そのようなノードがない場合は、最初にモジュールをロードする必要があります。sudo modprobe configs

config.gzコンテンツをコンパイルするパソコンにコピーする

③解凍して.configファイルとして保存します。zcat config.gz > .config
注:Linux環境では解凍する必要があります。解凍しないと文字化けします。

④この設定ファイルをLinuxソースコードのルートディレクトリにコピーします

4.コンパイル:

(1)必要なライブラリをインストールします。

必要なライブラリをインストールします。
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)menuconfigを実行します。

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

(3)コンパイル:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
// 此过程持续时间较长

説明:

  • -j4:コンパイルのために呼び出すコンピューターリソースの数を指定します
  • zImage:カーネルイメージを生成する
  • modules:ドライブモジュールを生成する
  • dtbs:構成ファイルを生成する

カーネルソースツリーディレクトリvmlinuxさらにファイルがあり、コンパイルが成功し、ターゲットzImageイメージがarch/arm/bootパスにあることを示しています

(4)zImageファイルをパックします。

Linuxソースパッケージのツールを直接使用します。

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

kernel_new.imgこのディレクトリにファイルを生成します。このファイルはSDカードに配置されるファイルです。

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

Raspberry Piのsdカードをubuntuシステムの仮想マシンに挿入します。RaspberryPiのsdカードには2つのパーティションがあります
。1つはブート関連のコンテンツであるfatパーティションで、カーネルimgファイルは次の場所に配置されます。このパーティション。
もう1つはext4パーティションで、システムのルートパーティションです。
(1)2つのフォルダを作成します。

mkdir data1
mkdir data2

(2)マウント:

sudo mount /dev/sdb1 data1
sudo mount /dev/sdb2 data2

/dev/sdb1(ファットパーティション)data1にマウント
/dev/sdb2(ext4パーティション)data2にマウント

(3)data2(ext4パーティションmodules)に(デバイスドライバーファイル)をインストールします
この操作は、カーネルソースlinux-rpi-4.14.yパスで実行する必要があります

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/xxx/data2 modules_install

data2(ext4パーティション)のパスに注意してください

(4)kernel.imgファイルを更新します。

注:イメージの名前はですkernel7.img。バックアップしてから更新することお勧めします
①バックアップkernel7.img(元のディレクトリにバックアップし、名前を付けるだけ)(このファイルはファットパーティションにあります)

②新しく生成された画像をにkernel_new.imgコピーcpしますdata1(ファットパーティション)kernel7.imgファイル

③ファイルコードを確認して、コピーが完了しているか確認してください。

md5sum kernel_new.img	// 查看 kernel_new.img 文件编码
md5sum kernel7.img		// 查看 kernel7.img 文件编码

④設定ファイルをコピーします(archファイルはカーネルソースlinux-rpi-4.14.yパスにあります):

cp arch/arm/boot/dts/.*dtb* /home/xxx/data1

cp arch/arm/boot/dts/overlays/.*dtb* /home/xxx/data1/overlays

cp arch/arm/boot/dts/overlays/README /home/xxx/data1/overlays

パスに注意してください

更新が完了したら、SDカードをRaspberry Piに挿入して起動します。起動後、uname -aコマンドを使用して、変更されたカーネル情報を表示できます。

おすすめ

転載: blog.csdn.net/lcx1837/article/details/113486409