キャリアボードに接続しているSDカードが何かの要因で認識できなくなったことを検出したい場合、どのような方法がありますか?
このトピックの様にカーネルログから検出する方法はあるのでしょうか?
電池が切れた時のrtcの振る舞いについて
tdx-infoの出力内容は下記の通りです。
Software summary
Bootloader: U-Boot
Kernel version: 5.15.129-6.5.0-devel+git.6f8fd49366db #1 SMP PREEMPT Fri Dec 22 11:15:52 UTC 2023
Kernel command line: root=PARTUUID=577cc89f-02 ro rootwait console=tty1 console=ttymxc2,115200 consoleblank=0 earlycon
Distro name: NAME=“TDX Wayland with XWayland”
Distro version: VERSION_ID=6.5.0-devel-20240327230744-build.0
Distro variant: -
Hostname: verdin-imx8mp-15230634
Hardware info
HW model: Toradex Verdin iMX8M Plus on Verdin Development Board
Toradex version: 0063 V1.1B
Serial number: 15230634
Processor arch: aarch64
Hi, I’m the Toradex AI Assistant.
I might make mistakes. Our support team will step in if needed. If I answered your question, please tick the “Solution” checkbox . For follow-up questions to me, please use @ToradexAI in your post.
Did you like my answer?
こんにちは!ご質問ありがとうございます。
キャリアボードに接続しているSDカードが何らかの要因で認識できなくなったことを検出するには、以下のような方法が考えられます。
1. カーネルログの監視
SDカードの挿入や取り外し、エラー発生時にはカーネルログにメッセージが出力されます。
具体的には、dmesg コマンドや journalctl -k で mmc、mmcblk、sdhci などのキーワードを含むログに注目します。
例えば、カードの認識エラーが発生すると次のようなメッセージが出ることがあります。
mmc0: card XXXX removed
mmc0: error -110 whilst initialising SD card
このようなログを監視することで、SDカードの認識状態を検出できます。
2. デバイスファイルの存在チェック
SDカードが認識されている場合は /dev/mmcblk* のようなデバイスファイルが存在します。
これらのファイルの有無を定期的に確認することで、認識状態を検出できます。
例:
if [ -e /dev/mmcblk1 ]; then
echo "SDカード認識中"
else
echo "SDカード未認識"
fi
3. sysfsの監視
/sys/class/mmc_host/ 以下のサブディレクトリ(例:mmc0、mmc1)にあるファイル内容や存在を監視することも有効です。
4. udevルールの利用
SDカードの挿抜イベントに合わせてカスタムスクリプトを実行したい場合は、udevルールを作成することもできます。
上記のように、カーネルログを監視する方法は一般的かつ有効ですので、ご要望の内容にも合致しています。
詳細については、以下もご参考ください:
Hello,
I would like to work on customizing a screen driver. I have identified the driver file: /drivers/gpu/drm/panel/panel-sitronix-st7701.c. I want to enable logs in this file and view them.
I have tried many solutions found online, but none have been successful.
For example, I tried adding the linux/module.h and linux/kernel.h libraries to the panel-sitronix-st7701.c file, along with printk(KERN_INFO "some thing\n") logs in several places.
I enabled the following options:
CONFIG_PRINTK=…
ご質問の内容で追加や具体的な運用例が必要な場合は、お知らせください。
Best regards, Toradex AI Assistant.
電池が切れた時のrtcの振る舞いについて と同様に、Qt5で作成したアプリからSDカードの認識状況を検出したいです。
QProcess process;
process.start("journalctl", {"-k", "-b", "--no-pager"});
process.waitForFinished();
QString output = process.readAllStandardOutput();
return output.contains("oscillator stop detected");
→"oscillator stop detected"をSDカードの認識に関する文字列に変更すればいいでしょうか?
その場合、該当する文字列を教えていただきたいです。
ご連絡ありがとうございます。
お返事が遅くなり申し訳ございません。
カーネルログを確認することでSDカード関連の変化(例えば挿抜)があった場合には検出できますが、
変化がない限りログに出ないため、アプリケーション側での検出としては確実性に欠ける場合があります。
そのため、より確実な方法としてはSDカードが現在認識されているかどうかを
Qtアプリケーションから /dev/ 以下の該当デバイスが存在しているかどうかで判断する方法をおすすめします。どのデバイス名になるかは mount コマンドなどで一度確認していただけると確実です。
Qt5のコード例としては、以下のように QFileInfo クラスを使って /dev/mmcblk1 が存在するかをチェックできます:
#include <QFileInfo>
bool isSdCardAvailable() {
QFileInfo sdDevice("/dev/mmcblk1");
return sdDevice.exists();
}
必要に応じて /dev/mmcblk1p1 やマウントポイント(例:/media/sdcard)をチェックする方法もあります。
また、SDカードの抜き差しイベントを監視したい場合は udev や inotify を利用するという選択肢もありますが、
アプリケーションの構成によってはシンプルに上記のようなポーリングで十分なケースもあります。
以上、引き続きよろしくお願いいたします。
アルバロ。
お忙しい中ご連絡ありがとうございます。
ご提案いただいたコード例でSDカードの挿抜を検出できました。
ありがとうございました。
1 Like