2

Linux から CPU 上のハードウェア ウォッチドッグにアクセス/書き込みしようとしています。これは私が今までやったことがないことなので、私の知識はほとんどありません。RTD ユーザー マニュアルへのリンクは、http://www.rtd.com/NEW_manuals/hardware/cpumodules/CMV34M_BDM610000077A.pdf (ウォッチドッグ タイマーの情報については 64 ページを参照) と、インターネットで見つけて編集した小さなサンプル プログラムです。BIOS で Watchdog Setup Register を有効にし、付属のプログラムを実行しました。プログラムは実行され、エラーは出力されませんが、実際には何もしていないようです。 1秒。誰かが私が間違っていることについての洞察を持っていることを望んでいました。

#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
#include <stdlib.h>

#define BASEPORT 0x985

int main()
{
  /* Get access to the ports */
  if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}

  /* Set the data signals (D0-7) of the port to all high (1) */
  outb(1, BASEPORT);

  /* Sleep for a while (100 ms) */
  usleep(100000);

  /* Read from the status port (BASE+1) and display the result */
  printf("status: %d\n", inb(BASEPORT + 1));

  /* We don't need the ports anymore */
  if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}

  exit(0);
}
4

3 に答える 3

2

コマンドioplの前に (3)を試してください。は、実際には「優れた」移植可能なコマンドではありませんが、同様のウォッチドッグの問題にうまく使用できました。outb()iopl()

于 2014-01-05T21:55:58.863 に答える
1

を使用することを考えている場合は、インターフェイスを表示する通常の方法で実行し、いくつかのシステム全体のテストをサポートし、単に犬に餌を与え続ける を使用するwatchdog timerことをお勧めします。writing a driver for that bit of hardware/dev/watchdogwatchdog daemon

既存のウォッチドッグ ドライバーのコードの例は、次の場所にあります。

http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/drivers/watchdog/

ウォッチドッグ デーモンの動作に関する情報 (および私自身の実験的なバージョン) は、次の場所にあります。

http://www.sat.dundee.ac.uk/~psc/watchdog/Linux-Watchdog.html

于 2013-09-19T15:33:09.813 に答える
1

ドキュメントにiopermは、If turn_onis nonzero, the calling thread must be privilegesed ( CAP_SYS_RAWIO)と書かれています。この条件が満たされていることを確認する必要があります。また、あなたのコメントが言うように、あなたの呼び出しは「すべて高い」ではなく、outb(1, BASEPORT)単に に設定BASEPORTされます。0x01「オールハイ」したい場合は、 が必要outb(0xFF, BASEPORT)です。

于 2013-09-04T18:27:00.907 に答える