参照コードは、L4.14.78 GA1.0.0 BSP および M4 SDK 2.5.1 に基づいています。
iMX8QXP MEKボードでテストされており、iMX8QMボードでも動作するはずです。
L4.14.78 GA1.0.0 BSPでは、M4 FreeRTOSとA35 Linux間のRPMSGにMU_5が使用されており、SC_R_MU_5BはM4側、SC_R_MU_5AはA35側です。Linux側では、このテストに「imx_rpmsg_tty.ko」を使用しましたが、このドライバーはデフォルトのBSPでモジュールとしてビルドされています。
ケース1:M4はA35をウェイクアップします。
「L4.14.78_rpmsg_wakeup.patch」をLinuxカーネルに適用すると、このパッチによりRPMSGウェイクアップ機能が有効になります。
「rpmsg_lite_pingpong_rtos.tar.bz2」はM4側のテストコードです。Linux + M4 rpmsg ソフトウェアでボードを起動した後、次のテストコマンドを実行します。
1.A35 UART側で、次のコマンドを実行します。
# エコー有効 > /sys/bus/platform/devices/90000000.rpmsg/power/wakeup
# insmod ./imx_rpmsg_tty.ko
# /unit_tests/Remote_Processor_Messaging/mxc_mcc_tty_test.out /dev/ttyRPMSG30 115200 R 100 1000 &
# echo deadbeaf > /dev/ttyRPMSG30
# エコー mem > /sys/power/state
2. M4 UART側:
Linux側から「echo deadbeaf > /dev/ttyRPMSG30」を実行すると、「Got ping...」と言い、そこで待ってから、A35 suspend commane "echo mem > /sys/power/state"を実行した後、Linuxがサスペンドします。次に、M4 UART側から「c」キーを押すと、RPMSGがA35に送信され、A35Linuxが起動します。
ケース2:A35はM4をウェイクアップします。
「power_mode_switch_rpmsg_wakeup.tar.bz2」はM4側のテストコードで、Linux + M4 rpmsgソフトウェアでボードを起動した後、M4 UARTはA35 RPMSGドライバーの準備が整うのを待ちます。テストコマンド:
1.A35 UART 側で、次のコマンドを実行して RPMSG ドライバーを準備完了にします。
# insmod ./imx_rpmsg_tty.ko
# /unit_tests/Remote_Processor_Messaging/mxc_mcc_tty_test.out /dev/ttyRPMSG30 115200 R 100 1000 &
# echo deadbeaf > /dev/ttyRPMSG30
2.これで、M4 UARTはピンポンメッセージを表示して、RPMSGの準備ができていることを確認します。M4が電源スイッチメニューにあるので、M4 UARTでVLLS電源モードを選択します。
Hを押して入力:VLLS - Very Low Leakage Stopモード
... ...
RPMSG の場合は R を押します。
M4 UARTで「R」キーを押すと、M4は「RPMSGメッセージを送信してウェイクアップ」を印刷し、サスペンドモードに移行します。
3. A35側からM4をウェイクアップし、RPMSGに任意のデータを送信します。
# echo deadbeaf > /dev/ttyRPMSG30
M4が再開し、再び電源スイッチメニューに移動します。
SDK フォルダ (2 つの M4 サンプル コードをコンパイルします)。
SDK/ボード/mekmimx8qx/multicore_examples/rpmsg_lite_pingpong_rtos
SDK/ボード/mekmimx8qx/demo_apps/power_mode_switch
実際、私は現在5.4.24カーネルを使用しています。ドライバーは大きく異なり、MU ISRコードが表示されません。このカーネルに関するアップデートはありますか?
こんにちはシ ヴァ・プラバカラ、
「arch/arm64/boot/dts/freescale/fsl-imx8qxp-mek.dts」ファイルの変更を除いて、パッチを適用できると思います。RPMSGドライバーは、iMX8MMとiMX8QXPで同じです。
しかし、M4側については、iMX8MMのMU割り込みを生成するコードはありません。自分で実装する必要があります。
Qiang_FSL情報をありがとう、SCUが利用できず、パッチも適用されない可能性があるため、MU割り込みを有効にするための詳細を提供していただけますか?
こんにちはシヴァプラバカラ、
iMX8MMはiMX8QXPとは異なり、iMX8QXPにはすべてのウェイクアップイベントを管理するSCUがありますが、iMX8MMにはありません。
しかし、ウェイクアップソースは同じだと思います、Linuxがサスペンドモードに進む前にMUウェイクアップ割り込みを有効にすると、M4はこの割り込みを使用してAコアをウェイクアップできます。
iMX8MMに関する私の以前の質問に関する助けは大歓迎です。また、5.4.24カーネルにはpathc L4.14.78_rpmsg_wakeup.patchが必要ですか?
ありがとう Qiang Li - Mpu Se
確認してみます
ありがとうございます
ヴィノス S、
SCFW APIはほぼ同じなので、8QXPから8QMにコピーできます。
お返事ありがとうございます。
BOARD_EnablePadWakeup(sc_pad_tパッド、ブールイネーブル、sc_pad_wakeup_t pad_wakeup_config)はIMX8QX専用で、IMX8QMを探しています
ありがとう&よろしく、
ビノスS
M4側では、BOARD_EnablePadWakeup(sc_pad_tパッド、ブールイネーブル、sc_pad_wakeup_t pad_wakeup_config)を呼び出すだけでPINウェイクアップを設定できます。
PINがM4パーティションに割り当てられていることを確認する必要があります。
お返事ありがとうございます。可能であれば、sc_pad_set_wakeupを使用してM4からACoreをウェイクアップするサンプルコードを提供してください。
よろしくお願いします。
ビノスS
はい、ウェイクアップソースとして1つのピンを使用するのが最善の方法です、たとえば、このPINをM4パーティションに割り当て、sc_pad_set_wakeup()を呼び出してウェイクアップソースにすると、このPINを使用してM4をウェイクアップできます。また、ACoreパーティションに割り当て、sc_pad_set_wakeup()でウェイクアップソースを設定した場合、このPINはACoreをウェイクアップできます。
電源キーがあります。Arm Cortex M4のコード側に電源キーのウェイクアップ(押す代わりに、コードにハードコード)を登録することは可能ですか?
ありがとう&よろしく、
ビノスS
Linuxソース(imx_rpmsg.c)を提供していただけますか&必要なファイル) パッチ適用
ありがとうございます
ヴィノス S、
Hi,
ケース1を追ってみたところ、
通常、私はメッセージを送受信することができます。しかし、システムの一時停止後、私は目を覚ますことができません。
# cat ./sys/devices/platform/imx_rpmsg/90100000.rpmsg1/power/wakeup
イネーブル
# cat /proc/interrupts
105: 49 0 0 0 0 0 GICv3 217 Level imx-mu-rpmsg
ちゃんとパッチを貼りました。私の場合、rpmsg1 が使用されています。
Linux Version: 4.14.98
OS: Android 9
ありがとう&よろしく、
ヴィノス S、
4.14.98 BSPはハードウェアパーティションを追加したため、2.5.1 SDKコードを直接実行することはできませんが、SDK2.5.2コードを実行し、動作後に関連するテストコードを移植する必要があると思います。
私も同じパッチに従っています。
ここでM4マイコンが停止(GETCHAR)し、入力を提供できませんでした
qiang_debug 開始を追加
PRINTF("pingを受け取りました...\r\n");
(1)ながら
{
ch = GETCHAR();
if(ch == 'c')
壊す;
}
//qiang_debug add end
while (msg.データ <= 100)
{
PRINTF("pingを待っています...\r\n");
rpmsg_queue_recv(my_rpmsg, my_queue, (unsigned long *)&remote_addr, (char *)&msg, sizeof(THE_MESSAGE), NULL, RL_BLOCK);
msgです。データ++;
qiang_debug 開始を追加
PRINTF("pingを受け取りました...\r\n");(1)ながら
{
ch = GETCHAR();
if(ch == 'c')
壊す;
}qiang_debug 追加終了
PRINTF("ポンを送信しています...\r\n");
rpmsg_lite_send(my_rpmsg, my_ept, remote_addr, (char *)&msg, sizeof(THE_MESSAGE), RL_BLOCK);
}
通常、Linuxがサスペンドするときに割り込みを有効にしておくと、その割り込みを使用してLinuxをウェイクアップできます。
flex can devie treeに次の文字列を追加して試してみることができます:
&flexcan1 {
ウェイクアップソース;
};
ありがとう Qiang Li - Mpu Se
ON / OFFボタンの代わりにVMCUからのFlex CANウェイクアップはありますか?
よろしくお願いします。
ヴィノス S、
power_mode_switchアプリケーションは、M4をLinuxと一緒にサスペンドしないので、M4が動作し続けるときはON/OFFボタンでLinuxをウェイクアップできますし、Linux側で「echo mem > /sys/power/state」コマンドでLinuxを単独でサスペンドすることもできます。
Qiang Li-Mpu Seさん、迅速な返信ありがとうございます。
あなたの指摘から、私は power_mode_switch アプリケーションがシステムをウェイクアップできることを知っています。
そうでしょう。
よろしくお願いします。
ビノスS
リリースされたBSPの場合、ACoreとM4コアの両方が一緒にスリープとウェイクアップに行きます。
M4の動作をテストするには、RPMSGデバイスツリーで「fsl-imx8qxp-mek-rpmsg.dtb」などのLinuxリリースのBSPを使用し、M4側では「MEK-MIMX8QX-SDK\boards\mekmimx8qx\demo_apps\power_mode_switch」を使用し、Linuxを一時停止するとM4はウェイクアップを維持します。
Deep Sleepは、IMX8QM-MEKボードを搭載した Android 9 Automotive で動作しています。しかし、M4からどうやって目覚めるのかわかりません。現在、MEKボードに存在する電源キー(SW1)によるウェイクアップ。
以下の手続きが進めません。あなたは私が目覚めを見つけるのを手伝ってくれますか?
ありがとうございます
ビノスS
Hi Raluca Popa,
申し訳ございませんが、そのような消費電力データはありません。しかし、M4をMEKボードだけで動かすのが近いと思います。
Hi Qiang_FSL,
電力消費量の測定は可能ですか?私は、Cortex AがDSMにあり、M4がそれをウェイクアップする場合に興味があります。
現在、mini用の同様のアプリに取り組んでいます。VDD_GPU_VPU_DRAMの消費電力が非常に多いことに気づきました(8MMini:Cortex AがDeep Sleepにあり、Cortex MがアクティブのときにGPU / VPU / DDR_PHY電力をカットする方法)。
消費電力を分析したことがあるのかどうか疑問に思っていましたが、これについていくつかの結論を知っておくと役に立ちます。
ありがとうございます!
ラルカ
ここでの解決策は、
IMX8QM-MEK LinuxとAndroidの電源管理の違い
よろしくお願いします。
VinothSです。
このドキュメントはiMX8MQには使用できません。SCUとハードウェアパーティションはありません。
このアプリケーションをi.MX8MQボードに適用しようとしています。使用:
カーネルバージョン - 4.14.78
SDK バージョン - 2.7.0
RPMSG 共有ベース Addr は0xb8000000です。
私が抱えている問題は、ウェイクアップオプションがないことです。以下は存在しません。
/sys/bus/platform/devices/b8000000.rpmsg/power/wakeup
ウェイクアップオプションがない理由はありますか?これは追加が必要なデバイスツリーオプションですか?
Hi Qiang Li - Mpu Se ,
目が覚めた後、私はそのような結果を得ました、
mek_8q:/ $ cat /sys/power/pm_wakeup_irq
cat: /sys/power/pm_wakeup_irq: データがありません
よろしくお願いします。
ビノスS、
迅速な返信をありがとうQiang Li
よろしくお願いします。
ビノスS、
あなたはそれを無効にすることができるかどうかを確認するために、フォローされたコマンドでウェイクアップの理由を取得できますか?
cat /sys/power/pm_wakeup_irq
ありがとう Qiang Li - Mpu Se
はい、おっしゃる通り、私も同じことをしています。
自動ウェイクアップを無効にする可能性はありますか教えてください。
==> エコー mem > /sys/power/state
システムは、30〜40秒のシステムウェイクアップ後にディープスリープになります。
アプリケーションプロセッサ側で自動ウェイクアップを無効にすることは可能ですか?
よろしくお願いします。
ビノスS、
power_mode_switchをRVC M4コードにマージする必要があると思います。それは簡単なことではありません。
ありがとう Qiang Li - Mpu Se
はい、RVCを使用しています。デフォルトでは、M4はリアビューカメラのデモアプリケーションをロードします。
A35をウェイクアップするには、M4から power_mode_switch アプリケーションを実行する必要がありますか?
それで、私はボードで power_mode_switch をフラッシュする必要があります、私は正しいですか?
ありがとう&よろしく、
ヴィノス S、
Linux の単体テストを追加する必要はなく、Android Auto はすでに A35 と M4 間の通信に RPMSG を使用しています。「EVS/HVAC機能」は、Android User Guiderのドキュメントからご確認いただけます。
また、M4側のアプリケーションもAndroid BSPに含まれており、「android_build/vendor/nxp/mcu-sdk-auto」フォルダです。
Qiang Li - Mpu Seさん、お返事ありがとうございます。
>基本的に、Linux / Androidカーネルがサスペンドモードに移行すると、ウェイクアップソースを設定でき(ウェイクアップ割り込みを有効にしたまま)、M4はこれらの割り込みを使用してLinux / Androidをウェイクアップできます。
もう少し詳しく教えていただけますか?
この単体テストの追加方法を教えてください。
ありがとう&よろしく、
ビノスS、
基本的に、Linux / Androidカーネルがサスペンドモードに移行すると、ウェイクアップソースを設定でき(ウェイクアップ割り込みを有効にしたまま)、M4はこれらの割り込みを使用してLinux / Androidをウェイクアップできます。
ありがとう Qiang Li - Mpu Se
私はAndroid 9 Automotive(android_p9.0.0_2.1.1-auto)でIMX8QM-MEKに取り組んでいます。
カーネルバージョン - 4.14.98
SDK バージョン - 2.5.1
ユニットテストが見つかりませんので、私のソースにユニットテストを追加するための情報を提供してください。
可能であれば、MCU M4からA35へのCAN/GPIOウェイクアップを共有していただけませんか。
現在、私は電源管理のためのこの車両のドキュメントに従っています、
https://source.android.com/devices/automotive/power/power
ありがとう&よろしく、
ビノスS、
NXPリリースBSPをユーザーガイダーとしてビルドすると、ユニットテストアプリケーションはデフォルトで組み込まれます。
M4 SDKの場合、SDKをダウンロードした後、その中にユーザーガイドドキュメントがありますので、それに従ってビルドできます。
Hi,
ユニットテスト(/unit_tests/Remote_Processor_Messaging)の追加方法を教えてください!
また、SDKを使用してこのデモアプリケーションを構築する方法は?
ありがとう&よろしく、
VInothS、
こんにちは、
ありがとう~仕事です。
申し訳ありませんが、ケース1のウェイクアップソースとしてRPMSGを有効にするための次の行を見逃してしまいましたが、現在は更新されています。
エコー対応 > /sys/bus/platform/devices/90000000.rpmsg/power/wakeup
こんにちは、
私はあなたのケース1のステップに従い、テストコマンド を実行できます 、「c」キーを押すと、imx8qxp mek A35がウェイクアップしません。
カーネルの再構成またはu-bootが必要ですか?