はじめに
NuttXではデバッグログをRAMに出力することができる。
RAMに出力されたログデータはLinuxなどでおなじみのdmesg
コマンドで表示することができる。
BluePillのようなRAMの少ない環境では活用は難しそうだが、STM32F4Discoveryくらい余裕のある環境であれば非常に便利。
ここではSTM32F4Discoveryの環境でRAMLOGを有効にする。
RAMLOG
usbnshとnshで有効にすべきコンフィグレーションが異なる。
usbnshでの設定
次の設定が必要となる。
CONFIG_RAMLOG=y CONFIG_RAMLOG_CONSOLE_BUFSIZE=1024 CONFIG_RAMLOG_NONBLOCKING=y CONFIG_RAMLOG_SYSLOG=y #CONFIG_SYSLOG_CHAR undefined, else duplicate output with syslog_putc()
メニューコンフィグ
make menuconfig
で設定する項目を示す。
CONFIG_RAMLOG
Device Drivers -> System Logging -> RAM log device support
CONFIG_RAMLOG_NONBLOCKING
Device Drivers -> System Logging -> RAM log device support -> RAMLOG non-block reads
CONFIG_RAMLOG_SYSLOG
Device Drivers -> System Logging -> System log device -> Use RAMLOG for SYSLOG
nshでの設定
次の設定が必要となる。
CONFIG_RAMLOG=y CONFIG_RAMLOG_CONSOLE_BUFSIZE=1024 CONFIG_RAMLOG_CONSOLE=y CONFIG_RAMLOG_SYSLOG=y #CONFIG_SYSLOG_CHAR undefined, else duplicate output with syslog_putc()
メニューコンフィグ
make menuconfig
で設定する項目を示す。
CONFIG_RAMLOG
Device Drivers -> System Logging -> RAM log device support
CONFIG_RAMLOG_CONSOLE
Device Drivers -> System Logging -> RAM log device support -> Use RAMLOG for /dev/console
CONFIG_RAMLOG_SYSLOG
Device Drivers -> System Logging -> System log device -> Use RAMLOG for SYSLOG
バッファサイズについて
RAMLOGのバッファはリングバッファで実装1されており、 バッファを使い切ると古いログは新しいログに上書きされる。
CONFIG_RAMLOG_CONSOLE_BUFSIZE
のデフォルトは1024となっているが、
この程度のサイズだと、デバッグ時に見たいログがすぐに上書きされてしまう。
なのでCONFIG_RAMLOG_CONSOLE_BUFSIZE
を8192くらいに増やしておく。
Device Drivers -> System Logging -> RAMLOG buffer size
デバッグログ有効化
必要に応じでデバッグログの機能を有効化する。
コンフィグレーション
例としてSchedulerのデバッグログを有効化する。
CONFIG_DEBUG_FEATURES=y CONFIG_DEBUG_ERROR=y CONFIG_DEBUG_WARN=y CONFIG_DEBUG_INFO=y CONFIG_DEBUG_SCHED=y CONFIG_DEBUG_SCHED_ERROR=y CONFIG_DEBUG_SCHED_WARN=y CONFIG_DEBUG_SCHED_INFO=y
メニューコンフィグ
CONFIG_DEBUG_FEATURES
Build Setup -> Debug Options -> Enable Debug Features
CONFIG_DEBUG_ERROR
Build Setup -> Debug Options -> Enable Debug Features -> Enable Error Output
CONFIG_DEBUG_WARN
Build Setup -> Debug Options -> Enable Debug Features -> Enable Error Output -> Enable Warnings Output
CONFIG_DEBUG_INFO
Build Setup -> Debug Options -> Enable Debug Features -> Enable Error Output -> Enable Warnings Output -> Enable Informational Debug Output
CONFIG_DEBUG_SCHED
Build Setup -> Debug Options -> Enable Debug Features -> Scheduler Debug Features
CONFIG_DEBUG_SCHED_ERROR
Build Setup -> Debug Options -> Enable Debug Features -> Scheduler Debug Features -> Scheduler Error Output
CONFIG_DEBUG_SHED_WARN
Build Setup -> Debug Options -> Enable Debug Features -> Scheduler Debug Features -> Scheduler Warnings Output
CONFIG_DEBUG_SCHED_INFO
Build Setup -> Debug Options -> Enable Debug Features -> Scheduler Debug Features -> Scheduler Informational Output
動作確認
helpコマンドを実行してdmesg
が有効化されていればOK。
NuttShell (NSH) nsh> help help usage: help [-v] [<cmd>] [ cmp exit mb pwd time ? dirname false mkdir rm true basename dd free mh rmdir uname break df help mount set umount cat dmesg hexdump mv sh unset cd echo kill mw sleep usleep cp exec ls ps test xd Builtin Apps: nsh>
dmesgを実行してログが表示される事を確認。
nsh> dmesg os_start: Entry uart_register: Registering /dev/console uart_register: Registering /dev/ttyS0 os_do_appstart: Starting init thread os_start: CPU0: Beginning Idle Loop
Linuxとは異なり、一度実行されたログは再度コマンドを実行しても表示されなくなる。