1401063_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1401063_ja-JP

1401063_ja-JP

8MIC-RPI-MX8ボードのRGB LEDとプッシュボタンを有効にします。

プッシュボタンに関するお役立ち情報です。


物理的なレベル。

 

 

JulioMeza_2-1642521492586.png

 

P0-P7ピンの電圧レベルが変化すると、INTピンPCA9555PW割り込みが発生します。このドライバ(SoC上で動作する)は、I2C(SCL / SDAピン)を介してP0-P7ピンのステータスを読み取り、P0-P7ピンごとに個別の割り込みを生成できます。これが、このドライバー割り込みコントローラーとして機能する理由です

次の構成について考えてみます。

JulioMeza_3-1642521543516.png

 

1つのプッシュボタンでP4ピンのレベルが変わり、PCA9555PW割り込みが発生しやすくなります。PCA9555PWからの割り込みはGPIO5のIPコア(SoC内部)に接続され、そのGPIO5モジュールの#9行目を使用してCPUに割り込みを通知します。したがって、PCA9555PWはGPIO5コントローラーにカスケード接続されていると言えます。GPIO5は割り込みコントローラーとしても機能し、GIC割り込みコントローラーにカスケード接続されています。

 

デバイス ツリーのプロパティ


プロパティの意味は次のとおりです。

  • interrupt-controllerプロパティは、デバイスが割り込みを生成することを定義します。このノードを各プッシュボタンノードのinterrupt-parentとして使用するには、さらに必要になります

  • #interrupt-cellsinterrupts プロパティ のフォーマットを定義します 。この例では2 、 行番号が 1 セル、割り込みタイプが 1 セル という です

  • interrupt-parent プロパティと interrupts プロパティは、割り込みライン接続を説明しています


Interrupt handling.


  • CPU は、GIC 割り込みハンドラの割り込みコンテキストになりました。gic_handle_irq()から handle_domain_irq()を呼び 、 を呼びgeneric_handle_irq()を呼び出します。詳細は Documentation/gpio/driver.txt を参照してください。これで、SoCのGPIOコントローラーIRQハンドラーにいます。

  • SoC の GPIO ドライバーは 、特定のピンごとに設定されるgeneric_handle_irq()to run ハンドラーも呼び出します。たとえば、omap_gpio_irq_handler()でどのように行われるかを参照してください 。これで、IRQハンドラPCA9555PWいます。

  • PCA9555PW IRQ ハンドラは handle_nested_irq()を呼び出します。

  • 最後に、 gpio_keys_gpio_isr() が呼び出されます。

次の手順では、8M Mini Applications Processor Evaluation Kit (EVKB) を搭載した 8MIC-RPI-MX8 ボードで RGB LED とプッシュ ボタン i.MX イネーブルにできます。LEDドライバーを使用して、デバイスツリーを変更する必要があります。

ホスト上。

Linux カーネルリポジトリのクローンを作成する


i.MX Linux カーネル リポジトリを ホーム ディレクトリにクローンします。

cd ~
git clone https://source.codeaurora.org/external/imx/linux-imx

このガイドでは、カーネル 5.10.35-2.0 に対応する次のコミットを使用します

cd linux-imx/
git checkout -b RGB ef3f2cfc6010

d evice ツリー にパッチを適用します 。


「0001-Enable-RGB-LED-s-and-push-buttons-on-8MIC-RPI-MX8-bo.patch」をダウンロードしますこの投稿に添付されているファイルを作成し、それをlinux-imxディレクトリにコピーしてから、パッチを適用してください。

cp 0001-Enable-RGB-LED-s-and-push-buttons-on-8MIC-RPI-MX8-bo.patch ~/linux-imx/
cd ~/linux-imx/
patch < 0001-Enable-RGB-LED-s-and-push-buttons-on-8MIC-RPI-MX8-bo.patch

プロンプトが表示されたら、sはパッチを適用するファイルを選択します。

File to patch: arch/arm64/boot/dts/freescale/imx8mm-evk-8mic-revE.dts patching file arch/arm64/boot/dts/freescale/imx8mm-evk-8mic-revE.dts

次に、次のようにツールチェーンを設定します。

source /opt/fsl-imx-wayland/5.10-hardknott/environment-setup-cortexa53-crypto-poky-linux

設定ファイルを生成します。

make imx_v8_defconfig

デバイスツリーをコンパイルします。

make freescale/imx8mm-evk-8mic-revE.dtb

.dtbをコピーしますファイルを EVK に (たとえば scp を使用して) ファイルします。

scp imx8mm-evk-8mic-revE.dtb root@:/home/root

または、.dtbをコピーすることもできますカーネルファイルとデバイスツリーファイルが配置されているFAT32パーティションに直接ファイルします。

LEDドライバー のコンパイル 。


leds-pca995x.h を入手します。次のサイトのファイル:

https://github.com/TechNexion/linux-tn-imx/blob/tn-imx_5.4.70_2.3.0-stable/include/linux/platform_da... 

次のパスにコピーします。

