目次:
ドライバーコードの記述には、コンパイル済みのカーネルが必要です。カーネルをコンパイルするには、カーネルを構成する必要があります。構成の最終的な目標は、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.gz
RaspberryPiにこのノードがあります:このノードから、この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
コマンドを使用して、変更されたカーネル情報を表示できます。