Armadilloフォーラム

Armadillo-640でkdump

s-saitou

2021年3月10日 12時34分

USBカメラ制御中にカーネルパニックで停止することがあり(ハード的な要因)、カーネルパニックが起きたことを何らかの形で記録したいと考えており、kdumpを使用しようとしています。
カーネルのドキュメント(Documentation/kdump)を参考に設定を行いましたが、カーネルパニック発生後、コンソールに以下のメッセージが出力されて停止しています。
[ 197.992384] Loading crashdump kernel...
[ 197.996354] Bye!
ダンプキャプチャカーネルがロードできていないのだと思いますが(ダンプカーネルの指定?)、何かお分かりになればご教授頂けるとありがたく存じます。

<環境>
kernel:linux-4.14-at22

1. kernel configurationで以下のConfigを有効化
  CONFIG_KEXEC
  CONFIG_SYSFS
  CONFIG_DEBUG_INFO
  AUTO_ZRELADDR
2.u-bootのブートパラメータに以下を追記(armの場合は不要とも書いてあるようですが)
  crashkernel=128M
3.以下のパッケージをインストール
  kdump-tools(1.6.1-1)
  kexec-tools(2.0.14-1)
4./etc/default/kdump-toolsを変更
  USE_KDUMP=1
  KDUMP_DERNEL=/boot/uImage
  #KDUMP_INITRD=/var/lib/kdump/initrd.img
5.再起動して状態を確認すると以下のようになっています。

# cat /proc/cmdline
root=/dev/mmcblk0p2 rootwait crashkernel=128M

# dmesg | grep crashkernel
[ 0.000000] Reserving 128MB of memory at 2304MB for crashkernel (System RAM: 512MB)
[ 0.000000] Kernel command line: root=/dev/mmcblk0p2 rootwait crashkernel=128M

# kdump-config show
DUMP_MODE: kdump
USE_KDUMP: 1
KDUMP_SYSCTL: kernel.panic_on_oops=1
KDUMP_COREDIR: /var/crash
crashkernel addr: 0x90000000
/boot/uImage
kdump initrd:

current state: ready to kdump

kexec command:
/sbin/kexec -p --command-line="root=/dev/mmcblk0p2 rootwait irqpoll nr_cpus=1 nousb systemd.unit=kdump-tools.service ata_piix.prefer_ms_hyperv=0" /boot/uImage

以上、よろしくお願いいたします。

コメント

at_akihito.irie

2021年3月10日 14時42分

入江です。

kdumpに関しましては現在調査中ですのでお待ちください。

根本的にカーネルパニックの発生原因についても確認したいので、よろしけれ
ばカーネルパニック発生時のログをいただけますでしょうか。

以上、よろしくお願いいたします。

ご回答ありがとうございます。
非常に稀にしか発生せず、書込み保護状態で動作させているので、実際にフィールドで発生したログは残っていません。
ノイジーな環境下で発生しているので、カメラ自体かケーブルに起因した通信関係の異常かと推測し、良くない事は承知ですが、USBカメラ撮影中に無理矢理USBケーブルを抜くとカーネルパニックを起こすことが出来るので、それで検証を行っています。

参考になるかはわかりませんが、その時にコンソールに出力されるメッセージを添付します。

USBカメラはUVC(USB Video Class)でArmadillo-810のマニュアルに記載されているのと同様の形で制御しています。
https://manual.atmark-techno.com/armadillo-810/armadillo-810_product_ma…

根本的にはハード的な対策が必要として、ソフト的には、kdumpを利用してSDカード等どこかにカーネルパニックが発生したことが残せればよいと考えています。

> 入江です。
>
> kdumpに関しましては現在調査中ですのでお待ちください。
>
> 根本的にカーネルパニックの発生原因についても確認したいので、よろしけれ
> ばカーネルパニック発生時のログをいただけますでしょうか。
>
> 以上、よろしくお願いいたします。
>

ファイル ファイルの説明
log.txt

at_akihito.irie

2021年3月15日 15時35分

入江です。

USBカメラのカーネルパニックの件と、kdumpができない件どちらについても解
決にはカーネルの修正が必要です。