cp leds-pca995x.h ~/linux-imx/include/linux

新しいディレクトリを作成します。

mkdir ~/linux-imx/PCA9955

メイクファイルを作成します。

cd ~/linux-imx/PCA9955
vim Makefile

 

KERNEL_ROOT?=~/linux-imx

obj-m += leds-pca995x.o

all: make -C $(KERNEL_ROOT) M=$(PWD) modules

clean: make -C $(KERNEL_ROOT) M=$(PWD) clean

 

「Esc」キーを押してから、次の操作を行います。

:wq

leds-pca995x.cを入手します。次のサイトのファイル:

https://github.com/TechNexion/linux-tn-imx/blob/tn-imx_5.4.70_2.3.0-stable/drivers/leds/leds-pca995x...

次のパスにコピーします。

cp leds-pca995x.c ~/linux-imx/PCA9955

0001-PCA9955BTW.patch ファイルを取得し、次のパスにコピーします。

cp 0001-PCA9955BTW.patch ~/linux-imx/PCA9955

パッチを適用します。

patch < 0001-PCA9955BTW.patch

次に、次のようにツールチェーンを設定します。

source /opt/fsl-imx-wayland/5.10-hardknott/environment-setup-cortexa53-crypto-poky-linux

.ko を生成するファイル。

cd ~/linux-imx/PCA9955
make all

.ko をコピーします。ファイルを EVK に (たとえば scp を使用して) ファイルします。

scp leds-pca995x.ko root@192.168.100.105:/home/root

注:Linuxバージョンの.koファイルは EVK と同じである必要があります。

EVKで。

デバイスツリーの 切り替え 。


更新されたデバイスツリーを対応するパーティションにコピーするには、まずディレクトリを作成します。

mkdir Partition_1

パーティションを1つマウントします。

mount /dev/mmcblk1p1 Partition_1/

デバイスツリーをパーティション1にコピーまたは移動します。

cp imx8mm-evk-8mic-revE.dtb Partition_1/

ボードを再起動します。

reboot

u-boot で停止し、.dtb を変更します。8micボードのデバイスツリーを使用するためのファイル。

u-boot=> editenv fdtfile 
edit: imx8mm-evk-8mic-revE.dtb 
u-boot=> saveenv 
Saving Environment to MMC... Writing to MMC(1)... OK 
u-boot=> boot

LEDドライバーのインストール。


次のコマンドを実行して 、ledドライバーをカーネルにロードします。

insmod leds-pca995x.ko

そして、次のようなものが表示されます。

[ 249.359103] leds_pca995x: loading out-of-tree module taints kernel. 
[ 249.366864] ALL 
[ 249.368740] ALL 0 
[ 249.370667] ALL 1 
[ 249.372609] ALL 2 
[ 249.374536] ALL 2 
[ 249.376475] ALL 2 
[ 249.378401] ALL 2 
[ 249.380338] ALL 2 
[ 249.382264] ALL 2 
[ 249.384202] ALL 2 
[ 249.386127] ALL 2 
[ 249.388063] ALL 2 
[ 249.389989] ALL 2 
[ 249.391913] ALL 2 
[ 249.393847] ALL 2 
[ 249.395774] ALL 2 
[ 249.397709] ALL 2 
[ 249.399635] ALL 2 
[ 249.401568] ALL 2 
[ 249.403496] ALL 3

LEDを点灯します。


デバイスツリーを変更した場合は、次のコマンドでLEDを点灯できます。

echo 250 > /sys/class/leds/pca995x\:blue0/brightness

LED をオフにするには:

echo 0 > /sys/class/leds/pca995x\:blue0/brightness

赤、青、緑のLEDは、提供されるさまざまな強度で点灯できます。

プッシュボタンのテスト。


デバイスツリーを変更した場合は、次のコマンドでプッシュボタンをテストできます。

evtest

正しい番号を選択します。

No device specified, trying to scan all of /dev/input/event* 
Available devices: 
/dev/input/event0: 30370000.snvs:snvs-powerkey 
/dev/input/event1: sw_keys 
/dev/input/event2: gpio_ir_recv 
Select the device event number [0-2]: 1

そして、あなたは見るでしょう:

Input driver version is 1.0.1 
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100 
Input device name: "sw_keys" 
Supported events: 
  Event type 0 (EV_SYN) 
  Event type 1 (EV_KEY) 
    Event code 67 (KEY_F9) 
    Event code 113 (KEY_MUTE) 
    Event code 114 (KEY_VOLUMEDOWN) 
    Event code 115 (KEY_VOLUMEUP) 
Properties: 
Testing ... (interrupt to exit) 
Event: time 1642457988.1642457988, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 1 
Event: time 1642457988.1642457988, -------------- SYN_REPORT ------------ Event: time 1642457988.1642457988, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 0 
Event: time 1642457988.1642457988, -------------- SYN_REPORT ------------
i.MX 8M | i.MX 8M Mini | i.MX 8M NanoLinux
Tags (1)
No ratings
Version history
Last update:
‎01-05-2026 02:32 PM
Updated by: