トリミングの目的
お客様は電源投入後の起動時間について特定の要件を持っている場合があるため、起動時間を最適化し、短縮するようにカーネルを調整する必要があります。システムの消費電力が低い。
Makefile、Kconfig、.config ファイルの簡単な紹介
- Makefile: ソースファイルをコンパイルしたテキスト形式のファイル
- Kconfig: カーネルの構成メニューのテキスト形式のファイル。
- .config: カーネルがコンパイルされる構成
- Kconfig ファイルと Makefile ファイルは通常、Linux カーネルのディレクトリ構造に存在します。
- カタログのすべてのレベルで配布
- Kconfig はカーネル構成の分散データベースを構成し、各 Kconfig は、それが属するディレクトリのソース ファイルに関連付けられたカーネルを記述します。
- 設定メニュー。カーネルが make menuconfig をグラフィカルに設定するときに Kconfig から設定メニューを読み取り、ユーザーが設定を完了した後にそれを .config に保存します。
- カーネルがコンパイルされると、メインの Makefile は this.config を呼び出し、ユーザーがカーネルをどのように構成したかを確認します。
Makefile と Kconfig 構文の概要
● メイクファイル
Makefile サブディレクトリは、最上位の Makefile に含まれています。これは、モジュールとしてコンパイルされるものと、条件付きでコンパイルされるものを定義するために使用されます。
(1) 直接コンパイル obj-y +=xxx.o
これは、xxx.o が xxx.c または xxx.s からコンパイルされ、カーネルに直接コンパイルされることを意味します。
(2) 条件付きコンパイル obj-$(CONFIG_HELLO) +=xxx.o
.config ファイルの CONFIG_XXX は、ファイルがカーネルにコンパイルされるかどうかを決定します。
(3) モジュールのコンパイル obj-m +=xxx.o
これは、xxx がモジュールとしてコンパイルされることを意味します。つまり、make modules が実行されるときにコンパイルされます。
● Kconfig
各設定メニュー項目にはタイプ定義があります。 bool: ブール型、tristate: 3 つの状態 (組み込み、モジュール、削除)、string: 一連の文字、hex: 16 進数、integer: 整数
機能: menuconfig 作成時に表示されるメニュー項目を決定します。
1) NEW _ LEDS: 構成オプションの名前。接頭辞「CONFIG_"」は省略されています。
2) tristate: 項目がカーネルにプログラムされているか、モジュールにプログラムされているかを示します。 < > として表示され、カーネル モジュールとしてコンパイルするように選択した場合、.config に CONFIG_HELLO_MODULE=m 構成が生成されます。 Y を選択すると、カーネルに直接コンパイルされ、.config 内に構成 CONFIG_HELLO_MODULE=y が生成されます。
3) bool: この型はオンまたはオフにすることのみ可能です。 menuconfig作成時は[ ]と表示され、モジュールとして設定することができません。
4) dependon: このオプションは別のオプションに依存します。依存関係がチェックされている場合にのみ、現在の構成項目を設定するための現在の構成項目のプロンプト メッセージが表示されます。
5) select: 逆依存関係。このオプションをチェックすると、select の後に定義された項目もチェックされます。
6) ヘルプ: ヘルプ情報。
tristate と bool に続く文字列は、make menuconfig で表示される設定項目名です。
「menuconfig NEW_LEDS」や「menu "Video support for sunxi"」などの Kconfig 内の定義は、通常、ディレクトリの最上位ディレクトリであり、menuconfig では、その構成項目を検索することで、対応するドライバを直接トリミングできます。
カタログ階層の反復:
Kconfig には、新しい Kconfig ファイルを含める (またはネストする) ために使用される「source "drivers/usb/Kconfig"」のようなステートメントがあり、これにより、同じファイルにすべての構成を書き込むことなく、各ディレクトリが独自の構成コンテンツを管理できるようになります。変更や管理が容易になります。
部分主導型テーラリング
1. カスタマイズのアイデア
GPADC 関数を例にとると、ソース コード カーネル内のドライバーの場所は、drivers/input/sensor/sunxi_gpadc.c です。
したがって、そのパス内の Kconfig ファイルに移動し、Kconfig ファイル内で「menu」を直接検索できます。これは通常、そのドライバーの最上位ディレクトリに対応します。
構成オプションの名前が INPUT_SENSOR であり、menuconfig の「Sensors」という名前に対応していることがわかります。その後、menuconfig でこの構成オプションを直接検索できます。カーネルパスでmake menuconfigを実行します。
ARCH=arm64 グラフィカル構成インターフェイスに入ります。
この画面で、「/」、「INPUT_SENSOR」と入力し、Enter キーを押します。
図に示すように、この項目は、デバイス ドライバー ---> 入力デバイス サポート パス、および汎用
「入力層(キーボード、マウスなどに必要)」構成オプションは「y」(はい)に設定されています。
センサーの構成をキャンセルし、.config ファイルとして保存して終了します。その後、OKT507-linux-sdk パスに戻り、カーネルを個別にコンパイルして、イメージをパッケージ化します。
forlinx@ubuntu:~/work/OKT507-linux-sdk$ ./build.sh カーネル
forlinx@ubuntu:~/work/OKT507-linux-sdk$ ./build.sh パック
2. 部分的なドライブパス
デバイス |
ソースカーネル内のドライバーの場所 |
装置名 |
Menuconfig 内のパス |
---|---|---|---|
Wi-Fi |
Wi-Fi |
wlan0 |
デバイスドライバー ---> 削除:ネットワークデバイスのサポート |
ネットワークカード |
ドライバー/ネット/イーサネット/allwinner/ |
/sys/クラス/ネット/eth* |
|
hdmi |
ドライバー/ビデオ/fbdev/sunxi/disp2/hdmi2/ |
/dev/fb1 |
デバイス ドライバー ---> グラフィック サポート ---> フレーム バッファー デバイス ---> sunxi のビデオ サポート ---> 削除: HDMI2.0 ドライバー サポート (sunxi-disp2) (まだ完全には修正されていません) |
USB-Uディスク |
ドライバー/USB/ストレージ/ |
/dev/sdx |
デバイスドライバー ---> USB サポート ---> 削除:USB マスストレージサポート |
USB-4G |
ドライバー/USB/シリアル/ |
/dev/ttyUSB* |
デバイスドライバー ---> USB サポート ---> 削除:USB シリアルコンバーターのサポート |
USBカメラ |
ドライバー/メディア/usb/uvc/uvc_video.c |
|
デバイスドライバー ---> マルチメディアサポート ---> メディア USB アダプター ---> 削除:USB ビデオクラス (UVC) |
USBカメラ |
ドライバー/メディア/usb/uvc/uvc_video.c |
|
デバイスドライバー ---> マルチメディアサポート ---> メディア USB アダプター ---> 削除:USB ビデオクラス (UVC) |
番犬 |
drivers/watchdog/sunxi_wdt.c |
/dev/ウォッチドッグ |
デバイスドライバー ---> 削除:ウォッチドッグタイマーサポート |
ブルートゥース |
ドライバー/ブルートゥース/ |
|
ネットワーク サポート ---> Bluetooth サブシステム サポート ---> Bluetooth デバイス ドライバー ---> すべてのチェックを外します (元の設定を忘れずに記録してください) |
オーディオ |
サウンド/soc/sunxi |
/dev/snd/ |
デバイス ドライバー ---> サウンド カード サポート ---> 高度な Linux サウンド アーキテクチャ ---> ALSA for SoC オーディオ サポート ---> Allwinner SoC オーディオ サポート ---> すべてのチェックを外します (元の構成を忘れずに記録してください) |
PWM |
drivers/pwm/pwm-sunxi.c |
/sys/クラス/pwm/ |
デバイスドライバー ---> 削除:パルス幅変調 (PWM) サポート |
OV5640_DVP |
ドライバー/メディア/プラットフォーム/sunxivin/モジュール/センサー/ov5640.c |
/dev/ビデオ* |
デバイスドライバー ---> マルチメディアサポート ---> V4L プラットフォームデバイス ---> 削除:sunxi ビデオ入力 (カメラ csi/mipi isp vipp)driverOpen OKT507-linux-sdk/kernel/linux-4.9/drivers/media/platform /Makefile、コメントアウト obj-y += |
OV5640_MIPI |
ドライバー/メディア/プラットフォーム/sunxivin/モジュール/センサー/ov5640_mipi.c |
||
TP2854M |
ドライバー/メディア/プラットフォーム/sunxivin/モジュール/センサー/tp2854_mipi.c |
||
|
|
|
sunxi_car_reverse/ |
デバイス |
ソースカーネル内のドライバーの場所 |
Menuconfig 内のパス |
装置名 |
---|---|---|---|
GT911タッチ |
ドライバー/入力/タッチスクリーン/gt911.c |
デバイスドライバー ---> 入力デバイスサポート ---> タッチスクリーン ---> 削除:Goodix I2C タッチスクリーン gt911、Goodix I2C タッチスクリーン gt928、TSC2007 ベースのタッチスクリーン |
/dev/input/event*evtest を使用してイベントを表示します。例: GPADC の対応する名前は issunxi-gpadc0sunxi-gpadc1sunxi-gpadc2sunxi-gpadc3 |
GT928タッチ |
ドライバー/入力/タッチスクリーン/gt928.c |
||
TSC2007タッチ |
ドライバー/入力/タッチスクリーン/tsc2007.c |
||
LRADC |
ドライバー/入力/キーボード/sunxi-keyboard.c |
ドライバー/入力/キーボード/sunxi-keyboard.c |
|
GPADC |
ドライバー/入力/センサー/sunxi_gpadc.c |
デバイス ドライバー ---> 入力デバイスのサポート削除:センサー |
|
IR |
ドライバー/メディア/rc/sunxi-ir-dev.c |
デバイスドライバ ---> マルチメディアサポート 削除:リモコンデコーダ、リモコンデバイス |
|
RTC |
ドライバー/rtc/rtc-rx8010.c |
デバイスドライバー ---> 削除:リアルタイムクロック |
/dev/rtc0 |
上記はドライバーの 1 つのトリミングですが、他の機能は前述の方法に従ってトリミングできます。
元は www.forlinx.net で公開されています。