修正パッチがありましたので、Linux-4.14向けにまとめたものを添付します。
パッチを適用することで、カーネルパニックが発生しなくなり、かつkdumpも
動作するはずですが、当方では実際に確認はしておりません。

可能であればlinux-4.14-at30に添付のパッチを適用し、ビルドしてできた
uImageでお試しいただけますでしょうか。

以上、よろしくお願いいたします。

ファイル ファイルの説明
patches.tar.gz 修正パッチが入っています。展開してお使いください。

at_akihito.irie

2021年3月15日 15時58分

入江です。

申し訳ございません。記載漏れがありました。

> 可能であればlinux-4.14-at30に添付のパッチを適用し、ビルドしてできた
> uImageでお試しいただけますでしょうか。
uImageだけでなく、dtbも修正後ビルドして作成されたものである必要があります。

以上、よろしくお願いいたします。

下記の手順でパッチを適用してuImage,dtbを更新して確認しましたが、状況は同じようです。

・パッチ適用
 カーネルソースディレクトリで
$patch -p1 < 0001_・・・.patch
・・・
$patch -p1 < 0015_・・・.patch

・armadillo-640_defconfigのpatchの内容を.configに反映
 CONFIG_THERMAL=y
 CONFIG_THERMAL_OF=y
 CONFIG_CPU_THERMAL=y
 CONFIG_IMX_THERMAL=y

・ビルド
 $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
 $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage

・uImageとdtbを更新
 下記2つをArmadilloに転送し、上書き
 arch/arm/boot/uImage → /boot/uImage
 arch/arm/boot/dts/armadillo-640.dtb →/boot/a640.dtb

カーネルパニック時のログを添付します。

> 入江です。
>
> 申し訳ございません。記載漏れがありました。
>
> > 可能であればlinux-4.14-at30に添付のパッチを適用し、ビルドしてできた
> > uImageでお試しいただけますでしょうか。
> uImageだけでなく、dtbも修正後ビルドして作成されたものである必要があります。
>
> 以上、よろしくお願いいたします。
>

ファイル ファイルの説明
log2.txt

失礼しました。
上記の結果はlinux-4.14-at22にパッチを適用して行っていました。
linux-v4.14-at30で確認してみます。

> 下記の手順でパッチを適用してuImage,dtbを更新して確認しましたが、状況は同じようです。
>
> ・パッチ適用
>  カーネルソースディレクトリで
> $patch -p1 < 0001_・・・.patch
> ・・・
> $patch -p1 < 0015_・・・.patch
>
> ・armadillo-640_defconfigのpatchの内容を.configに反映
>  CONFIG_THERMAL=y
>  CONFIG_THERMAL_OF=y
>  CONFIG_CPU_THERMAL=y
>  CONFIG_IMX_THERMAL=y
>
> ・ビルド
>  $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
>  $make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LOADADDR=0x82000000 uImage
>
> ・uImageとdtbを更新
>  下記2つをArmadilloに転送し、上書き
>  arch/arm/boot/uImage → /boot/uImage
>  arch/arm/boot/dts/armadillo-640.dtb →/boot/a640.dtb
>
> カーネルパニック時のログを添付します。
>
> > 入江です。
> >
> > 申し訳ございません。記載漏れがありました。
> >
> > > 可能であればlinux-4.14-at30に添付のパッチを適用し、ビルドしてできた
> > > uImageでお試しいただけますでしょうか。
> > uImageだけでなく、dtbも修正後ビルドして作成されたものである必要があります。
> >
> > 以上、よろしくお願いいたします。
> >

回答が遅くなりすみません。
linux-v4.14-at30で頂いたパッチを適用して確認したところ、USB切断時のカーネルパニックは発生しなくなりました。
ありがとうございます。

kdumpについては、以下のコマンドで意図的にカーネルパニックを発生させて確認していますが、
#echo c > /proc/sysrq-trigger
以下のように表示されるだけでうまく動作していません。
[ 85.891786] Loading crashdump kernel...
[ 85.895767] Bye!

色々と試行錯誤しているところですが、
ひとまずはカーネルパニックが解消できそうという事で様子見したいと思っています。

kdumpについてはもう少し理解が進んでから改めてご相談させて頂きたいと思います。
ご対応ありがとうございました。