RaspberryPiカーネル構成

元のアドレス:http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei -he.html

Raspberry PiはLinuxシステムを実行し、カーネルコードはオープンソースです。カーネルコードを変更し、ドライバーを自分で作成できます。

この記事では、Linuxカーネルコードを取得し、コンパイルとカーネル置換を完了する方法について説明します。

1.概要
RaspberryPiのgithubホームページ:https://github.com/raspberrypiには、Linuxソースコード、クロスコンパイルツールチェーンなどが含まれています。

使用する倉庫は2つあります。

https://github.com/raspberrypi/linuxカーネルソースコード

https://github.com/raspberrypi/toolsクロスコンパイルツールチェーン(クロスコンパイルでのみ使用)

注:
1。RaspberryPiにインストールされているシステムイメージのバージョンは、カーネルコードに対応している必要があります。Raspberry Piシステムは常に開発およびアップグレードされているため、Raspberry Piが特定の時間にシステムイメージを使用する場合は、その時点でカーネルコードを使用することをお勧めします。
2.カーネルのコンパイル方法については、公式Webサイトに非常に詳細な紹介があります:https://www.raspberrypi.org/documentation/linux/kernel/building.md、ここに翻訳と補足があります。
3.次のコンパイルプロセスは、Raspberry Pi1およびRaspberryPi3Bでテストされています。

2.ubuntuでのクロスコンパイル
1.クロスコンパイルツールとソースコードを入手する

ソースコード:git clone [email protected]:raspberrypi / linux

クロスコンパイルツール:git clone [email protected]:raspberrypi / tools

2.コンパイル環境変数を構成します

2.1環境変数を手動で構成する

コンパイルツールをダウンロードした後、64ビットubuntuで必要なコンパイルツールのbinファイルをtools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf-raspbian-x64 / binディレクトリにコンパイルし、このディレクトリを環境に追加します。変数PATHに、次の​​メソッドを追加します。

PATH = $ PATH:/ home / nicek / githubProjects / raspberrypi / tools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf-raspbian-x64 / bin

32ビットシステムでコンパイルする場合は、32ビットクロスコンパイラツールを選択する必要があります。

構成が完了したら、コンパイラツールコマンドを使用してバージョン番号を確認できます:
arm-linux-gnueabihf-gcc -v

その後、すべてのmakeコマンドでいくつかの環境変数を指定する必要があります
。ARCH= arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7

ARCH = armは、armが現在コンパイルされることを示します。RaspberryPiは64ビットですが、ここではarm64ではなくarmが選択されています。
CROSS_COMPILEは、クロスツールチェーンの名前を示します。
KERNELはカーネルのタイプを示します。RaspberryPi1はkernelに設定され、Raspberry Pi2および3はkernel7に設定されます。
makeは、次のような環境変数を指定する必要があるたびに、
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make menuconfig
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make -j4 zImage

2.2環境変数の自動構成

上記の環境変数をコマンドごとに記述するのは面倒であり、エクスポートを介して一度設定できます
。exportPATH = $ PATH:/ home / nicek / githubProjects / raspberrypi / tools / arm-bcm2708 / gcc-linaro-arm-linux-gnueabihf- raspbian-x64 / bin ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 kernel7の
後にこの端末で実行されるすべてのコマンドには、これらの環境変数情報があります。

このエクスポートコマンドはスクリプトとして記述でき、コンパイルしてすべての環境変数を設定する前に、ターミナルでこのスクリプトを入手できます。Androidをコンパイルする前に、envsetup.shを入手するだけです。

#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
export PATH="$PATH:$DIR/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/"
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7

上記のコマンドのパスは実際のパスと異なる場合がありますので、変更に注意してください。

環境変数をエクスポートした後、この端末の後続のコマンドは、次のようなこれらの環境変数を指定できなくなります。
構成前のコマンド:ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7構成
後のmakemenuconfigコマンド:make menuconfig

3.構成を構成します

Linuxソースコードには多くのプロジェクトがあります
。RaspberryPi1のプロジェクトはbcmrpi_defconfigであり、
Raspberry Pi2および3のプロジェクトはbcm2709_defconfigです。

3.1ソースコードに付属の設定を使用する

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

このコマンドの機能は、bcm2709_defconfigの構成を.configに取得することです。
プロジェクトで直接構成を使用できますが、この場合、元のRaspberryPiの構成が失われる可能性があります。現在使用中のRaspberryPiの構成を取得する方法を次に示します。

3.2現在のRaspberryPi構成を取得する

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

config.gzの内容をコンパイルするコンピューターにコピーします:
scp pi @ [ip]:/ proc /config.gz。

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

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

4.コンパイル

安装分割的库:
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

1. menuconfig
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make menuconfigを実行します。
変更がない場合は、この手順を実行する必要はありません。

2.
ARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make -j4zImageモジュールdtbs2>&1 | tee build.log
をコンパイルして、nプロセスでコンパイルします。プロセス数が指定されていない場合、デフォルトで単一プロセスとしてコンパイルされます。

3. zImageファイルをパックします。Linux
ソースパッケージのツールを直接使用します。./scripts/mkknlimgarch/arm/boot/zImage./kernel_new.imgこのディレクトリにkernel_new.imgファイルを生成します。このファイルは、sdカードに配置されます。資料。注:インターネット上の多くの場所では、tools / mkimage /imagetool-uncompressd.pyの使用は機能しないと言われています。


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

Raspberry Piのsdカードをubuntuシステムコンピューターに挿入します。RaspberryPiのsdカードには2つのパーティション
があります。ブートコンテンツに関連するfatパーティションと、カーネルimgファイルがこのパーティションに配置されます。
もう1つはext4パーティションです。これは、システムのルートディレクトリパーティションです。

生成したファイルには、これら2つのパーティションの内容が含まれています。通常、ubuntuに挿入すると自動的にマウントされます。fatパーティションはroot権限なしで操作でき、ext4パーティションにはroot権限が必要です。

2つのパーティションをどこにマウントするかは自分で決めることができます。以下では、[fat]はブートがマウントされるパスを示し、[ext4]はext4がマウントされるパスを示します。

1.モジュールをインストールします
sudoARCH = arm CROSS_COMPILE = arm-linux-gnueabihf- KERNEL = kernel7 make INSTALL_MOD_PATH = [ext4] modules_installを使用し
てext4パーティション操作するには、root権限が必要です。

2.
kernel.imgファイルを更新します。kernel_new.imgファイルはmkknlimgツールにパッケージ化されており、ブートパーティションにコピーして、使用できるように構成し
ます。cpkernel_new.img [fat] /
edit [fat] /config.txt file、最後に行を追加し
ますkernel = kernel_new.img

3、复制∥別相関連文件
cp arch / arm / boot / dts / .dtb [fat] /
cp arch / arm / boot / dts / overlays / .dtb * [fat] / overlays /
cp arch / arm / boot / dts /オーバーレイ/ README [ファット] /オーバーレイ/

更新が完了したら、Raspberry Piを接続して起動します。起動後、uname -aコマンドを使用して、カーネル情報が変更されていることを確認できます。

3. RaspberryPi
でのローカルコンパイルRaspberryPiでのローカルコンパイルの原則は、基本的に上記のクロスコンパイルの原則と同じです。ローカルコンパイルであるため、コンパイルツールと環境変数の構成が簡単になります。
RaspberryPiでカーネルをコンパイルするのに2時間近くかかりました。

1.ソースコードを取得します

git clone [email protected]:raspberrypi / linux

2.コンパイル環境を構成します

ubuntuでクロスコンパイルするときに構成する必要がある環境変数は次のとおりです。

パス:クロスツールチェーンのディレクトリを追加します
ARCH:アームとして構成します
CROSS_COMPILE:ubuntuで使用されるクロスツールチェーンとして構成しますarm-linux-gnueabihf- KERNEL = kernel7 KERNEL
:カーネル7として構成
し、Raspberry Piでローカルにコンパイルします:
クロスツールチェーンについて、独自のコンパイルツールを独自にコンパイルできるため、構成する必要はありません
。KERNEL= kernel7を構成するだけです。

上記と同じように、export KERNEL = kernel7を使用できます。1つの設定の後、この端末のすべてのコマンドにこの環境変数があります。
さらにスクリプトとして作成することもできますが、このコマンド行は非常に単純なので、スクリプトを作成する必要はありません。

3.構成を構成します

上記のように、
Raspberry Pi 1はbcmrpi_defconfigを使用しRaspberry Pi2
および3はbcm2709_defconfigを使用します。
例:KERNEL = kernel7 make bcm2709_defconfig

Raspberry Piに付属の構成を使用する場合:
sudo modprobe configs#モジュールをロードします
zcat config.gz> .config#構成を取得します

4.コンパイル

必要なライブラリをインストールします:
須藤はapt-getをbcのインストール
はsudo apt-getののlibncurses5-devののlibncursesw5-devのインストール
はsudo apt-getのインストールがあります:zlib1g
須藤はapt-getのインストールのlibc6を

1. menuconfig KERNEL
= kernel7 make menuconfigを実行します
変更するものがない場合は、この手順を実行する必要はありません。

2.
KERNEL = kernel7 make -j4zImageモジュールdtbs2>&1 | tee build.log
をコンパイルして、nプロセスでコンパイルします。プロセス数が指定されていない場合、デフォルトで単一プロセスとしてコンパイルされます。

3. zImageファイルをパックします。Linux
ソースパッケージのツールを直接使用します。./scripts/mkknlimgarch/arm/boot/zImage./kernel_new.imgこのディレクトリにkernel_new.imgファイルを生成します。このファイルは、sdカードに配置されます。資料。

5.システムを更新します

1.モジュール
sudomakemodules_installをインストールします

2、复制dtb文件
sudo cp arch / arm / boot / dts / .dtb / boot / sudo cp arch / arm / boot / dts / overlays / .dtb * / boot / overlays / sudo cp arch / arm / boot / dts /オーバーレイ/ README / boot / overlays /


3.kernel.imgファイルを更新しますsudocp arch / arm / boot / zImage /boot/$KERNEL.img

おすすめ

転載: blog.csdn.net/hhltaishuai/article/details/108007979